Я новичок в Symfony (используя версию 2.2) и пытаюсь добавить пользовательский прослушиватель исключений. Я прочитал следующие ссылки, но не могу заставить его работать.
То, что я пытаюсь сделать, – создать пользовательский прослушиватель 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.'); }