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

8 浏览
0 Comments

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

这个问题已经有了答案

PHP的这个错误是什么意思?

在使用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中的一个错误还是我在代码中漏掉了什么问题?

如果需要提供更多的解释,我很乐意去做。

\"enter

更新:正如@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

admin 更改状态以发布 2023年5月21日
0
0 Comments

我觉得你可以尝试这个:

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

希望这对你有用!!!

0
0 Comments

简而言之,这是一个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希望这解决了您的疑虑^_^。

0