2013-11-24 58 views
1

我想在將所有內容解析完成後,將內容注入Twig生成的內容。如何將內容注入Twig生成的內容?

現在,我使用這個代碼如下:

public function onResponse(KernelEvent $event) 
{ 
    // TODO: find a better way to inject 
    $event->getResponse()->setContent(
     $this->asseticProcessor->inject($event->getResponse()->getContent())); 

} 

public static function getSubscribedEvents() 
{ 
    return array(
     KernelEvents::RESPONSE => array('onResponse', -9999), 
    ); 
} 

不過,我覺得這可能不是這樣做的最佳方式。首先,至少我希望只在Twig HTML模板被渲染時進行注入(在某些情況下,控制器可以簡單地返回響應而不渲染任何內容,或者它們可以渲染json,而在這種情況下,我沒有來操縱內容)

+1

你能否在你的問題中增加一些細節?你究竟想達到什麼目的? 「將內容注入樹枝」意味着什麼? – nifr

+0

hi nifr,我需要修改請求響應的最終內容(在通過各種分支函數,過濾器進行所有解析等之後)。所以我需要捕獲最終的響應字符串,並在響應對象返回之前對其進行修改。 – mr1031011

回答

0

這裏晚了,但你可以使用一個內核事件監聽器。例如:

services: 
    response_modifier: 
     class: Some\Bundle\Listener\ModifyResponseListener 
     tags: 
      - { name: kernel.event_listener, event: kernel.response, method: onKernelResponse, priority: -127 } 

將優先級設置得非常低,以便它響應響應鏈。偵聽可能的工作,像這樣:

class ModifyResponseListener 
{ 
    public function onKernelResponse(FilterResponseEvent $event) 
    { 
     // We probably want to ignore sub-requests 
     if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) { 
      return; 
     } 

     $content = $response->getContent(); 
     $content = preg_replace('/foo/is', 'bar', $content); 
     $response->setContent($content); 
    } 
} 

以上將取代「富」的所有出現在最終輸出「欄」。

請注意,在修改內容之前,您可能還必須檢查響應不是重定向,ajax,流或其他任何內容。