半夜翻著社群的wiki文件,看到路由那一部分,看到自定義鍵名是我以前從來沒注意到的,然後我就立馬坐起來開虛擬機器了。
因為我還惦記著很早之前在社群就發過的一個問答帖子 路由繫結兩個引數,有更好的寫法麼?
當時我的需求很簡單,就是想讓文章的連結顯示成 domain/{category_slug}/{post_id} 這種形式,即文章分類別名/文章id,自己用的WordPress部落格也是這種固定連結,只能說習慣了吧。
當時,我自己的寫法是
//路由
Route::get('{category}/{post}','PostsController@show')->name('post.show');
//控制器
public function show($categorySlug,$postId)
{
$post = Post::find($postId);
if(! empty($post) && $categorySlug == $post->category->slug){
return view('post.show',compact('post'));
}else{
return '404';
}
}
雖然這程式碼看起來一點都沒利用到laravel的特性,但也算基本實現了我的需求。然而今天就不一樣了,今天我讀文件發現了一個用法,可以解決我這個需求,而且看起來也比之前的方法簡潔一些。
自定義鍵名,自然是要用在Category模型上,因為我的需求是用Category的slug,而不是id。
public function getRouteKeyName()
{
return 'slug';
}
路由的寫法,可以放心寫上{category}而不用擔心被認為是category_id了
//路由
Route::get('{category}/{post}','PostsController@show')->name('post.show');
//控制器
public function show(Category $category,Post $post)
{
return view('posts.show', compact('category','post'));
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結