【问题标题】:Autoload Laravel Exceptions自动加载 Laravel 异常
【发布时间】:2016-06-03 19:18:23
【问题描述】:

我正在使用 Eloquent 模型,当我们使用 findOrFail() 方法时,它会抛出 ModelNotFound 异常。

我有一个针对这个异常的全局处理程序,在文件 global.php 中设置。

但我想向用户显示适当的消息,所以我必须在本地处理这些异常,使用try/catch

“问题”是我不想一直导入文件,或者像这样使用完整的命名空间:

try {
    Model::findOrFail();
} catch(Illuminate\Database\Eloquent\ModelNotFoundException $e) {
    //do something here
}

没有办法自动加载这个文件吗?

【问题讨论】:

  • “适当的消息”到底是什么意思?像每个用户还是每个“模型”?有一种方法可以对这个异常进行通用处理。
  • @Kyslik 每个模型。例如,我在“Entries”控制器中有“Product”模型,并且在此控制器中使用“Product”findOrFail() 方法。因此,我想显示一条有关错误的消息,但与此“条目”功能相关。

标签: php laravel exception eloquent


【解决方案1】:

我刚刚对此进行了测试,它似乎工作正常。我所做的是将以下内容添加到config/app.php 中的aliases 数组中。

'ModelNotFoundException' => Illuminate\Database\Eloquent\ModelNotFoundException::class,

现在您应该能够通过执行以下操作来捕获该异常...

try {
    throw new \ModelNotFoundException('Some Message');
} catch (\ModelNotFoundException $e) {
    echo $e->getMessage();  // Should echo "Some Message"
}

【讨论】:

  • 不行!!似乎全局处理程序覆盖了本地处理程序。当我抛出异常时,正如您在示例中所做的那样,异常被try/catch 捕获。但是,当我们等待findOrFail 方法抛出的异常时,它不起作用。
【解决方案2】:

我想我理解了这个问题;如果您只想自动加载 global.php 文件,您可以简单地将其添加到您的 composer.json 文件中,例如:

"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\\": "app/"
    },
    "files": [
        "app/Http/global.php" // <-- Or wherever your file lives
    ]

然后只需执行composer dump auto-load -o 或类似命令,现在您就可以在应用程序的任何位置访问此文件/文件中的所有函数。

【讨论】:

  • 不!我明白你的意思,但我想自动加载包含异常的文件,ModelNotFoundException.php 文件
  • @VictorLeal 好的,我明白了。似乎user3158900的答案更合适。
猜你喜欢
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
  • 2014-02-11
  • 2014-02-14
  • 1970-01-01
  • 2015-04-23
相关资源
最近更新 更多