2012-04-26 33 views
3

在Silex應用程序中使用Symfony和Twig。如何在使用Symfony Forms,Twig和SymfonyTwigBridge時覆蓋默認模板?

我有一個註冊頁面的形式:

{% extends "base.twig" %} 

{% block title %}Welcome to My Example site{% endblock %} 
{% block head %} 
{{ parent() }} 
{% endblock %} 
{% block content %} 

<div class="row"> 
<div class="span12"> 
    <h2>Register</h2> 
    <p> 
     Register for this site and we'll give you free access to cool stuff 
     in addition you can subscribe to our premium content. 
    </p> 

    <form action="{{app.config.site.secureUrl}}/register-handler" method="post"> 
     <fieldset > 
      {{ form_widget(form) }} 
      <button type="submit" class="btn btn-info">Send</button> 
     </fieldset> 
    </form> 
</div> 
</div> 

</div> 

{% endblock %} 

試圖渲染頁面時,我得到了以下錯誤:

Twig_Error_Syntax:過濾器「反式」中不存在「form_div_layout.html.twig」在第35行

我已經縮小下來到Symfony的翻譯擴展安裝沒有,因此默認模板位於:

vendor\symfony\twigbridge\Symfony\Bridge\Twig\Resources\views\Form\form_div_layout.html.twig 

無法正確呈現。

我做了基於上面的一個不具備翻譯功能的新模板。

問題

我怎麼樹枝使用新的模板,而不是默認的?

回答

6

如果你想用你自己的表單模板,你只需要在你註冊枝條的選項來指定它:

$app->register(new Silex\Provider\TwigServiceProvider(), array(
     'twig.path' => __DIR__ . '/[Path_to_views_directory]', 
     'twig.class_path' => __DIR__ . '/vendor/twig/lib', 
     'twig.form.templates' => array([path_to_your_overriden_template]), 
)) ; 

請參閱文檔:TwigProvider documentation

但我認爲這是最好使用原始模板和註冊翻譯服務提供商這樣的:

$app->register(new Silex\Provider\TranslationServiceProvider(), array(
     'locale' => '[Your_locale]', 
     'translation.class_path' => __DIR__ . '/../vendor/symfony/src', 
     'translator.messages' => array() 
)) ; 

如果你使用驗證不要忘了閱讀本cookbo OK:

Translation cookbook

希望這會有所幫助。

+0

''twig.form.templates''對我來說不是正確的關鍵。使用''twig.form.resources''而不是工作。請參閱http://symfony.com/doc/master/cookbook/form/form_customization.html#making-application-wide-customizations – edan 2013-04-12 14:03:40