2016-06-23 13 views
2

私はの商品モデルとの商品テーブルをデータベースに持っています。各記事は、Laravelの標準URI構造www.example.com/articles/55idです)を使用して表示できます。Laravelルートモデルバインディング(slug)はshowメソッドでのみ機能しますか?

RouteServiceProvider.php:各記事には、ルートモデルバインディングと私はslug代わりidの使用ので、スラグフィールド(スラグ記事テーブルの列)を持っている

public function boot(Router $router) 
{ 
    parent::boot($router); 

    \Route::bind('articles', function($slug) { 
     return \App\Article::where('slug', $slug)->firstOrFail(); 
    }); 
} 

routes.phpで私は持っています:

Route::resource('articles', 'ArticleController'); 

などの記事には、www.example.com/some_slugのようなURLでアクセスできます。

モデルなしクエリ結果を[アプリケーション\条]:私はいくつかの記事を編集したいとき

はしかし、今、私は次のエラーを取得します。

たとえば、次のように開いてみると、www.example.com/some_slug/edit - そのエラーが発生します。

したがって、メソッドArticleController @ show(Article $ article)は正常に機能しますが、ArticleController @ edit(Article $ article)は機能しません。ここで

は私のルートリストは、次のとおりです。

Rote List

、ここではArticleControllerはからおよび編集する方法を示しています

public function show(Article $article) // THIS WORKS FINE 
{ 
    $tags = $article->tags()->get(); 
    return view('articles.show', compact('article', 'tags')); 
} 

public function edit(Article $article) // DOESN'T WORK -> When I open article/slug/edit I get error: No query results for model [App\Article]. 
{ 
    $tags = Tag::lists('name', 'id'); 
    $categories = Category::orderBy('lft', 'asc')->get()->lists('padded_name', 'id'); 
    return view('articles.edit', compact('article', 'tags', 'categories')); 
} 
+0

あなたは 'edit'パラメータの最後に' S'を逃しています。 '/ articles/{articles}'にマッチさせるため 'edit(Article $ article)'を編集しないでください –

答えて

1

私は5.2を信じて、あなたは直接キー名をカスタマイズすることができますgetRouteKeyNameメソッドを使用するモデルでは、

public function getRouteKeyName() 
{ 
    return 'slug'; 
} 

docs

1

私は、RouteServiceProvider.phpに触れることなくあなたのための別のアプローチをしています。私はそれが助けて欲しい
を使用する必要があります。はApp \ Tagを使用します。 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')); 
    } 
関連する問題