/ / लारवेल 5.4 में नाम स्थान () के साथ रूट ग्रुपिंग शुरू नहीं की गई है? - php, लार्वा, लार्वा-5.4

क्या लैरवेल 5.4 में नेमस्पेस () की अनुमति नहीं है? - पीएचपी, लार्वेल, लार्वेल-5.4

लारवेल 5.4 का उपयोग करते हुए, वास्तव में रूट ग्रुपिंग के बारे में प्रलेखन में, और इस बारे में एक उदाहरण दिया गया था नेमस्पेसिंग:

Route::namespace("Admin")->group(function () {
// Controllers Within The "AppHttpControllersAdmin" Namespace
});

डॉक्टर के अनुसार यह ठीक है, लेकिन लारवेल 5.4.30 को स्थापित करने के बाद मुझे पता चला कि उपरोक्त करने से निम्नलिखित त्रुटि होती है:

PHP Parse error:  syntax error, unexpected "namespace" (T_NAMESPACE) in /Applications/MAMP/htdocs/my_app/routes/web.php on line

भले ही मैंने इसके पहले अन्य मार्ग विधियों का उपयोग करके वर्कअराउंड किया हो जैसे कि निम्नलिखित:

Route::prefix("")->namespace("Admin")->group(function () {
// Controllers Within The "AppHttpControllersAdmin" Namespace
});

फिर भी, यह लारवेल में एक बग या कुछ ऐसा है जो मैंने किया था "टी संदिग्ध मेरे कोड में मुद्दा है?.

यदि अधिक स्पष्टीकरण प्रदान करने की आवश्यकता है, तो मुझे ऐसा करने में खुशी है।

यहां छवि विवरण दर्ज करें

अद्यतन: जैसा कि @ Adweb ने सुझाव दिया है, इसका उपयोग करके किया जा सकता है group(["namespace" => "Admin"])... लेकिन मैं वास्तव में अभी भी उत्सुक हूं मुझे मिली त्रुटि के आधार पर समस्या क्या हो सकती है.

यहाँ मेरा PHP संस्करण है:

PHP 5.6.30 (cli) (built: Mar 11 2017 09:56:27)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

उत्तर:

उत्तर № 1 के लिए 6

संक्षेप में, यह एक PHP समस्या है, और लारवेल की एक अच्छी तरह से प्रलेखित चीज नहीं है (यह केवल PHP 7 में काम कर सकता है लेकिन 5.x नहीं) यह आपकी तरफ से कोई समस्या नहीं है, इसलिए आराम करें ~


PHP 5.3 को शुरू करते हुए, नाम स्थान जोड़ा जाता है और इसलिए इसे फ़ंक्शन नाम के रूप में उपयोग नहीं किया जा सकता है।

इसके अनुसार http://docs.php.net/manual/en/migration53.incompatible.php:

निम्नलिखित कीवर्ड अब आरक्षित हैं और इनका उपयोग नहीं किया जा सकता है फ़ंक्शन, वर्ग, आदि नाम।

  • के लिए जाओ
  • नाम स्थान

PHP में namepace कीवर्ड के बारे में अधिक जानकारी के लिए, कृपया एक नज़र डालें http://php.net/manual/en/language.namespaces.nsconstants.php.

(क्यों के लिए के रूप में Route::prefix("")->namespace("Admin") यह काम करता है, यह शायद PHP पार्सर का एक मुद्दा है, फिर भी सामान्य रूप से PHP 5.x को इस प्रकार के नामकरण विधि का समर्थन नहीं करने के लिए डिज़ाइन किया गया है


कोड वास्तव में PHP 7. के अनुसार अच्छी तरह से चलता है http://php.net/manual/en/reserved.keywords.php:

इन शब्दों का PHP में विशेष अर्थ है। उनमें से कुछ चीजों का प्रतिनिधित्व करते हैं जो फ़ंक्शंस की तरह दिखते हैं, कुछ कॉन्स्टेंट की तरह दिखते हैं, और इसी तरह - लेकिन वे "वास्तव में नहीं हैं: वे भाषा के निर्माण हैं। आप किसी का उपयोग नहीं कर सकते स्थिरांक, वर्ग के नाम, कार्य या विधि के रूप में निम्नलिखित शब्दों को नाम। उन्हें चर नामों के रूप में उपयोग करना आम तौर पर ठीक है, लेकिन हो सकता है उलझन।

PHP 7.0.0 के रूप में इन खोजशब्दों को संपत्ति, स्थिर और वर्गों के नाम, इंटरफेस और लक्षण, उस वर्ग को छोड़कर निरंतर नाम के रूप में उपयोग नहीं किया जाना चाहिए।

नामस्थान उन खोजशब्दों में से एक है। PHP 7 को शुरू करते हुए, उन्हें विधि नामों के रूप में इस्तेमाल किया जा सकता है। इसलिए यदि आप वास्तव में लारवेल की इस पद्धति का उपयोग करना चाहते हैं, तो आपको PHP 7 में अपग्रेड करने की आवश्यकता है।

या, आप नेमस्पेस विधि का उपयोग किए बिना इस सुविधा का उपयोग करने के अन्य तरीकों का उपयोग कर सकते हैं, जैसा कि आपके प्रश्न और अन्य उत्तरों में वर्णित है।

आशा है कि यह आपकी चिंताओं को हल करता है। ^ _ ^


जवाब के लिए 4 № 2

मुझे लगता है कि आप इसे आजमा सकते हैं:

Route::group(["namespace" => "Admin", "prefix" => "admin", "middleware" => "admin"], function () {

});

आशा है कि यह काम आपके लिए !!!


जवाब के लिए 2 № 3
Route::group([ "prefix" => "admin","namespace" => "Admin","middleware" =>"admin"], function () {
// Controllers Within The "AppHttpControllersAdmin" Namespace
});

जवाब के लिए 2 № 4

वास्तव में यह नाम है मार्ग :: नाम स्थान () हम इसके लिए उपयोग कर रहे हैं

Ex: जब आपके पास नियंत्रक है व्यवस्थापक फ़ोल्डर (AppHttpControllersAdmin;) आप इस तरह का उपयोग कर सकते हैं

Route::namespace("Admin")->group(function () {
Route::get("/home", "HomeController@index");
});

तो अगर डॉन "टी का उपयोग करें नाम स्थान फिर आपको इस तरह का उपयोग करना होगा

Route::get("/home", "AdminHomeController@index");

लेकिन अपने में सुनिश्चित करें HomeController शीर्ष में आपको इस तरह नामस्थान बदलना होगा

namespace AppHttpControllers; सेवा मेरे namespace AppHttpControllersAdmin;

मैंने साथ चेक किया है लारवेल 5.4.3 सर्वर - XAMPP PHP - 7.0 :)


उत्तर के लिए -1 № 5

मुद्दा यह है कि IlluminateRoutingRouter नहीं हैnamespace() समारोह।

मार्गों पर नाम स्थान लागू करने के लिए, का उपयोग करें group():

Route::group(["namespace" => "Admin"], function() {

// Other routes under the Admin namespace here...

});

मुझे यकीन नहीं है कि क्यों डॉक्स का उपयोग करता है namespace() तथा group() धाराप्रवाह। लेकिन स्पष्ट रूप से namespace() सभी के लिए कोड में नहीं है मुझे अब तक पता है

संदर्भ: https://laravel.com/api/5.4/Illuminate/Routing/Router.html.