Роут:
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 глобальная, то запускается до роутинга, и модель, естественно, еще не загружена..