/ / Ist der Start der Routegruppierung mit Namespace () in Laravel 5.4 nicht erlaubt? - php, laravel, laravel-5.4

Ist das Starten der Routengruppierung mit Namespace () in Laravel 5.4 nicht erlaubt? - php, laravel, laravel-5.4

Mit Laravel 5.4, in der Tat in der Dokumentation über die Routengruppierung, und ein Beispiel wie es dazu gegeben wurde Namensraum:

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

Dies ist gemäß dem Dokument in Ordnung, aber nach der Installation von Laravel 5.4.30 habe ich festgestellt, dass die obige Fehlermeldung den folgenden Fehler verursacht:

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

Obwohl ich einen Workaround mit anderen Routenmethoden wie dem folgenden durchgeführt habe:

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

Noch, Ist das ein Fehler in Laravel oder etwas, das ich nicht in meinem Code vermutete?.

Wenn es notwendig ist, mehr Erklärungen zu geben, dann bin ich froh, das zu tun.

Bildbeschreibung hier eingeben

Update: Wie @Adweb vorgeschlagen hat, kann es mit verwendet werden group(["namespace" => "Admin"])... aber ich bin wirklich immer noch scharf darauf Was könnte das Problem sein, basierend auf dem Fehler, den ich bekam.

Hier ist meine PHP-Version:

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

Antworten:

6 für die Antwort № 1

Kurz gesagt, es ist ein PHP-Problem und eine nicht gut dokumentierte Sache von Laravel (das kann nur in PHP 7 funktionieren, aber nicht in 5.x). Es ist kein Problem auf deiner Seite, also entspann dich ~


Ab PHP 5.3 wird Namespace hinzugefügt und kann daher nicht als Funktionsname verwendet werden.

Gemäß http://docs.php.net/manual/en/migration53.incompatible.php:

Die folgenden Schlüsselwörter sind jetzt reserviert und dürfen nicht verwendet werden Funktion, Klasse, usw. Namen.

  • gehe zu
  • Namensraum

Weitere Informationen zum Namespace-Schlüsselwort in PHP finden Sie unter http://php.net/manual/en/language.namespaces.nsconstants.php.

(Warum? Route::prefix("")->namespace("Admin") funktioniert, es ist wahrscheinlich ein Problem des PHP-Parsers, aber im Allgemeinen ist PHP 5.x nicht dazu gedacht, diese Art der Methodenbenennung zu unterstützen.


Der Code läuft eigentlich seit PHP 7 gut http://php.net/manual/en/reserved.keywords.php:

Diese Wörter haben eine besondere Bedeutung in PHP. Einige von ihnen repräsentieren Dinge die wie Funktionen aussehen, manche wie Konstanten und so weiter - aber sie sind nicht wirklich, sie sind Sprachkonstrukte. Du kannst keine verwenden der folgenden Wörter als Konstanten, Klassennamen, Funktion oder Methode Namen. Sie als Variablennamen zu verwenden ist in der Regel in Ordnung, könnte aber dazu führen Verwechslung.

Ab PHP 7.0.0 sind diese Schlüsselwörter als Eigenschaft, Konstante und zulässig Methodennamen von Klassen, Interfaces und Traits, ausgenommen diese Klasse nicht als konstanter Name verwendet werden.

Namespace ist eines dieser Schlüsselwörter. Ab PHP 7 könnten sie als Methodennamen verwendet werden. Wenn Sie also wirklich diese Methode von Laravel verwenden möchten, müssen Sie auf PHP 7 upgraden.

Oder Sie können andere Möglichkeiten verwenden, um diese Funktion zu verwenden, ohne die Namespace-Methode zu verwenden, wie in Ihrer Frage und anderen Antworten erwähnt.

Hoffe das löst deine Sorgen. ^ _ ^


4 für die Antwort № 2

Ich denke du kannst es versuchen:

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

});

Hoffe, diese Arbeit für dich !!!


2 für die Antwort № 3
Route::group([ "prefix" => "admin","namespace" => "Admin","middleware" =>"admin"], function () {
// Controllers Within The "AppHttpControllersAdmin" Namespace
});

2 für die Antwort № 4

eigentlich dieser Name Route :: Namespace () Wir benutzen dafür

Bsp .: wenn Sie Controller haben Administrator Mappe (AppHttpControllersAdmin;) Sie können so verwenden

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

also wenn nicht benutzen Namensraum dann musst du so verwenden

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

aber stellen Sie sicher, in Ihrem HomeController oben müssen Sie den Namensraum wie folgt ändern

namespace AppHttpControllers; zu namespace AppHttpControllersAdmin;

Ich habe mit überprüft Laravel 5.4.3 Server - XAMPP PHP - 7.0 :)


-1 für die Antwort № 5

Das Problem ist das IlluminateRoutingRouter hat nicht ein namespace() Funktion.

Um den Namespace auf Routen anzuwenden, verwenden Sie group():

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

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

});

Ich bin mir nicht sicher, warum Dokumente Verwendet namespace() und group() fließend. Aber klar namespace() ist nicht im Code für alles, was ich jetzt weiß.

Referenz: https://laravel.com/api/5.4/Illuminate/Routing/Router.html.