對於Symfony 2.1項目,我試圖創建一個新的註解@Json(),它將註冊一個偵聽器,它將在我返回一個數組時自動創建JsonResponse對象。我有它的工作,但由於某種原因,聆聽者是總是調用,即使在沒有@Json註釋的方法上。我假設我的方法是有效的,因爲Sensio額外的bundle使用@Template註解來執行此操作。Symfony 2.1 - 自定義Json註釋監聽器
這是我的註釋代碼。
<?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 2013-02-21 02:51:58
@igorw顯然我一直都在糾正 - 我只是以爲我錯了,因爲我很困惑,我應該在聽衆中處理註釋,而不是相反。不過謝謝。 – 2013-02-21 18:25:12