Laravel 路由动作未定义

Posted

技术标签:

【中文标题】Laravel 路由动作未定义【英文标题】:Laravel route Action not defined 【发布时间】:2015-11-09 18:18:53 【问题描述】:

我在使用 Laravel 路由时遇到问题。我试图在路由中的一些中间件之后重定向到控制器。但是总是有这个错误。

错误是:

UrlGenerator.php 第 558 行中的 InvalidArgumentException:操作 App\Http\Controllers\DashboardController@index 未定义。

路线代码为:

Route::get('/dashboard', ['middleware' => 'auth', function() 
    return Redirect::action('DashboardController@index', array('user' => \Auth::user()));
]);

控制器:

class DashboardController extends Controller

    /**
     * Display a listing of the resource.
     *
     * @return Response
     */
    public function index()
    
        return view('dashboard')->with('user', \Auth::user());
    

但上面的代码确实有效(所以我猜控制器确实有效):

Route::get('/testdashboard', [
    'uses' => 'DashboardController@index'
]);

那么问题是什么?什么是有效的路由操作?

【问题讨论】:

【参考方案1】:

这是评论而不是帖子,但我目前无法发送。我不明白你为什么将参数 (\Auth:user()) 传递给不需要它的方法(但是当你为 View 这样做时它是正确的)。

无论如何,我建议您使用中间件

public function handle($request, Closure $next)

    if (Auth::check()) 
        return redirect(...);
     else 
        return redirect(...);
     

【讨论】:

糟糕。对此感到抱歉。当我询问时伪造代码时,这可能是一个错误。因为它实际上并没有运行,所以我删除了它。我会修改它。 不!我在回答中添加了更多内容。请检查一下。【参考方案2】:

这可能是一个更好的方法,改变

Route::get('/dashboard', ['middleware' => 'auth', function() 
  return Redirect::action('DashboardController@index', 
  array('user' =>      \Auth::user()));
]);

Route::get('/', [
  'middleware' => 'auth',
  'uses' => 'DashboardController@index'
]);

【讨论】:

【参考方案3】:

使用这条路线代替你的路线并将你的 Laravel 项目升级到 Laravel 8:

Route::middleware(['auth:sanctum', 'verified'])->group(function () 
    Route::get('/dashboard', 'DashboardController@index')->name('daskboard');
);

【讨论】:

以上是关于Laravel 路由动作未定义的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 8 中未定义动作 Controller@store 的问题

Laravel 表单路由未定义

Laravel 路由错误:路由 [登录] 未定义

Laravel 路由未定义错误

Laravel 8 中未定义命名路由

Laravel 5.1 UrlGenerator 路由未定义错误