2013-07-08 94 views
1

我試圖創建我自己的發生器,使用SensioGeneratorBundle作爲核心。但是自定義Twig擴展加載存在問題。 如果我使用renderFile不加載自定義的樹枝擴展

return $this->container->get('templating')->renderResponse('Acme:Generator/Work:edit.html.twig', array());

擴展工作,但如果我用

return $this->renderFile('edit.html.twig', array('entity' => $entity)); 

其中

protected function renderFile($template, $parameters) 
{ 
    $twig = new \Twig_Environment(new \Twig_Loader_Filesystem($this->skeletonDirs), array(
     'debug'   => true, 
     'autoReload'  => true, 
     'cache'   => false, 
     'strict_variables' => true, 
     'autoescape'  => true, 
    )); 

    return $twig->render($template, $parameters); 
} 

只有核心枝條擴展被裝載。我得到一個錯誤

過濾器「價格」不edit.html.twig第9行

任何想法存在嗎?

回答

2

SensioGeneratorBundle創建它在你給renderFile()方法自己嫩枝實例,它沒有任何共同之處加載到的Symfony的服務容器,正在使用通過調用$this->container->get('templating')->renderResponse()嫩枝實例。

而你不能在服務容器中使用Twig實例,因爲它有一些行爲可能會破壞Sensio的骨架渲染。因此,在renderFile()方法中特意創建了新的Twig Environment實例。

您需要手動添加過濾器,新創建的枝條環境實例在renderFile()方法,就這麼簡單:

$twig->addFilter($filter); 

關於嫩枝過濾器: http://twig.sensiolabs.org/doc/advanced.html#filters