$article)
{
dd($article);
Просто хочется немножко разобраться с красивым формированием ссылок
Ссылка для редактирования
<a href="{{ route('articles.edit', ['alias' => $article->alias]) }}" class="btn btn-info btn-sm float-left mr-1">
<i class="fas fa-pencil-alt"></i>
</a>
Роут для этого
Route::resource('articles', ArticlesController::class)->parameters([
'articles' => 'alias'
]);
Для того чтобы отображалась модель мы должны в RouteServiceProvider прописать в boot()
$this->routes(function () {
Route::bind('articles', function ($value) {
return Article::where('alias', $value)->firstOrFail();
});
Но почему-то все равно получаю чистую модельку?
}
сразу модель передавай через implicit binding
Потому что articles !== article
Ничего не меняется, я и так пробовал Route::bind('article', function ($value) { return Article::where('alias', $value)->firstOrFail(); });
Чем тебя не устроил такой вариант? https://laravel.com/docs/8.x/routing#customizing-the-default-key-name
https://laravel.com/docs/8.x/controllers#restful-scoping-resource-routes
Ничего. Но кажется я просто запутался уже. Непонял из доки что же такое scoped Пока написал так, но не уверен верно ли Route::resource('articles', ArticlesController::class)->parameters([ 'articles' => 'alias' ])->scoped([ 'articles' => 'alias', ]);;
Контроллер должен называться в единственном числе
Не совсем, в scoped должно быть 'article' => 'alias', модель - поле
в твоем случае достаточно scoped() чтоб выборка была по полю alias
При создании контроллера ларка из имени берёт модель. Соглашение об именах не просто так написали
ну так scoped как раз переопределяет этот момент
Да, но это не меняет сути того, что проблема возникла из-за нарушения соглашения об именах
Автор нарушил его в угоду своего удобства, столкнулся с проблемой, успешно решил, все довольны
Обсуждают сегодня