【问题标题】:Laravel - check if route exists not throwing exception if not foundLaravel - 检查路由是否存在如果找不到则不抛出异常
【发布时间】:2021-06-13 18:52:04
【问题描述】:

我正在尝试添加将旧 URL 重定向到新 URL 的逻辑,方法是向旧 URL 添加前缀并检查它是否存在于 urls 集合中,如果存在则重定向。所以我们的想法是我们有旧的 url,现在已经以字符串为前缀,但有些已经发送给用户,所以我们希望通过尝试重新创建 url 并添加前缀然后检查它是否存在来保持这些工作正常.下面是sn-p用来创建路由的代码,如果找到就匹配:

$route = \Route::getRoutes()->match(\Request::create($urlWithNewPrefix));

这个想法是,如果这个想法是这个代码应该抛出一个 NotFoundHttpException 异常,但似乎它仍然返回一个带有 uri {fallbackPlaceholder} 的路由。

因此,当前的 hack 是检查 uri 是否为 {fallbackPlaceholder},但更简洁的方法是捕获异常。

知道为什么没有抛出异常吗?

【问题讨论】:

  • 你能告诉我们你实现这个的代码吗?我看不到{fallbackPlaceholder}NotFoundHttpException 被扔到哪里了

标签: php laravel symfony redirect


【解决方案1】:

我猜你有类似的后备路由器

Route::Fallback(function () {
    dd('This is fallback function.');
});

所以如果 url 不存在就返回后备路由。
尝试使用这样的东西:

$route = \Route::getRoutes()->match(\Request::create($urlWithNewPrefix));
if ($route && !$route->isFallback){
  return redirect($route->uri());
}else{
  return abort(404); //or something else
}

*如果这不能回答您的问题,请告诉我们更多详细信息

【讨论】:

  • 第二个块可以放在Route::fallback 内吗?我相信我的匹配失败(或成功取决于您的前景),因为不存在的路由被后备捕获。
猜你喜欢
  • 2019-06-06
  • 2010-12-04
  • 2016-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
相关资源
最近更新 更多