当 Route::fallback 存在时检查路由是不是存在

Posted

技术标签:

【中文标题】当 Route::fallback 存在时检查路由是不是存在【英文标题】:Check if route exists when Route::fallback present当 Route::fallback 存在时检查路由是否存在 【发布时间】:2021-09-24 11:18:35 【问题描述】:

我正在尝试确定在 Laravel 的 Route::fallback 内是否存在给定路线。下面的 sn-p 应该抛出一个NotFoundHttpException 异常,但是我怀疑这不是由于存在回退(即,路由确实作为回退存在)。

Route::fallback(function () use ($routes) 
    try 
        $next = Request::create('does-not-exist');
        Route::getRoutes()->match($next);
     catch (NotFoundHttpException) 
        // Should end up here
    
);

对于某些情况:我希望能够点击一条确实存在的路线,然后显示另一条路线的内容。第二条路线可能最终实际上并不存在,我希望能够抓住它。

TIA

【问题讨论】:

可以在App\Exceptions处理404异常 我知道这一点,但用户提出的请求将是合法路线,然后显示来自另一条路线的内容。没有机会处理 404 异常。 【参考方案1】:

Route::getRoutes()->match($next); 的结果将是一个Illuminate\Routing\Route 对象。您可以检查此对象以获取 isFallback property 的值。

Route::fallback(function () use ($routes) 
    $next = Request::create('does-not-exist');
    $route = Route::getRoutes()->match($next);
    if ($route->isFallback) 
        // do your thing
    
);

【讨论】:

以上是关于当 Route::fallback 存在时检查路由是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

总结:当静态路由和BGP同时存在时路由优选BGP的两种方法

Laravel 检查给定 url 的路由是不是存在于路由中

Laravel 4,检查数据库中是不是存在路由参数

如何检查路由“URL”是否存在?

当 NFS 挂载失败时,bash 检查目录是不是存在挂起

Mailgun 路由器过滤器检查附件是不是存在