在Laravel 4中我可以说我有这两条路线。第一条路线在数据库中查找slug,如果找不到slug,则转到其他路线。这是可能的,我将如何使其发挥作用?
Route::get('{slug}', 'SlugController@getBySlug');
Route::get('/about', 'AboutController@index');
答案 0 :(得分:1)
在您的控制器中,在检查对象是否存在后,如果需要,请将重定向返回到第二条路径。
class SlugController extends BaseController {
public function getBySlug($slug) {
$obj = getObjectBySlug($slug);
if (!obj) {
return Redirect::to("/about");
}
}
}
答案 1 :(得分:1)
如果您只想使用静态about
页面,则需要更改路线的顺序:
Route::get('/about', 'AboutController@index');
Route::get('{slug}', 'SlugController@getBySlug');
现在,如果网址为about
,则会转到AboutController
,否则会转到SlugController
答案 2 :(得分:0)
您可以离开路线获取网址上的内容,而不是检查是否存在。
如果slug存在,那么只需调用SlugController@getBySlug
如果slug不存在并且它被设置为" about"以外的任何东西,那么我们将重定向到相同的路由,并设置为slug参数,所以下次没有找到记录你的数据库与slug有关,虽然路线上的slu is是关于。
希望这是有道理的。
Route::get('{slug}', function($slug){
//Check if slug exists, if yes than do
$slug_exists = true;
if($slug_exists){
return Controller::call("SlugController@getBySlug");
}else if(!$slug_exists && $slug == 'about'){
return Controller::call("AboutController@index");
}else{
return Redirect::to("/about");
}
});