[英]How to add slug and ID URL to Laravel 4 Route?
我想在我的Laravbel項目中添加漂亮的Slug
URL。 我目前正在使用身份證號碼。
我的目標是繼續使用數字,但也使用Slugs更好的SEO URL。 因此,Slug或ID都會加載正確的頁面。
下面是我當前使用ID號加載記錄的Route
。
// View Campaign Details/Profile/Map View
Route::any("/campaign/{id}", array(
"as" => "campaign/{id}",
"uses" => "CampaignController@getCampaignMap"
));
為了能夠在Laravel 4中添加Slug支持。我相信我需要在我的campaign表中添加一個slug數據庫列。
我如何編輯我的路線以使用slug字符串的ID號碼?
此外,因為我只想在我的應用程序的幾個部分使用slug,我將如何為此執行my.htaccess,或者甚至需要一個.htaccess?
我不會將兩個參數傳遞給您的函數,只是在兩種情況下都將其視為ID。 如果你還沒有,你需要在數據庫中添加一個“slug”列,並確保這些值與id一樣唯一。 然后在您的控制器中,您可以執行以下操作:
public function getCampaignMap($id){
//look for the campaign by id first
$campaignmap = Campaign::find($id);
//if none is found try to find it by slug instead
if(!$campaignmap){
$campaignmap = Campaign::where('slug','=',$id)->firstOrFail();
}
return View::make('campaignmap.show', compact('campaignmap'));
}
在某些情況下,您還可以通過檢查id是否為數字來保存自己的查詢,如果它不是數字,則只需通過slug查找它,例如:
public function getCampaignMap($id){
//look for the campaign by id if it's numeric and by slug if not
if(is_numeric($id)){
$campaignmap = Campaign::find($id);
}else{
$campaignmap = Campaign::where('slug','=',$id)->firstOrFail();
}
return View::make('campaignmap.show', compact('campaignmap'));
}
已經有一個流行的軟件包來處理slug及其可能的問題: https : //github.com/cviebrock/eloquent-sluggable
它可以處理為以前使用的slugs添加id后綴的唯一性,檢測是否要覆蓋軟刪除的slugs以及其他一些海關配置。
考慮使用RESTful控制器,這將根據控制器和函數名稱生成一個url:
Route::controller('users', 'UserController');
此外,我很確定資源控制器做同樣的事情,雖然我還沒有使用它們:
Route::resource('photo', 'PhotoController');
如果您仍希望定義路線,我會在您的數據庫中添加一個slug列,然后您的路線將是:
// View Campaign Details/Profile/Map View
Route::any("/campaign/{slug}", array(
"as" => "campaign",
"uses" => "CampaignController@getCampaignMap"
));
請記住,slug必須是獨一無二的。
在你的控制器中:
public function getCampaignMap($slug)
{
$campaignmap = YourModel::where('slug', '=', $slug)->get();
}
如果你願意,你仍然可以傳遞id:
// View Campaign Details/Profile/Map View
Route::any("/campaign/{slug}/{id}", array(
"as" => "campaign",
"uses" => "CampaignController@getCampaignMap"
));
然后,在你的控制器中:
public function getCampaignMap($slug, $id)
{
$campaignmap = YourModel::find($id);
}
希望有所幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.