【问题标题】:Call to a member function middleware() on null在 null 上调用成员函数 middleware()
【发布时间】:2017-09-24 11:15:20
【问题描述】:

我在路由 Laravel 时使用了以下中间件:

Route::group(['prefix' => 'api/'], function() {
    Route::resource('admin', 'adminController')->middleware('auth');
    Route::resource('profile', 'profileController')->middleware('role');
}); 

当我在 URL 中调用“admin”或“profile”路径时出现此错误

【问题讨论】:

  • 嗨@ramzi,你是如何将中间件添加到资源中的,我的意思是你找到了将中间件添加到资源中的方法。

标签: laravel routing middleware laravel-5.4


【解决方案1】:

在 Laravel 8.x 中,您可以通过以下方式解决此问题:

Route::group(['middleware' => 'auth','middleware' => 'role'], function () {
  ..........
});

【讨论】:

    【解决方案2】:

    只需颠倒顺序:

     Route::middleware('scope:clock-in')->resource('clock', 'ClockController');
    

    正如 lagbox 所说:

    Route::resource() 不返回任何内容。

    但是中间件可以。

    【讨论】:

      【解决方案3】:

      使用这个

      Route::prefix("/dashboard")->middleware(['first','second'])->group(function(){
      });
      

      【讨论】:

      • 为什么会这样。以前我有 Route::prefix('app')->group(function() { //routes here})->middleware('auth'); 没有工作,但是在 group(function()) 工作之前放置中间件调用....但是为什么呢?谢谢。
      【解决方案4】:

      这是因为Route::resource() 没有返回任何东西。其虚空。它不返回对象。

      Laravel 5.4 - Illuminate\Routing\Router@resource

      在 Laravel 5.5(开发中)中,Route::resource() 将返回一个对象以流畅地添加选项。

      【讨论】:

        【解决方案5】:

        您的资源控制器很可能没有解析为实际的控制器。需要检查的一些事项

        • 检查您是否确实有一个 adminController,并且类名的大小写是否正确
        • 检查您的控制器是否在默认命名空间中,如果没有,请更改控制器命名空间,或为您的路由添加命名空间属性
        • 检查您的控制器是否没有在启动时导致异常被忽略,从而导致您拥有一个空控制器。

        【讨论】:

        • 我在添加“中间件('auth')”时收到此错误
        猜你喜欢
        • 2017-08-09
        • 2020-03-10
        • 2018-02-06
        • 2018-09-29
        • 2018-08-04
        • 2020-03-28
        • 2020-10-28
        • 2020-09-01
        • 2023-03-14
        相关资源
        最近更新 更多