【发布时间】:2013-02-06 02:11:58
【问题描述】:
对于 Symfony 2.1 项目,我正在尝试创建一个新注释 @Json(),它将注册一个侦听器,该侦听器将在我返回一个数组时自动创建 JsonResponse 对象。我已经让它工作了,但由于某种原因,即使在没有 @Json 注释的方法上,也总是调用了侦听器。我假设我的方法有效,因为 Sensio 额外捆绑包使用 @Template 注释执行此操作。
这是我的注释代码。
<?php
namespace Company\Bundle\Annotations;
/**
* @Annotation
*/
class Json extends \Sensio\Bundle\FrameworkExtraBundle\Configuration\ConfigurationAnnotation
{
public function getAliasName()
{
return 'json';
}
}
这是我的监听器代码。
<?php
namespace Company\Bundle\Listener\Response\Json;
class JsonListener
{
//..
public function onKernelView(GetResponseForControllerResultEvent $event)
{
$request = $event->getRequest();
$data = $event->getControllerResult();
if(is_array($data) || is_object($data)) {
if ($request->attributes->get('_json')) {
$event->setResponse(new JsonResponse($data));
}
}
}
}
这是我对监听器的 yaml 定义。
json.listener:
class: Company\Bundle\Listener\Response\Json
arguments: [@service_container]
tags:
- { name: kernel.event_listener, event: kernel.view, method: onKernelView }
我显然在这里遗漏了一些东西,因为它被注册为 kernel.view 监听器。如何更改它以便仅在控制器操作上存在 @Json() 注释时调用它?
【问题讨论】:
-
这对我来说似乎是正确的,尝试找出
_json属性的设置位置。 -
@igorw 显然我一直都正确 - 我只是认为我错了,因为我很困惑我应该在侦听器中处理注释,而不是相反。不过还是谢谢。
标签: php symfony symfony-2.1