我有一个中间件,用于通过在每个请求之前从会话中获取值来设置我的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();
}
现在问题就出现了。如果我将中间件设置为全局,则在内核文件中,它不会生效。语言环境设置不正确。
如果我手动将该中间件应用于每个路由,它就可以工作。
如果我将该中间件分配给内核文件中的web
中间件组,该组件会自动应用于所有路由,那么它也能正常工作。
这让我很困惑。请与我分享你的建议!谢谢:))
答案 0 :(得分:2)
我终于找到了答案。
负责启动会话的中间件不是全局中间件,它只在web
中间件组中。因此,laravel无法访问会话,因为我的中间件在它们启动之前就已运行。 / p>