【问题标题】:Laravel 5 Resourceful Routes Plus MiddlewareLaravel 5 资源丰富的路由加中间件
【发布时间】:2015-04-28 01:11:11
【问题描述】:

是否可以将中间件添加到资源丰富的路由的全部或部分项目中?

例如...

<?php

Route::resource('quotes', 'QuotesController');

此外,如果可能的话,我想让除了indexshow 之外的所有路由都使用auth 中间件。或者这是否需要在控制器内完成?

【问题讨论】:

    标签: laravel laravel-5 routes laravel-routing laravel-middleware


    【解决方案1】:

    QuotesController 构造函数中,您可以使用:

    $this->middleware('auth', ['except' => ['index','show']]);
    

    参考:Controller middleware in Laravel 5

    【讨论】:

    • 谢谢!不确定这是否可以在资源调用中完成,但似乎不是我目前所看到的
    • 我需要将其他参数传递给中间件,这可能吗?
    • @activatedgeek 如果你有新问题,问一个
    • 使用 Route::apiResources([]) 时会怎样?没有找到如何一次为所有 apiResources 添加中间件?
    【解决方案2】:

    您可以将路由组与中间件概念结合使用: http://laravel.com/docs/master/routing

    Route::group(['middleware' => 'auth'], function()
    {
        Route::resource('todo', 'TodoController', ['only' => ['index']]);
    });
    

    【讨论】:

    • 大约一岁了,但既然我正在尝试做同样的事情,不应该是Route::resource('todo', 'TodoController', ['except' =&gt; ['index']]); 仅从身份验证中间件中排除索引吗?
    • 这取决于你想要你的身份验证控制器。总体思路仍然相关,IMO 提供的链接也是如此。
    【解决方案3】:

    在带有 PHP 7 的 Laravel 中,在编写之前,它不适用于我的多方法排除

    Route::group(['middleware' => 'auth:api'], function() {
            
    Route::resource('categories', 'CategoryController', ['except' => 'show,index']);
    });
    

    也许这对某人有帮助。

    【讨论】:

      【解决方案4】:

      LARAVEL 8.x 更新

      web.php:

      Route::resource('quotes', 'QuotesController');
      

      在您的控制器中:

      public function __construct()
      {
              $this->middleware('auth')->except(['index','show']);
              // OR
              $this->middleware('auth')->only(['store','update','edit','create']);
      }
      

      参考:Controller Middleware

      【讨论】:

        【解决方案5】:

        一直在为 Laravel 5.8+ 寻找更好的解决方案。

        这就是我所做的:

        将中间件应用于资源,除了那些您不希望应用中间件的资源。 (此处索引并显示)

         Route::resource('resource', 'Controller', [
                    'except' => [
                        'index',
                        'show'
                    ]
                ])
                ->middleware(['auth']);
        

        然后,创建除第一个之外的资源路由。所以索引并显示。

        Route::resource('resource', 'Controller', [
                'only' => [
                    'index',
                    'show'
                ]
            ]);
        

        【讨论】:

          猜你喜欢
          • 2015-02-19
          • 2015-06-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-21
          • 2011-12-21
          相关资源
          最近更新 更多