首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法捕获Laravel 4异常

无法捕获Laravel 4异常
EN

Stack Overflow用户
提问于 2014-10-29 16:14:59
回答 1查看 1.7K关注 0票数 0

我想在我的图书馆里抓到一个拉拉维尔异常。

代码语言:javascript
运行
复制
namespace Marsvin\Output\JoomlaZoo;

class Compiler
{

    protected function compileItem($itemId, $item)
    {
        $boom = explode('_', $itemId);
        $boom[0][0] = strtoupper($boom[0][0]);
        $className = __NAMESPACE__."\\Compiler\\".$boom[0];

        try {
            $class = new $className(); // <-- This is line 38
        } catch(\Symfony\Component\Debug\Exception\FatalErrorException $e) {
            throw new \Exception('I\'m not being thrown!');
        }
    }
}

这是我得到的例外:

代码语言:javascript
运行
复制
file: "C:\MAMP\htdocs\name\app\libraries\WebName\Output\JoomlaZoo\Compiler.php"
line: 38
message: "Class 'Marsvin\Output\JoomlaZoo\Compiler\Deas' not found"
type: "Symfony\Component\Debug\Exception\FatalErrorException"

这个班的名字是故意弄错的。

编辑1:

我注意到,如果在try语句中抛出异常,就可以捕获异常:

代码语言:javascript
运行
复制
try {
    throw new \Exception('I\'d like to be thrown!');
} catch(\Exception $e) {
    throw new \Exception('I\'m overriding the previous exception!'); // This is being thrown
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-30 01:48:57

问题是您试图在类中捕获一个FatalErrorException,但是Laravel不会让一个致命的错误返回到那里;它会立即终止。如果您试图捕获另一种异常,您的代码就会正常工作。

您可以在 method中捕获和处理app/start/global.php中的致命错误,但这无助于处理库中的异常,也无助于以任何特定的方式处理异常。一个更好的选择是触发一个“可捕捉的”异常(例如来自Illuminate的东西),或者根据您要检查的条件抛出一个自定义异常。

在您的例子中,如果您的目标是处理未定义的类,下面是我的建议:

代码语言:javascript
运行
复制
try {
    $className = 'BadClass';
    if (!class_exists($className)) {
        throw new \Exception('The class '.$className.' does not exist.');
    }
    // everything was A-OK...
    $class = new $className();
} catch( Exception $e) {
    // handle the error, and/or throw different exception
    throw new \Exception($e->getMessage());
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26635460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档