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



我命名了路由:

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;

相关内容

  • 没有找到相关文章

最新更新