簡體   English   中英

如何向Laravel 4 Route添加slug和ID URL?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM