Php 如果特定路由没有';t与laravel 4共存
我有一条路线,如果他们提取的数据不存在,需要重定向到另一个页面。路线是:Php 如果特定路由没有';t与laravel 4共存,php,laravel,laravel-4,Php,Laravel,Laravel 4,我有一条路线,如果他们提取的数据不存在,需要重定向到另一个页面。路线是: Route::get('{link}/{data}', 'LinkController@getLink'); 其中,{link}和{data}与模型绑定: Route::model('link', 'Link'); Route::model('data', 'Data'); 就像现在一样,当这个链接的数据不存在时,它是404的,如果它确实存在,它会被带到页面上。我想做的是重定向到另一个页面,如果链接不是404。我已经找
Route::get('{link}/{data}', 'LinkController@getLink');
其中,{link}
和{data}
与模型绑定:
Route::model('link', 'Link');
Route::model('data', 'Data');
就像现在一样,当这个链接的数据不存在时,它是404的,如果它确实存在,它会被带到页面上。我想做的是重定向到另一个页面,如果链接不是404。我已经找到了如何在全球范围内做到这一点的建议,但我只希望它发生在这一条路线上
有什么想法吗
// Link Controller
public function getLink($linkId, $dataId)
{
if ( is_null($link) or is_null($data) ) {
return Redirect::to('some/path');
}
}
如果传递的任何一个模型在命中控制器方法时为null,只需重定向它们。对于您引用的
/{link}
路由,但不显示其代码,请在处理该路由的任何闭包/控制器中执行类似操作。摆脱模型绑定-您已经离开了cookie-cuter领域
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。那么问题出在哪里?当它不是404时,你可以在
getLink()
中重定向,不是吗?如果它真的到达了getLink
我如何捕捉404并重定向?忘了提到路由是模型绑定的。更新的问题。首先你要检查一些数据是否存在和正确,对吗?如果是,则渲染模板,否则抛出404?那么,不用404,只做一个重定向,我不检查任何东西,内置laravel魔法检查是否存在,如果找不到模型,则自动检查404。这适用于非模型绑定路由,但不适用于我正在使用的模型绑定路由(见更新的问题)。啊,我已经更新了我的答案。关闭解决方案在文档中。实际上,这很接近,但不是我所需要的。重定向本身不起作用,所以我尝试返回null,然后检查对象是否为null,然后重定向。如果数据
为空,则该方法效果良好,但如果链接
为空,或两者都为空,则效果不佳。基本上,我需要看看路由是否出于任何原因转到404,如果是的话,捕获它,然后重定向。有什么想法吗?愚蠢的问题:你为链接和数据模型路由设置了404闭包吗?在这一点上,我对Laravel magic了解不够,无法推荐一个完美的答案。根据我的经验,如果你尝试做的不是很标准,那么像引导、搭建脚手架、绑定等工作可能比它们的价值更大。我会去掉你的模型绑定,只需将id传递给你的控制器,然后将对象/模型放到那里。不是jack@Jakobud的答案,但我无法合理地将整个解决方案放入他的评论中。这基本上就是我最终要做的,但是我没有做一个可选的参数,而是在链接
和数据
上做了一个查找,如果其中一个为空,则重定向。