Php 如何将slug和ID URL添加到Laravel 4路由?

Php 如何将slug和ID URL添加到Laravel 4路由?,php,.htaccess,laravel-4,Php,.htaccess,Laravel 4,我想将niceSlugURL添加到我的Laravbel项目中。我目前正在使用身份证号码 我的目标是继续使用数字,但也要使用slug来获得更好的搜索引擎优化URL。因此,Slug或ID将加载正确的页面 下面是我当前的路线,它使用ID号加载记录 // View Campaign Details/Profile/Map View Route::any("/campaign/{id}", array( "as" => "campaign/{id}", "uses" =>

我想将nice
Slug
URL添加到我的Laravbel项目中。我目前正在使用身份证号码

我的目标是继续使用数字,但也要使用slug来获得更好的搜索引擎优化URL。因此,Slug或ID将加载正确的页面

下面是我当前的
路线
,它使用ID号加载记录

// View Campaign Details/Profile/Map View
Route::any("/campaign/{id}", array(
    "as"   => "campaign/{id}",
    "uses" => "CampaignController@getCampaignMap"
));
能够在Laravel 4中添加段塞支撑。我认为我需要在我的活动表中添加一个slug数据库列

我将如何编辑我的路由以使用段塞字符串的ID号


另外,由于我只想在我的应用程序的几个部分上使用slug,我将如何为此执行.htaccess,或者甚至需要.htaccess?

考虑使用RESTful控制器,这将根据控制器和函数名生成url:

Route::controller('users', 'UserController');
此外,我非常肯定资源控制器也会做同样的事情,尽管我还没有使用它们:

Route::resource('photo', 'PhotoController');
如果您仍然希望定义路由,我会在DB中添加一个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();
}
public function getCampaignMap($slug, $id)
{
    $campaignmap = YourModel::find($id);
}
如果您愿意,您也可以将id传入:

// View Campaign Details/Profile/Map View
Route::any("/campaign/{slug}/{id}", array(
    "as"   => "campaign",
    "uses" => "CampaignController@getCampaignMap"
));
然后,在控制器中:

public function getCampaignMap($slug)
{
    $campaignmap = YourModel::where('slug', '=', $slug)->get();
}
public function getCampaignMap($slug, $id)
{
    $campaignmap = YourModel::find($id);
}

希望有帮助

已经有一个流行的软件包来处理slug及其可能的问题:


它可以处理唯一性,向以前使用的slug添加id后缀,检测是否要覆盖软删除的slug,以及其他一些自定义配置。

我不会向函数传递两个参数,只是在这两种情况下都将其视为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是否为数字来保存查询,如果不是数字,则只需通过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'));
}

为什么不只用鼻涕虫呢?