2016-06-23 1 views
2

나는 상품 번호 모델과 상품 테이블을 데이터베이스에 가지고 있습니다. 각 기사는 Laravel의 표준 URI 구조 인 www.example.com/articles/5 (여기에서 5id)을 사용하여 표시 할 수 있습니다.Laravel Route 모델 바인딩 (슬러그)은 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) 메서드는 작동하지 않습니다.

저는 5.2 믿는
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}'과 일치시키기 위해''편집 (기사 $ 기사)''편집 (기사 $ 기사) '이 아니어야합니다. –

답변

1

, 당신은 키 이름을 직접 정의 할 수 있습니다 : 는 ArticleController에서 편집 방법을 보여 여기에

Rote List

과 : 여기

내 경로 목록입니다 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')); 
    }