Symfony 2.1 프로젝트의 경우 배열을 반환 할 때 자동으로 JsonResponse 객체를 만들 청취자를 등록하는 새 주석 @Json()을 작성하려고합니다. 작동 시키려고했는데 어떤 이유로 청취자가 인데 항상이라는 @Json 주석이없는 메소드에서도 호출됩니다. Sensio 엑스트라 번들이 @Template 주석으로이 작업을 수행하기 때문에 내 접근 방식이 작동한다고 가정합니다.Symfony 2.1 - 사용자 정의 Json Annotation Listener
내 주석 코드는 다음과 같습니다.
<?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
@igorw 분명히 나는 모든 것을 따라 잡았습니다. 나는 청취자의 주석을 처리해야한다는 혼란 스러움을 가지고 있었기 때문에 나는 틀렸다고 가정했습니다. 그래도 고마워. –