Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果特定路由没有';t与laravel 4共存_Php_Laravel_Laravel 4 - Fatal编程技术网

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的答案,但我无法合理地将整个解决方案放入他的评论中。这基本上就是我最终要做的,但是我没有做一个可选的参数,而是在
链接
数据
上做了一个查找,如果其中一个为空,则重定向。