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.
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 № 1Kurz 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.