如果他们提取的数据不存在,我有一条路线需要重定向到另一个页面。路线是:
Route::get('{link}/{data}', 'LinkController@getLink');
{link}
和{data}
与模型绑定的位置:
Route::model('link', 'Link');
Route::model('data', 'Data');
按原样,当此链接的数据不存在时,404,如果确实存在,则按原样将其带到页面。我想要做的是重定向到另一个页面,否则链接将404.我已经找到了关于如何全局执行此操作的建议,但我只希望它发生在这一条路线上。
有什么想法吗?
答案 0 :(得分:4)
// Link Controller
public function getLink($linkId, $dataId)
{
if ( is_null($link) or is_null($data) ) {
return Redirect::to('some/path');
}
}
如果任何传递的模型在遇到控制器方法时为null,则只需重定向它们。至于您所指的但未显示代码的/{link}
路线,请在您处理的任何封闭/控制器中执行类似操作。
答案 1 :(得分:2)
摆脱模型绑定 - 你已经离开了千篇一律的领域。
Route::get('{link}/{data?}', 'LinkController@getLink');
// note I made the data ^ parameter optional
// not sure if you want to use it like this but it's worth pointing out
在控制器中进行所有模型检查,如下所示:
public function getLink($linkId, $dataId)
{
$link = Link::find($linkId);
$data = Data::find($dataId);
if(is_null($link)){
throw new NotFoundHttpException;// 404
}
elseif(is_null($data)){
return Redirect::to('some/view');// redirect
}
// You could also check for both not found and handle that case differently as well.
}
很难从您的评论中确切地知道您希望如何处理丢失的链接和/或数据记录,但我确信您可以在逻辑上解决这个问题。这个答案的要点是你不需要使用Laravel的模型绑定,因为你可以自己做:找到其他重定向的记录或404。