我命名了路由:admin.post.category
admin.post.tag
admin.post.theme
路由\管理员.php
Route::group(['prefix' => 'post', 'as' => 'post.'], function () {
Route::resource('category', 'AdminPostTermsController');
Route::resource('theme', 'AdminPostTermsController');
Route::resource('tag', 'AdminPostTermsController');
});
http\controller\admin\post\termsController
public function __construct(Request $request)
{
$this->request = $request;
$route_name = Route::currentRouteName();
$arr = explode('.', $route_name);
echo "<pre>".print_r($arr[2], 1)."</pre>"; exit;
}
当我 http://localhost/admin/post/category 访问页面时,它可以显示类别。但是当我运行命令时
php artisan route:list
它显示
[ErrorException]
Undefined offset: 2
如果我将三行从 __construct(( 移动到索引 ((
$route_name = Route::currentRouteName();
$arr = explode('.', $route_name);
echo "<pre>".print_r($arr[2], 1)."</pre>"; exit;
然后"php artisan route:list"运行良好。
如何解决这个问题?
它抛出错误是因为您有一些路由的名称仅包含 1 个点。因此,当您访问$arr[2]
时,它是未定义的,因此错误Undefined offset: 2
。看起来您将每个路由方法推入单个控制器。当您尝试运行php artisan route:list
时,它会检查每个路由,从而调用构造函数,因此对于名称仅为 1 个点的路由,它会失败。将您的代码更改为此代码,它应该可以工作。
$route_name = Route::currentRouteName();
$arr = explode('.', $route_name);
if (isset($arr[2])) {
echo "<pre>".print_r($arr[2], 1)."</pre>";
}
exit;