在 Laravel 5.4 中,使用 namespace() 开始路由分组是不被允许的吗?
在 Laravel 5.4 中,使用 namespace() 开始路由分组是不被允许的吗?
这个问题已经有了答案:
在使用Laravel5.4的过程中,确实在关于路由分组的文档中提到了一个关于命名空间的例子:
Route::namespace('Admin')->group(function () { // Controllers Within The "App\Http\Controllers\Admin" Namespace });
按照文档上的做法应该是没问题的,但是在安装了Laravel5.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 "App\Http\Controllers\Admin" Namespace });
但是,这是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
简而言之,这是一个PHP问题,也是Laravel文档中未记录的内容(只能在PHP 7中使用,而不能在5.x中使用)。这不是你的问题,所以放松一下~\n\n从PHP 5.3开始,namespace被添加了进去,因此不能用作函数名。\n\n根据http://docs.php.net/manual/en/migration53.incompatible.php:\n\n以下关键字现在已被保留,不能在函数、类等名称中使用。\n\n goto\n\n namespace\n\n关于PHP中的namespace关键字的更多信息,请参见http://php.net/manual/en/language.namespaces.nsconstants.php。\n\n(至于为什么Route::prefix(\'\')->namespace(\'Admin\')可以工作,可能是PHP解析器的问题,但总的来说,PHP 5.x通常不支持这种方法命名)\n\n代码实际上在PHP 7下运行良好。 根据http://php.net/manual/en/reserved.keywords.php:\n\n这些单词在PHP中具有特殊意义。其中一些表示类似函数的东西,一些表示类似常量的东西,等等-但实际上它们不是:它们是语言结构。您不能将以下任何单词用作常量、类名、函数或方法名称。将它们用作变量名通常是可以的,但可能会导致混淆。\n\n从PHP 7.0.0开始,这些关键字被允许作为类、接口和特性的属性、常量和方法名称,除了类不能用作常量名称。\n\nnamespace是这些关键字之一。从PHP 7开始,它们可以用作方法名称。因此,如果您确实想使用Laravel的此方法,则需要升级到PHP 7。\n\n或者,您可以使用其他方式来使用此功能而不使用namespace方法,如您的问题和其他答案中提到的。\n\n希望这解决了您的疑虑^_^。