php - Symfony2,FOSRestBundle - 捕获异常

标签 php angularjs symfony

我有 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/

相关文章:

javascript - 在 ng-repeat 生成的 <ul> 列表中使用 ng-model

javascript - 使用 javascript 或 JS 或 angularJS for Windows 8 创建用户控件

javascript - 将属性插入 Angular Controller 数组中的对象的最佳方法

php - 是否可以在 Doctrine 和 Symfony2 中找到使用多个值的列?

php - 我怎样才能得到客户端的IP地址?

php - 从当前时间戳默认获取日期时间

javascript - 我试图在输入字段中显示地理位置 javascript 函数的结果

php - 如何处理 WampServer : Class 'Composer\Autoload\ClassLoader' not found? 上的此错误

symfony - 使用 Symfony DI 容器的原则 2

php - 按 id ASC 从数据库顺序中选择最后 3 行