Laravel 在资源路由控制器的特定路由上应用中间件

Posted

技术标签:

【中文标题】Laravel 在资源路由控制器的特定路由上应用中间件【英文标题】:Laravel Apply middlware on specific route of resource route controller 【发布时间】:2021-03-05 21:10:45 【问题描述】:

我想在资源控制器的创建路由上应用中间件,但对如何设置中间件感到困惑。通常我们可以像这样添加中间件

Route::get('api/users/user', function (App\Models\User $user) 
    return $user->email;
)->middleware('name');

但是当我们有一个资源控制器时,我怎么能在资源控制器的单个路由上应用中间件。

Route::resource('front-pages','Admin\FrontPagesController');

【问题讨论】:

【参考方案1】:

创建一个__construct() 函数

在 FrontPagesController.php

public function __construct()

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

参考链接https://laravel.com/docs/8.x/controllers#controller-middleware


所有可能的功能

/**
 * Instantiate a new controller instance.
 *
 * @return void
 */
public function __construct()

    $this->middleware('auth');

    $this->middleware('log')->only('index');

    $this->middleware('subscribed')->except('store');

【讨论】:

我也可以只通过而不是除了?? 是的,你可以做任何事【参考方案2】:

你可以使用

 Route::resource('front-pages','Admin\FrontPagesController')->only('fornt-page.whatever name');

您可以将其与中间件分组

【讨论】:

【参考方案3】:
Route::middleware('name')->resource('front-pages' , 'Admin\FrontPagesController');

参考 laravel 文档:https://laravel.com/docs/8.x/middleware#introduction

【讨论】:

以上是关于Laravel 在资源路由控制器的特定路由上应用中间件的主要内容,如果未能解决你的问题,请参考以下文章

禁用特定文件夹/路由的 Laravel 路由

Laravel - 如何通过资源路由将变量传递给控制器​​?

'仅授权'资源的特定路径

laravel 将未定义的 url 路由到特定的控制器

多个路由到同一个 Laravel 资源控制器操作

laravel 博客(resource)