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)
简而言之,这是一个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.
或者,您可以使用其他方法来使用此功能,而无需使用命名空间方法,如您的问题和其他答案中所述.
希望这能解决您的疑虑.^ _ ^
我想你可以试试这个:
Route::group(['namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => 'admin'], function () {
});
Run Code Online (Sandbox Code Playgroud)
希望这对你有用!!!