Привязка модели маршрута Laravel (slug)работает только для метода show?
У меня есть модель статьи и таблица статей в базе данных. Каждая статья может быть показана с использованием стандартной структуры URI Laravel: www.example.com/articles/5
(где 5
-идентификатор статьиslug
вместо slug
:
RouteServiceProvider.РНР:
id
В маршруте.php у меня есть:
public function boot(Router $router)
{
parent::boot($router);
\Route::bind('articles', function($slug) {
return \App\Article::where('slug', $slug)->firstOrFail();
});
}
и теперь статьи могут быть доступны с URL-адресами, такими как: Route::resource('articles', 'ArticleController');
.
Но теперь, когда я хочу отредактировать какую-то статью, я получаю следующую ошибку:
Нет результатов запроса для модели [приложение\статья].
Например, когда я пытаюсь открыть следующее: www.example.com/some_slug
- я понял эту ошибку.
Итак, метод ArticleController@show (Article $article) работает нормально, но ArticleController@edit(Article $article) не работает.
Вот мой список маршрутов:
а вот показать и отредактировать методы из ArticleController:
www.example.com/some_slug/edit

Ответы - Привязка модели маршрута Laravel (slug)работает только для метода show? / Laravel Route model binding (slug) only works for show method?

23.06.2016 05:28:09
Я верю в 5.2, вы можете настроить имя ключа непосредственно в модели, используя getRouteKeyName

25.06.2016 12:07:11
У меня есть другой подход для вас, не касаясь RouteServiceProvider.РНР. Надеюсь, это поможет.
Вам нужно использовать приложение\статьи; и использовать приложение\тега; в ArticleController.
ArticleController
public function show($slug)
{
$article = Article::where('slug', $slug)->first();
$tags = Tag::lists('name', 'id');
return view('articles.edit', compact('article', 'tags'));
}
public function edit($slug)
{
$article = Article::where('slug', $slug)->first();
$tags = Tag::lists('name', 'id');
return view('articles.edit', compact('article', 'tags'));
}

20.01.2020 09:06:40
Если кто-то хочет сделать привязку модели маршрута как с id
, так и slug
, явно связывание, как это работает:
Route::bind('product', function($value) {
return \App\Product::where('id', $value)->orWhere('slug', $value)->first();
});