Привязка модели маршрута Laravel (slug)работает только для метода show?

Привязка модели маршрута Laravel (slug)работает только для метода show?

23.06.2016 03:43:34 Просмотров 33 Источник

У меня есть модель статьи и таблица статей в базе данных. Каждая статья может быть показана с использованием стандартной структуры 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) не работает.

Вот мой список маршрутов:

Rote List

а вот показать и отредактировать методы из ArticleController:

www.example.com/some_slug/edit
У вопроса есть решение - Посмотреть?

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

MarketHubb

23.06.2016 05:28:09

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

доктора

Javier Gonzalez

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'));
    }
Jay Wadhwa

20.01.2020 09:06:40

Если кто-то хочет сделать привязку модели маршрута как с id, так и slug, явно связывание, как это работает:

Route::bind('product', function($value) {
   return \App\Product::where('id', $value)->orWhere('slug', $value)->first();
});
Закрыть X