Laravel Group内部集团中间件

Dio*_*nça 5 laravel laravel-routing laravel-5

通过在具有中间件本身的组中使用中间件,我遇到了一些问题,如下面的代码:

    Route::group(['prefix' => '{lang?}','middleware'=>'language'], function() {
        Route::get('/', 'HomeController@index');
        Route::get('/login','AuthController@login');
        Route::post('/login','AuthController@do_login');
        Route::get('/logout','AuthController@logout');
        Route::group(['prefix' => 'checkout','middleware'=>'authentication'], function () {
           Route::get('/', "CheckoutController@step1");
    });
});
Run Code Online (Sandbox Code Playgroud)

而我目前的AuthenticationMiddleware

<?php
namespace App\Http\Middleware;

use Closure;
use Illuminate\Contracts\Routing\Middleware;
use Session;
use App;
use Redirect;
class AuthenticationMiddleware{

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        die("inside");
        if(!User::check())
        {
            return Redirect::to("/login");
        }
        else
        {
            return $next($request);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

编辑:所以,他在/ checkout范围之外进入最后一个中间件事件.我怎么能避免呢?谢谢大家

Fra*_*ere 1

$middleware从您的评论中,我看到您在AND上添加了中间件$routeMiddleware,因此AuthenticationMiddleware将在每个请求上运行。如果您只想让请求传递AuthenticationMiddleware到指定的路由,请将其从 中删除$middleware并仅保留在$routeMiddleware.

从文档中:

如果您希望在应用程序的每个 HTTP 请求期间运行中间件,只需在 app/Http/Kernel.php 类的 $middleware 属性中列出中间件类即可。

和:

如果您想将中间件分配给特定的路由,您应该首先在 app/Http/Kernel.php 文件中为中间件分配一个快捷键。默认情况下,此类的 $routeMiddleware 属性包含 Laravel 中包含的中间件的条目。要添加您自己的键,只需将其附加到此列表中并为其分配您选择的键即可。