laravel控制器不能在construce()里面使用currentRouteName()

时间:2017-05-29 17:46:38

标签: laravel laravel-5 laravel-5.4

我已经命名了路线:
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”运行良好。

如何解决这个问题?

1 个答案:

答案 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;