【发布时间】:2019-04-07 11:49:06
【问题描述】:
我有这个简单的中间件
<?php
namespace App\Http\Middleware;
use Closure;
use Session;
use App;
class SetPageLanguage
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(Session::has('language'))
{
$lang = Session::get('language');
App::setLocale($lang); // still don't know which one to use, but I'll figure it out ;)
app()->setLocale($lang);
}
return $next($request);
}
}
应该在每个请求之前运行。所以我将它添加到内核中:
class Kernel extends HttpKernel
{
protected $middleware = [
...
\App\Http\Middleware\SetPageLanguage::class, // middleware for setting the language when loading a page
];
但它不起作用。它永远不会运行。
另一方面,如果我把它放在 routeMiddleware 中,像这样:
protected $routeMiddleware = [
...
'localization' => \App\Http\Middleware\SetPageLanguage::class,
...
并在每条路线上调用它,例如:
Route::GET('/', 'AnonymController@home')->middleware('localization');
完美运行!但我不想这样做。我希望它在每个请求之前自动运行,就像它应该的那样。 我错过了什么?
我对 laravel 和 Php 还很陌生,所以我确定我不了解一些重要的东西。
我看了一些教程,阅读了几篇文章并在 Stack Overflow 上搜索了答案。还是想不通。
如何让我的中间件在每个请求之前运行?
谢谢。
【问题讨论】:
标签: php laravel middleware