Laravel 设置为全局中间件时中间件不起作用

Laravel middleware does not work when set as global middleware

我有一个中间件,用于设置我的 laravel 应用程序的语言环境,方法是在每次请求之前从会话中获取值。

我有一个设置这个变量的路由,我将这个中间件应用到所有路由,包括这个。

这是我的中间件:

namespace App\Http\Middleware;

use App;
use Closure;
use Session;

class LocaleMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(Session::has('locale')){
            App::setLocale(Session::get('locale'));
        }

        return $next($request);
    }
}

这是我设置语言的路径

public function setLang(string $lang)
{
    Session::put('locale', $lang);

    return back();
}

现在这里是 problem.If 我在内核文件中将那个中间件设置为全局的,它不需要 effect.The locale 设置不正确。

如果我手动将该中间件应用到每个路由,它就可以工作。

如果我将该中间件分配给内核文件中的 web 中间件组,它会自动应用于所有路由,它也能正常工作。

这让我很困惑 lot.Please 与我分享您的建议!谢谢:)

我终于找到了答案。

负责启动会话的中间件不是全局中间件,它只在web中间件group.Therefore,laravel无法访问会话,因为我的中间件是运行 在他们开始之前。