【问题标题】:What is the alternative to Route::filter in Laravel 8?Laravel 8 中 Route::filter 的替代方法是什么?
【发布时间】:2021-12-07 02:41:57
【问题描述】:

我希望所有页面都需要登录,/index 和 /login 除外。我试图这样解决它:

Route::filter('pattern: ^(index|login)*', 'auth');

在 laravel 8 中 Route::filter 不再可用。如何解决这个问题,而不是将每个路由定义都放在一个大组中?

【问题讨论】:

    标签: php laravel routes


    【解决方案1】:

    在您的 routes/web.php 文件中创建一个中间件组。

    Route::middleware(['auth'])->group( function () {
    
        // Your protected routes here
    
    });
    

    或者,您可以为路由设置中间件例外:

    // In your auth middleware that extends Authenticate
    
    ...
    
    /**
     * Routes that should skip handle.
     *
     * @var array $except
     */
    protected array $except;
    
    
    public function __construct(){
        $this->except = [
            route('index'),
            route('login')
        ];
    }
    
    
    /**
     * @param \Illuminate\Http\Request $request
     */
    public function handle( Request $request )
    {
        $current_route = $request->route();
    
        if( in_array($current_route, $this->except ) {
            // Route don't needs to be guarded
        }
    
    }
    
    ...
    

    如果您不想拥有大型组,那么您可以为每个路由指定中间件(可能看起来很乱)

    Route::get('/route', [FooController::class, 'index'])->middleware('auth');
    

    【讨论】:

    • 如何解决这个问题,而不把每个路由定义都放在一个大组中?
    • @IterAtor 如果您不想使用大型组,那么您必须为每个路由指定中间件。
    • @IterAtor 在回答中编辑中间件方法
    猜你喜欢
    • 2019-05-05
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多