2016-06-23 134 views
2

我有文章模型和文章表在數據庫中。每篇文章都可以使用Laravel的標準URI結構顯示:www.example.com/articles/5(其中5是文章id)。每篇文章都有一個場(塞在文章表列),所以用路線模型綁定我用的slug代替idLaravel路徑模型綁定(slug)僅適用於show方法?

RouteServiceProvider.php:

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'); 

現在的文章可以通過以下URL訪問:www.example.com/some_slug

但是現在,當我想編輯的一些文章中,我得到以下錯誤:

沒有找到模型查詢結果[應用程序\文章。

例如,當我嘗試打開以下內容: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}'應該編輯(Article $ article)'不'編輯(Article $ article)'' –

回答

1

我相信,在5.2中,你可以直接自定義鍵名在使用getRouteKeyName方法的模型中:

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

docs

1

我沒有碰到RouteServiceProvider.php的另一種方法。我希望它有幫助。
您需要使用App \ Article;使用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')); 
    }