在 laravel 7 路由中找不到句柄模块

Posted

技术标签:

【中文标题】在 laravel 7 路由中找不到句柄模块【英文标题】:Handle module not found in laravel 7 routing 【发布时间】:2021-10-14 06:53:15 【问题描述】:

假设我有一些

Route::get('/path/model', 'Controller@method');

mysite.com/path/1 没有模型#1 的情况下,我得到 404,这是 Laravel 的默认行为 我想为特定路由组/特定路由

处理(基本上,重定向到另一个命名路由)“NoModelFound”

由于该路由存在,Route::fallbackRoute::any 不会在此处触发。

我知道 Laravel 8 中有一个 Route()->missing 方法,但我有 Laravel 7 并且无法更新。 另外,我以最好的方式搜索路线内的解决方案(web.php

有什么解决办法吗?提前谢谢

【问题讨论】:

【参考方案1】:

您可以在App\Exceptions\Handler 类中全局处理异常。如果你真的和我的意思是真的想具体处理 ModelNotFoundException 仅针对某些路线,那么你可以做一些类似的事情

  // Exception Handle class
  public function render($request, Exception $exception)
    
       
        if(
            $request->is('*path/') &&  // or string match
            $exception instanceof ModelNotFoundException
        )
            redirect()->to('where-ever');
        
    

如果您只想在ModelNotFoundException 发生时重定向用户,那么您可以这样做,

  // Exception Handle class
  public function render($request, Exception $exception)
    
       
        if(
            
            $exception instanceof ModelNotFoundException
        )
            redirect()->to('where-ever');
        
    
    

另一种方法是使用中间件并检查某个模型,如果它不存在,则重定向用户。取决于你想要做什么。你可以在这里找到更多信息

https://laravel.com/docs/8.x/middleware https://laravel.com/docs/8.x/errors#the-exception-handler

【讨论】:

以上是关于在 laravel 7 路由中找不到句柄模块的主要内容,如果未能解决你的问题,请参考以下文章

PHPUnit 3.7 在 Laravel 4.1 中找不到控制器类

在 laravel 5 中找不到类控制器

在 laravel-echo-server 中找不到模块“node-v46-linux-x64/node_sqlite3.node”错误

在 Angular 7 中找不到模块“./auth.service”

在可使用 PHP 版本 5.6.30 安装的版本中找不到版本 6 的包 laravel/laravel

Laravel 4在TestCase中找不到测试