Laravel嵌套路由组逆中间件

时间:2015-05-20 12:16:20

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

我有一个相当复杂的应用程序,它使用自定义身份验证中间件。我有一个像这样的路线组:

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

    Route::get('/', function() {

        echo 'private';
    });

    Route::group(['prefix' => 'public'], function() {

        Route::get('/', function() {

            echo 'public';
        });
    })
});

现在auth中间件将重定向所有未经过身份验证的请求。具有auth前缀的主组已通过身份验证。但是,即使用户未经过身份验证,我也希望可以访问组public

所以:

http://example.com/auth < must be authenticated
http://example.com/auth/some-sub-page < must be authenticated
http://example.com/auth/public < no need for authentication

那么有没有办法将'remove-middleware' => 'auth'之类的东西添加到带有public前缀的嵌套组中?或者我是否需要重组我的路线组?

2 个答案:

答案 0 :(得分:0)

为什么不将auth中间件包装在非公共路由周围?

Route::group(['prefix' => 'auth'], function() {

    // routes requiring auth
    Route::group(['middleware' => 'auth']) {

        Route::get('/', function() {

            echo 'private';
        });

    }

    // other routes
    Route::group(['prefix' => 'public'], function() {

        Route::get('/', function() {

            echo 'public';
        });

    });
});

可能有办法做一个'删除 - 中间件'类型的中间件,但这可能会变得混乱。这似乎是最干净的解决方案。

答案 1 :(得分:0)

您可以在路线上使用 withoutMiddleware 方法。

Route::get('/example')->withoutMiddleware('auth')

您也可以在 withoutMiddleware

上使用 Route::group