Как передать что-то в конструктор в middleware
Есть middleware в конструктор которого хочу передать определенный параметр, что бы явно внедрять зависимость и не делать что-то типо того:
public function __construct()
{
$this->default_ref = config('TEST_CONFIG', 'http://test');
}
а выполнить что-то типо того
public function __construct($default_ref)
{
$this->default_ref = $default_ref;
}
Буду благодарен за подсказку как я это могу сделать
Ответы (1 шт):
Как бы это правильно пояснить...
При вызове посредников (middleware) выполняется метод handle (если его не переопределять). Посредники явно не создаются, поэтому конструктор по сути не задействуется. Но в него можно включать зависимости и они заинжектятся (это чтобы в handle не писать new SomeClass())
А теперь о возможности передачи параметров. Из документации. Их можно передать в метод hadle. Делается это через : и разделяются параметры запятыми
Route::put('/post/{id}', function ($id) {
//
})->middleware('role:editor');
и в самом посреднике
public function handle($request, Closure $next, $role)
{
if (! $request->user()->hasRole($role)) {
// Redirect...
}
return $next($request);
}
Если смотреть на Ваш вопрос, то вы можете передать параметр (главное, чтобы это была строка, которая не содержит запятых)
Route::put('/post/{id}', function ($id) {
//
})->middleware('redirect:' . $default_ref);