我有一个类会抛出从基础Exception扩展的错误。
App的核心是Silex Micro-Framework - 但由于我在Laravel上比Symfony更流畅(尽管Laravel是从它衍生出来的)我倾向于使用一些来自照明的包(因此原因)为什么你会看到一些use Illuminate\
)
我想在发生错误时抛出异常,但我得到了集成的Whoops。我想要返回JSON。 (它不是完整的堆栈呐喊,而是Symfony \ component \ debug)
理想情况下array('status' => <code>, 'message_content');
问题是:a)我如何考虑使用看起来像whoops的调试的silex(默认情况下此服务处于启用状态)。 b)有没有办法使用我的类来扩展Exception,或者我需要创建一个适合我需要的全新Exception类而不是从头开始
namespace Api\Manager\Validation;
use Illuminate\Support\MessageBag;
class ValidationException extends \Exception {
/**
* @var MessageBag
*/
protected $errors;
/**
* @param string $message
* @param MessageBag $errors
*/
function __construct($message, MessageBag $errors)
{
$this->errors = $errors;
parent::__construct($message);
}
/**
* Get form validation errors
*
* @return MessageBag
*/
public function getErrors()
{
return $this->errors;
}
}
答案 0 :(得分:4)
我假设您正在使用WhoopsServiceProvider集成到Silex中 - 您应该在app.php或index_dev.php中包含以下内容。
$app->register(new WhoopsServiceProvider());
您可以看到此here的代码。
似乎对PrettyPageHandler进行了硬编码。
$app['whoops.error_page_handler'] = $app->share(function() {
return new PrettyPageHandler;
});
如果您将此提供程序分叉/复制到您自己的提供程序中,那么您应该能够将其替换为JsonRespondeHandler。
您还需要删除提供程序中的一些其他代码。例如whoops.silex_info_handler不适合你,因为它包含一些调用,如addDataTable(),我认为这些调用特定于PrettyPageHandler类。
$app['whoops'] = $app->share(function() use($app) {
$run = new Run;
$run->allowQuit(false);
$run->pushHandler($app['whoops.error_page_handler']);
$run->pushHandler($app['whoops.silex_info_handler']);
return $run;
});
如果没有实际测试上面的内容,我相信这应该意味着Whoops捕获的所有异常将以JSON呈现,因此您不会(并且不应该)创建单独的异常类来呈现JSON
<强>更新强>
实际上比这更直接。在&#34; $ app = new Silex \ Application();&#34;。
之后,将下面放在index_dev.php中。$app->error(function (\Exception $e, $code) use($app) {
return $app->json(array("error" => $e->getMessage()),$code);
});
然后异常将作为JSON输出。解决方案实际上来自另一个SO问题here。