使用Laravel 5.4,确实在关于路由分组的文档中,以及关于namespacing的示例:
Route::namespace('Admin')->group(function () {
// Controllers Within The "App\Http\Controllers\Admin" Namespace
});
这根据文档是可以的,但在安装Laravel 5.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
答案 0 :(得分:6)
简而言之,这是一个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开始,这些关键字被允许作为属性,常量和 类,接口和特征的方法名称,但类可以 不能用作常数名称。
命名空间是其中一个关键字。从PHP 7开始,它们可以用作方法名称。因此,如果你真的想使用这种Laravel方法,你需要升级到PHP 7。
或者,您可以使用其他方法来使用此功能,而无需使用命名空间方法,如问题和其他答案中所述。
希望这能解决您的疑虑。 ^ _ ^
答案 1 :(得分:5)
我想你可以试试这个:
Route::group(['namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => 'admin'], function () {
});
希望这对你有用!!!
答案 2 :(得分:3)
Route::group([ 'prefix' => 'admin','namespace' => 'Admin','middleware' =>'admin'], function () {
// Controllers Within The "App\Http\Controllers\Admin" Namespace
});
答案 3 :(得分:0)
问题是Illuminate\Routing\Router
没有 namespace()
功能。
要将名称空间应用于路线,请使用group()
:
Route::group(['namespace' => 'Admin'], function() {
// Other routes under the Admin namespace here...
});
我不确定为什么docs会流利地使用namespace()
和group()
。但很明显namespace()
不在我所知道的所有代码中。
参考:https://laravel.com/api/5.4/Illuminate/Routing/Router.html。