Как добавить настраиваемое исключение в symfony2

Я новичок в Symfony (используя версию 2.2) и пытаюсь добавить пользовательский прослушиватель исключений. Я прочитал следующие ссылки, но не могу заставить его работать.

  • Переопределение исключений Symfony 2?
  • Symfony2 Custom Exception Listener – просмотр шаблонов или переход к контроллеру

То, что я пытаюсь сделать, – создать пользовательский прослушиватель Exception Exception и использовать его из моих контроллеров и служб, подобных этому,

throw new jsonErrorException('invalid_params'); 

для отображения такого шаблона json twig (я разрабатываю фоновую программу для своих родных приложений для смартфонов)

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

Я зарегистрировал свой CustomEventListener в своем src / My / Bundle / Resources / config / services.yml и создал собственный класс исключений, как показано в следующей ссылке ( Переопределение исключений Symfony 2? ), Но я получаю ошибку

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

Я здесь что-то не так? Благодарю.

Вы можете создать настраиваемое исключение «способ 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 { } 

Не стесняйтесь просматривать примеры кода исключения Symfony на github

Недавно я реализовал пользовательское исключение в своей службе 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.' ); ... 

Вы должны расширить класс Exception или, по крайней мере, внутренний класс исключения Symfony

Мне просто нужно было добавить \ а глобальная область работала в службе 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.'); }