使用Symfony Forms,Twig和SymfonyTwigBridge时,如何覆盖默认模板?

时间:2012-04-26 10:13:00

标签: php twig symfony-forms silex

我在Silex应用程序中使用Symfony和Twig。

我有一个注册页面,其中包含以下表格:

{% 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:过滤器“trans”在第35行的“form_div_layout.html.twig”中不存在

我已将其缩小为未安装的Symfony转换扩展程序,因此默认模板位于:

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

无法正确呈现。

我在上面创建了一个没有翻译功能的新模板。

问题

如何使用新模板而不是默认模板?

2 个答案:

答案 0 :(得分:6)

如果您想将自己的模板用于表单,则只需在注册Twig时在选项中指定它:

$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()
)) ;

如果您使用验证,请不要忘记阅读本食谱:

Translation cookbook

希望这会有所帮助。

答案 1 :(得分:1)

您应该注册SymfonyBridgesServiceProviderTranslationServiceProvider

这应该会为您提供跨过滤器并解决您的初始问题。