/ / ¿El inicio de la agrupación de rutas con namespace () no está permitido en Laravel 5.4? - php, laravel, laravel-5.4

¿Está comenzando la agrupación de rutas con el espacio de nombres () no permitido en Laravel 5.4? - php, laravel, laravel-5.4

Usando Laravel 5.4, de hecho en la documentación sobre agrupación de rutas, y un ejemplo como este se dio acerca de espacio de nombres:

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

Esto de acuerdo con el documento está bien, pero después de instalar Laravel 5.4.30 descubrí que al hacer lo anterior se produce el siguiente error:

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

Aunque hice una solución alternativa al usar otros métodos de ruta, como los siguientes:

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

Todavía, ¿Se trata de un error en Laravel o algo que no sospeché es el problema en mi código?.

Si hay una necesidad de proporcionar más explicaciones, entonces me complace hacerlo.

enter image description here

Actualización: como sugirió @Adweb, se puede hacer usando group(["namespace" => "Admin"])... pero todavía estoy realmente interesado en ¿Cuál podría ser el problema basado en el error que recibí?.

Aquí está mi versión de 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

Respuestas

6 para la respuesta № 1

En resumen, es un problema de PHP y no está bien documentado en Laravel (esto solo puede funcionar en PHP 7 pero no en 5.x). No es un problema de tu lado, así que relájate ~


A partir de PHP 5.3, se agrega el espacio de nombres y, por lo tanto, no se puede utilizar como nombre de función.

De acuerdo a http://docs.php.net/manual/en/migration53.incompatible.php:

Las siguientes palabras clave ahora están reservadas y no se pueden utilizar en Función, clase, etc. nombres.

  • ir
  • espacio de nombres

Para obtener más información sobre la palabra clave del espacio de nombres en PHP, eche un vistazo a http://php.net/manual/en/language.namespaces.nsconstants.php.

(en cuanto a por qué Route::prefix("")->namespace("Admin") funciona, es probable que sea un problema del analizador PHP, pero en general PHP 5.x está diseñado para no admitir este tipo de denominación de métodos)


El código realmente funciona bien desde PHP 7. De acuerdo con http://php.net/manual/en/reserved.keywords.php:

Estas palabras tienen un significado especial en PHP. Algunos de ellos representan cosas. que parecen funciones, algunas parecen constantes, etc., pero en realidad no lo son: son construcciones de lenguaje. No puedes usar ninguna de las siguientes palabras como constantes, nombres de clase, función o método nombres Usarlos como nombres de variables generalmente está bien, pero podría llevar a Confusión.

A partir de PHP 7.0.0, estas palabras clave están permitidas como propiedad, constante y nombres de métodos de clases, interfaces y rasgos, excepto que la clase puede No se utilizará como nombre constante.

espacio de nombres es una de esas palabras clave. A partir de PHP 7, podrían usarse como nombres de métodos. Entonces, si realmente quieres usar este método de Laravel, necesitas actualizar a PHP 7.

O, podría usar otras formas de usar esta función sin usar el método del espacio de nombres, como se menciona en su pregunta y otras respuestas.

Espero que esto resuelva sus preocupaciones. ^ _ ^


4 para la respuesta № 2

Creo que puedes intentar esto:

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

});

Espero que este trabajo para usted!


2 para la respuesta № 3
Route::group([ "prefix" => "admin","namespace" => "Admin","middleware" =>"admin"], function () {
// Controllers Within The "AppHttpControllersAdmin" Namespace
});

2 para la respuesta № 4

en realidad este nombre Ruta :: espacio de nombres () estamos usando para esto

Ej: cuando tienes controlador en Administración carpetaAppHttpControllersAdmin;) puedes usar asi

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

así que si no usas espacio de nombres entonces tienes que usar asi

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

pero asegúrate en tu HomeController en la parte superior tienes que cambiar el espacio de nombres como este

namespace AppHttpControllers; a namespace AppHttpControllersAdmin;

He comprobado con Laravel 5.4.3 Servidor XAMPP PHP - 7.0 :)


-1 para la respuesta № 5

El problema es que IlluminateRoutingRouter no tiene un namespace() función.

Para aplicar el espacio de nombres a las rutas, use group():

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

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

});

No estoy seguro de por qué documentos usos namespace() y group() con fluidez. Pero claramente namespace() no está en el código de todo lo que sé a partir de ahora.

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