当前位置: 首页 > 知识库问答 >
问题:

阻止laravel在异常中包含跟踪

邹桐
2023-03-14

我有自己的异常扩展,当调用时,我希望它向浏览器输出一条消息。但是,当我抛出这个异常时,抓住它并输出消息,但消息是一个跟踪。

这是我的全球。php:

class ApiException extends Exception {}
App::error(function(ApiException $ex){
    dd($ex->getMessage());  
});

我的代码片段:

try {
    if (!Input::get('password')) {
        throw new Exception('Password not set');
    }
    if (User::all()->count()) {
        throw new Exception('User already exists');
    }
    Artisan::call('db:seed', [
        '--class' => 'VerifyUserSeeder'
    ]);
    $User = \Toddish\Verify\Models\User::find(1);
    $User->password = Input::get('password');
    $User->save();
} catch (Exception $ex) {
    throw new ApiException($ex);
}

输出到浏览器:

异常'异常'消息'密码未设置'在 /Users/kevin/Documents/Web/app/controllers/Settings/SetupController.php: 8堆栈跟踪:#0[内部功能]: SetupControlller-

共有2个答案

洪河
2023-03-14

在按照Fabio的提问和建议重新安排了try-catch的嵌套并直接抛出ApiException之后,这就解决了问题。我的代码如下:

if (!Input::get('password')) {
    throw new ApiException('Password not set');
}
if (User::all()->count()) {
    throw new ApiException('User already exists');
}
try {
    Artisan::call('db:seed', [
        '--class' => 'VerifyUserSeeder'
    ]);
    $User = \Toddish\Verify\Models\User::find(1);
    $User->password = Input::get('password');
    $User->save();
} catch (Exception $ex) {
    throw new ApiException($ex);
}
戚俊人
2023-03-14

您能解释一下为什么要抛出一般异常,捕获它们,然后再次抛出新异常吗?

你为什么不直接抛出一个ApiException?

if (!Input::get('password')) {
    throw new ApiException('Password not set');
}
if (User::all()->count()) {
    throw new ApiException('User already exists');
}
Artisan::call('db:seed', [
    '--class' => 'VerifyUserSeeder'
]);
$User = \Toddish\Verify\Models\User::find(1);
$User->password = Input::get('password');
$User->save();
 类似资料:
  • 附言。我知道我可以将放入catch子句中,但我希望记录每个捕获和未捕获的异常。我正在测试,所以有很多不应该捕捉的异常,只是抛出。我需要configuration、property或与log4j相关的任何其他语句,这些语句将所有异常流式传输到其appender中。 P.S.S.我知道我可以将stderr输出重定向到文件,但我不想接触控制台。

  • 我正在用以下代码在我的项目中异步加载facebook js sdk: 自从firefox跟踪保护之后,这对我来说工作得很好。我注意到在Firefox42.0中,跟踪保护阻止了facebook js SDK的异步加载。 null 谁有办法解决这个问题吗? 非常感谢!

  • 如果一个函数不能抛出异常,或者一个程序并没有接获某个函数所抛出的异常并进行处理,那么这个函数可以用新的noexcept关键字对其进行修饰,表示这个函数不会抛出异常或者抛出的异常不会被接获并处理。例如: extern "C" double sqrt(double) noexcept; // 永远不会抛出异常 vector my_computation(const vector& v) noe

  • 问题内容: 这是我的代码: 我不明白为什么哈希集包含方法没有调用我的equals方法,如其规范中所述: 更正式地说,如果此集合中不包含任何元素e,则将指定元素o添加到该集合中,使得(o == null?e == null:o.equals(e)) 我的代码返回了false,并且没有进入我的equals方法。 非常感谢您的回答! 问题答案: 覆盖时,还必须覆盖。否则,相等的对象将具有不同的哈希码,并

  • 问题内容: 发生异常后,我可以返回执行try块吗?(目标是写得更少)例如: 与 问题答案: 不,你不能那样做。这就是Python具有其语法的方式。一旦由于异常而退出try块,就无法返回。 那for循环呢? 但是请注意,裸露裸露是不明智的做法。您应该改为捕获特定的异常。我之所以这么做,是因为在不知道方法可能会抛出什么异常的情况下,这是我所能做的。

  • 异常对象的 printStackTrace() 方法用于打印异常的跟踪栈信息,根据 printStackTrace() 方法的输出结果,开发者可以找到异常的源头,并跟踪到异常一路触发的过程。 看下面用于测试 printStackTrace 的例子程序。 上面程序中 main 方法调用 firstMethod,firstMethod 调用 secondMethod,secondMethod 调用 t