У меня есть это простое промежуточное ПО
<?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, поэтому я уверен, что не понимаю чего-то важного.
Я просмотрел несколько руководств, прочитал несколько статей и искал ответ здесь, в Переполнении стека. Все еще не могу понять это.
Как мне запустить промежуточное ПО перед каждым запросом?
Спасибо.