我是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
我在这里做错了吗?感谢。
答案 0 :(得分:24)
您可以创建自定义异常“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's exceptions代码示例
答案 1 :(得分:4)
我最近以下列方式在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.'
);
...
答案 2 :(得分:0)
您必须扩展Exception类,或者至少扩展Symfony的内部异常类
答案 3 :(得分: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.');
}