나는 상품 번호 모델과 상품 테이블을 데이터베이스에 가지고 있습니다. 각 기사는 Laravel의 표준 URI 구조 인 www.example.com/articles/5
(여기에서 5
은 id
)을 사용하여 표시 할 수 있습니다.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'));
}
당신은 당신의'edit' 매개 변수의 마지막에's'을 놓치고있어. '/ articles/{articles}'과 일치시키기 위해''편집 (기사 $ 기사)''편집 (기사 $ 기사) '이 아니어야합니다. –