我有Symfony应用程序,我使用FOSRestBundle和AngularJS。我的Symfony应用程序没有任何视图。
我想在AngularJS中用ngToast模块显示从服务器接收到的信息。
如果我创建或更新了一些东西,就很容易显示出来。但是如果服务器抛出异常呢?例如,角质客户端尝试获取具有错误ID的项,还是该用户没有权限执行此操作?在这种情况下,服务器将抛出异常,但我希望显示适当的消息。
symfony能否捕获此异常,例如将其转换为Response对象?例如,如果我没有,异常,则symfony应该捕获它并制作如下内容:
return new Response(400, "You don't have permission to acces this route");角将得到:
{
"code": 400,
"message": "You don't have permission to acces this route"
}有可能吗?我怎么发动汽车呢?也许我该换个方法。
发布于 2015-11-30 16:29:25
是的当然这是可能的。我建议您实现一个简单的异常侦听器。并使所有异常类扩展一个BaseException或实现一个BaseException,这样您就可以知道哪些异常来自“您的”代码。
class ExceptionListener
{
public function onKernelException(GetResponseForExceptionEvent $event)
{
// You get the exception object from the received event
$exception = $event->getException();
// Do your stuff to create the response, for example response status code can be exception code, and exception message can be in the body or serialized in json/xml.
$event->setResponse($response);
return;
}
}在容器中注册:
<service id="your_app.listener.exception" class="App\ExceptionListener">
<tag name="kernel.event_listener" event="kernel.exception" method="onKernelException" />
</service>发布于 2015-12-02 22:05:08
我建议采用更多的FOSRestBundle方法,即配置异常,以及是否应该显示消息:
fos_rest:
exception:
enabled: true
codes:
'Symfony\Component\Routing\Exception\ResourceNotFoundException': HTTP_FORBIDDEN
messages:
'Symfony\Component\Routing\Exception\ResourceNotFoundException': true假设您有一个针对特定操作的自定义AccessDeniedException,您可以创建异常并将其放入配置中。
<?php
class YouCantSummonUndeadsException extends \LogicException
{
}无论你扔到哪里:
<?php
throw new YouCantSummonUndeadsException('Denied!');您可以配置它:
codes:
'My\Custom\YouCantSummonUndeadsException': HTTP_FORBIDDEN
messages:
'My\Custom\YouCantSummonUndeadsException': true得到的结果如下:
{
"code": 403,
"message": "Denied!"
}我希望这能让事情更清楚!
https://stackoverflow.com/questions/34002530
复制相似问题