9

我是 Symfony 的新手(使用 2.2 版)并尝试添加自定义异常侦听器。我已阅读以下链接,但无法使其正常工作。

我要做的是创建一个自定义错误异常侦听器并从我的控制器和服务中使用它,

throw new jsonErrorException('invalid_params');

像这样显示 json twig 模板。(我正在为我的原生智能手机应用程序开发一个后台程序)

{"status": "error", "message": "invalid_params"}

我已将我的 CustomEventListener 注册到我的 src/My/Bundle/Resources/config/services.yml 并创建了一个自定义异常类,如以下链接所示(Overriding Symfony 2 exceptions?)但我收到错误

symfony exceptions must be valid objects derived from the exception base class

我在这里做错了吗?谢谢。

4

4 回答 4

26

您可以使用“symfony 方式”创建自定义异常,让我们看看异常是如何在 symfony 中创建的:

首先创建您的 customExceptionInterface

namespace My\SymfonyBundle\Exception;
/**
 * Interface for my bundle exceptions.
 */
interface MySymfonyBundleExceptionInterface
{
}

并创建您的jsonErrorException

namespace My\SymfonyBundle\Exception;

class HttpException extends \Exception implements MySymfonyBundleExceptionInterface
{
}

不要犹豫,在 github 上浏览symfony 的异常代码示例

于 2013-04-19T08:38:12.190 回答
6

我最近以下列方式在我的 Symfony2 服务中实现了一个自定义异常:

MemberAlreadyExistsException.php

<?php

namespace Aalaap\MyAppBundle\Services\Membership;

class MemberAlreadyExistsException extends \Exception
{

}

Subscriber.php

<?php

namespace Aalaap\MyAppBundle\Services\Membership;
...
throw new MemberAlreadyExistsException(
    'The member you are trying to subscribe already'
    . ' exists in this list.'
);
...
于 2016-07-05T07:40:17.157 回答
0

您必须扩展 Exception 类,或者至少扩展 Symfony 的内部异常类

于 2013-04-19T07:59:36.753 回答
0

我只需要添加\并且全局范围在 Symfony 服务中工作

namespace App\CoreBundle\Service;

class CurrencyExchange
{
    const RATES_XML = 'https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml?849b4b329863b2d60bfd0de486e423c9';

    const RATES_XML_PATH = 'uploads/ecb_currencies.xml';

    /** @var array $rates */
    private $rates;

    public function __construct()
    {
        if (!is_file(self::RATES_XML_PATH)) {
            throw new \Exception('XML '.self::RATES_XML_PATH.' does not exists.');
        }

        if (1 > filesize(self::RATES_XML_PATH)) {
            throw new \Exception('XML '.self::RATES_XML_PATH.' is empty.');
        }
于 2017-05-17T07:19:19.233 回答