我已经命名了路线:
admin.post.category
admin.post.tag
admin.post.theme
路由\ admin.php的
Route::group(['prefix' => 'post', 'as' => 'post.'], function () {
Route::resource('category', 'Admin\Post\TermsController');
Route::resource('theme', 'Admin\Post\TermsController');
Route::resource('tag', 'Admin\Post\TermsController');
});
HTTP \控制器\管理员\邮政\ 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()移动到index()
$route_name = Route::currentRouteName();
$arr = explode('.', $route_name);
echo "<pre>".print_r($arr[2], 1)."</pre>"; exit;
然后“php artisan route:list”运行良好。
如何解决这个问题?
答案 0 :(得分:0)
它抛出了错误,因为你有一些名称只包含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;