2012-04-26 31 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