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无法访问会话,因为我的中间件是运行 在他们开始之前。
我有一个中间件,用于设置我的 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无法访问会话,因为我的中间件是运行 在他们开始之前。