这是我的路线:
Route::get('location/{id}/{title?}', array('as' => 'scouting_single', 'uses' => 'ScoutingController@get_single'));
课程很简单:
public function get_single($id, $title ='') {
$location = new Location;
if(is_numeric($id)) {
$location = $location->find($id);
if(isset($location)) {
$author = User::find($location->author);
$meta = $location->find($id)->metakeywords;
if($title == '') {
$slug = Str::slug($location->title);
return Redirect::to('location/'.$id.'/'.$slug);
}
return View::make('scoutingviews.view')->with('pagetitle', 'Location view')
->with('location', Location::find($id))
->with('author', $author)
->with('meta', $meta);
} else {
return Redirect::to('/')->with('message', 'That record is not available');
}
} else {
return Redirect::to('404');
}
}
一切似乎工作得很好但是在搜索之后似乎其他人正在做不同的事情,比如将slug保存到db,但我只想将id包含在url中......并使其成为可选项以包含标题slug 。如果用户移除了slug,它将使用slug重定向用户。
我还在学习laravel所以请原谅关于seo-friendlyliness的新手问题,我只是不希望/ {id} /和/ {id} / {title}算作重复
答案 0 :(得分:0)
如果您担心SEO,那么在数据库中使用URL slug是可行的方法。在URL中使用ID对搜索引擎或用户没有多大帮助。这也应该简化您的代码。除此之外,您还应该查看可以将用户附加到位置的Eloquent relationships。而不是
$author = User::find($location->author);
你可以
$author = $location->author;
关系将是用户hasMany
位置和位置belongsTo
用户。这也假设用户可以拥有多个位置。