2014-02-22 46 views
5

我想好的Slug網址添加到我的Laravbel項目。我目前正在使用身份證號碼。如何將slug和ID URL添加到Laravel 4 Route?

我的目標是繼續使用數字,但也使用蛞蝓獲得更好的搜索引擎優化的URL。所以無論是Slug還是ID都會加載合適的頁面。

下面是使用一個ID號來加載記錄我目前Route

// View Campaign Details/Profile/Map View 
Route::any("/campaign/{id}", array(
    "as" => "campaign/{id}", 
    "uses" => "[email protected]" 
)); 

爲了能夠在Laravel 4中添加Slug支持。我相信我需要在我的廣告系列表中添加一個slug數據庫列。

我怎麼會去編輯我的路線與鼻涕蟲字符串的ID號工作?

此外,由於我只是想在我的應用程序的幾個部分使用塞,如何將我這個做my.htaccess,或an.htaccess甚至要求?

+0

爲什麼不只是只使用slu?? – egig

回答

2

考慮使用REST風格的控制器,這將基於控制器和功能名稱的網址:

Route::controller('users', 'UserController'); 

而且,我敢肯定,資源控制器做同樣的事情,雖然我沒有用他們尚未:

Route::resource('photo', 'PhotoController'); 

如果你仍然想定義自己的路線,我會一塞列添加到您的數據庫,然後你的路線是:

// View Campaign Details/Profile/Map View 
Route::any("/campaign/{slug}", array(
    "as" => "campaign", 
    "uses" => "[email protected]" 
)); 

記住蛞蝓必須是唯一的。

在你的控制器:

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" => "[email protected]" 
)); 

然後,在你的控制器:

public function getCampaignMap($slug, $id) 
{ 
    $campaignmap = YourModel::find($id); 
} 

希望這有幫助!

6

我不會將兩個參數傳遞給你的函數,只是在兩種情況下都把它當作一個ID來對待。如果你還沒有添加一個「slug」列,你需要添加一個「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是數字,然後就尋找它的蛞蝓,如果它不是數字,例如保存自己在某些情況下,查詢作爲:

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')); 
} 
相關問題