Laravel 中间件/路由组

Posted

技术标签:

【中文标题】Laravel 中间件/路由组【英文标题】:Laravel Middleware / Route Groups 【发布时间】:2016-12-09 06:36:32 【问题描述】:

我对 Laravel 还很陌生,所以这个问题对某些人来说可能很明显。

在每个 HTTP 请求运行检查的情况下,例如 用户身份验证。是否有更好、更有效或更简单的正确方法来运行这些检查。从我最初的研究来看,这似乎可以使用中间件来完成,例如。

public function __construct()

    $this->middleware('auth');

似乎也可以使用路由组,例如。

Route::group(['middleware' => 'auth'], function () 
    Route::get('/', function ()    
        // Uses Auth Middleware
    );

    Route::get('user/profile', function () 
        // Uses Auth Middleware
    );
);

这两种方式中的任何一种都有什么好处吗?除了不必在每个控制器身份验证中添加 $this->middleware('auth'); 的明显好处之外,还需要检查。

谢谢

编辑..

在接受您的建议后,我尝试使用路由分组来控制我的 Auth MiddleWare。但这似乎破坏了我的网站。

Route::group(['middleware' => 'auth'], function () 
    Route::auth();

    Route::get('/home', 'HomeController@index');

    Route::get ( '/redirect/provider', 'SocialAuthController@redirect' );
    Route::get ( '/callback/provider', 'SocialAuthController@callback' );
);

我是否遗漏了一些明显的东西?

【问题讨论】:

它做同样的事情,所以选择你喜欢的任何方式,并坚持下去 所以他们绝对没有区别? Route::auth (); 只是声明所有用于注册和登录的路由的一种方式。如果您使用不错的 IDE,您可以单击并转到方法定义,它会显示正在创建的路由。 Laravel 使用了很多抽象、魔术方法和多重继承,所以一个好的 ide 是必须的 你能推荐一个与 Laravel 一起使用的好主意吗? phpstorm 如果你愿意花几英镑,Netbeans 如果你不愿意。 【参考方案1】:

没有真正的区别,我个人使用标准中间件的组并将异常放入构造中

【讨论】:

只使用一次或两次的中间件,例如特定页面的年龄门【参考方案2】:

使用路由组很容易维护/修改,否则你必须记住你使用某些中间件的每个控制器,当然这在中小型应用程序中不是问题,但这在大型应用程序,其中有很多控制器和对中间件的引用。

【讨论】:

https://vi.stackfinder.net/questions/38745291/laravel-middleware-route-groups得到源【参考方案3】:

你快到了,只需删除Route::auth()

Route::group(['middleware' => 'auth'], function () 
    Route::get('/home', 'HomeController@index');
    //add more Routes here
);

【讨论】:

【参考方案4】:

建议的选项对我不起作用,但是当我检查 laravel 文档时,我发现:

Route::middleware(['web'])->group(function () 
    //Your routes here
);

它对我有用。 Laravel 8.*

【讨论】:

以上是关于Laravel 中间件/路由组的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 中间件/路由组

Laravel - 如何通过路由组将变量传递给中间件?

Laravel 5 中间件路由群组子域名路由

Laravel 5.2 - 在中间件请求中获取路由组名称

Laravel 5.5 Entrust使用中间件授予路由组权限失败

Laravel 的路由