Symfony 如何将内容注入到细枝生成的内容?

Symfony 如何将内容注入到细枝生成的内容?,symfony,twig,Symfony,Twig,我想在解析和完成所有其他内容后,将内容注入到细枝生成的内容中 现在我正在使用下面的代码: public function onResponse(KernelEvent $event) { // TODO: find a better way to inject $event->getResponse()->setContent( $this->asseticProcessor->inject($event->getResponse()

我想在解析和完成所有其他内容后,将内容注入到细枝生成的内容中

现在我正在使用下面的代码:

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,在这种情况下,我不必在这里晚些时候操纵内容,但是您可以使用内核事件侦听器来实现这一点。例如:

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);
    }
}
以上内容将在最终输出中将所有出现的foo替换为bar


请注意,在修改内容之前,您可能还必须检查响应是否不是重定向、ajax、流或其他内容

请在你的问题中再补充一些细节好吗?你到底想达到什么目的?向twig注入内容是什么意思?嗨,nifr,我需要通过各种twig函数、过滤器等在所有解析之后修改请求响应的最终内容。因此,我需要捕获最后的响应字符串,并在返回响应对象之前对其进行修改。