Tesla
@Tesla

Как заинжектить загруженную модель в middleware?

Роут:
Route::model('article', '\App\Article');
Route::get('articles/{article}', ['uses' => 'ArticlesController@show',  'middleware' => 'article.check']);

Middleware:
class ArticleCheck {
	public function __construct(\App\Article $article)
	{
		dd($article->exists); // false
	}
}

Инжект \App\Article в __construct() создает новый экземпляр \App\Article, а нужно получить уже загруженную модель.

Решение:
Добраться до модели можно через вызов текущего роута:
class ArticleCheck
{
	public function __construct()
	{
		$this->article = \Route::current()->getParameter('article', new \App\Article);
	}
}

Это работает в случае, когда middleware привязана к роуту. Если middleware глобальная, то запускается до роутинга, и модель, естественно, еще не загружена..
  • Вопрос задан
  • 293 просмотра
Пригласить эксперта
Ответы на вопрос 1
@orangeShadow
Php Программист
Хочу заметить что ее можно загрузить пост
<?php namespace App\Http\Middleware;

class AfterMiddleware implements Middleware {

    public function handle($request, Closure $next)
    {
        $response = $next($request);

        // Perform action

        return $response;
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы