我有 Symfony 应用程序,我将 FOSRestBundle 与 AngularJS 一起使用。我的 Symfony 应用程序没有任何 View 。
我想使用 ngToast 模块在 AngularJS 消息中显示有关从服务器接收到的信息。
如果我创建或更新它,它很容易展示。但是如果服务器抛出一些异常?例如,Angular 客户端试图获取 ID 错误的项目,或者该用户无权执行此操作?在这种情况下,服务器会抛出异常,但我想显示适当的消息。
symfony 能否捕获此异常并将其转换为 Response 对象? 例如 - 如果我有无访问权限异常,symfony 应该捕获它并做出类似这样的事情:
return new Response(400, "You don't have permission to acces this route");
Angular 将获得:
{
"code": 400,
"message": "You don't have permission to acces this route"
}
这可能吗?我应该怎么做?也许我应该用其他方式来做。
最佳答案
我建议采用更多的 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!"
}
我希望这能让它更清楚!
关于php - Symfony2,FOSRestBundle - 捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34002530/