Задать вопрос

Как в Ларавел передать объект из middleware в контроллер?

Почему-то больше чем уверен, что есть кто встречались с такой задачей, но что-то особо не нашел решения, гугл подсказывает, что многие пихают в request данные и оттуда вытягивают ($request->object), а как-то можно зависимостью подставить?
Хотелось бы что-то такое:
// Url: site.tld/username/profile
// Url: site.tld/username/posts
// Url: site.tld/username/comments

// routes
Route::prefix('{userLogin}')
    ->name('user.')
    ->middleware('user.login')
    ->group(*);

// Middleware
public function handle($request, Closure $next) 
{
    $user = User::where('login', $request->segment(1))->findOrFail();
    app('url')->defaults(['login' => $user->login]);
    *set_data*('currentUser', $user);

    return $next($request);
}

// controller
public function show(User $currentUser)
{
}


После будет более сложная логика, хотелось бы решить именно middleware, чтоб в каждом контроллере-экшне такое не решать =/
  • Вопрос задан
  • 1221 просмотр
Подписаться 9 Средний 1 комментарий
Решения вопроса 1
Миддлвейры не предназначены для пропихивания чего-то в контроллер. Они обрабатывают реквест и либо перекидывают его следующему миддлвейру (и так до конца), либо возвращают ответ (который прервет исполнение).

Если этот адский велосипед вы пишете только для того, чтобы авторизовывать пользователей и получать инстанс текущего пользователя, то в Ларе это уже из коробки реализовано.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Kostik_1993
Web Developer
Route Model Binding правильно решает вашу задачу
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы