是否在Laravel 5.4中不允许使用namespace()开始路由分组?

Olu*_*kin 11 php laravel laravel-5.4

使用Laravel 5.4,确实在关于路由分组的文档中,以及一个关于命名空间的示例:

Route::namespace('Admin')->group(function () {
   // Controllers Within The "App\Http\Controllers\Admin" Namespace
});
Run Code Online (Sandbox Code Playgroud)

这根据文档是可以的,但在安装Laravel 5.4.30之后,我发现执行上述操作会引发以下错误:

PHP Parse error:  syntax error, unexpected 'namespace' (T_NAMESPACE) in /Applications/MAMP/htdocs/my_app/routes/web.php on line
Run Code Online (Sandbox Code Playgroud)

即使我之前使用其他路由方法做了一个解决方法,如下所示:

Route::prefix('')->namespace('Admin')->group(function () {
   // Controllers Within The "App\Http\Controllers\Admin" Namespace
});
Run Code Online (Sandbox Code Playgroud)

然而,这是Laravel中的一个错误还是我怀疑在我的代码中存在的问题?.

如果需要提供更多解释,那么我很乐意这样做.

在此输入图像描述

更新:正如@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
Run Code Online (Sandbox Code Playgroud)

ada*_*myi 7

简而言之,这是一个PHP问题,而且Laravel没有详细记录(这只能在PHP 7中工作,但不能在5.x中工作).这不是你身边的问题,所以放松〜


从PHP 5.3开始,添加了名称空间,因此不能用作函数名.

根据http://docs.php.net/manual/en/migration53.incompatible.php:

现在保留以下关键字,不能在函数,类等名称中使用.

  • 去
  • 命名空间

有关PHP中命名空间关键字的更多信息,请查看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开始,这些关键字被允许作为类,接口和特征的属性,常量和方法名称,但该类不能用作常量名称.

namespace是其中一个关键字.从PHP 7开始,它们可以用作方法名称.因此,如果您真的想使用Laravel的这种方法,则需要升级到PHP 7.

或者,您可以使用其他方法来使用此功能,而无需使用命名空间方法,如您的问题和其他答案中所述.

希望这能解决您的疑虑.^ _ ^


Add*_*Ltd 5

我想你可以试试这个:

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

});
Run Code Online (Sandbox Code Playgroud)

希望这对你有用!!!