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

正しく表示されません。

私が翻訳機能することなく、上記のいずれかに基づいて新しいテンプレートを作りました。

質問

をどのように私の代わりに、デフォルトの1の新しいテンプレートを使用するために小枝を得るのですか?

答えて

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

1

SymfonyBridgesServiceProviderTranslationServiceProviderを登録してください。

それはあなたにトランスフィルタを与え、あなたの最初の問題を解決するはずです。

+0

両方の素晴らしい答え。ありがとうございました。 –

+0

リンクがなくなったようですか? – kaiser

+0

最初のリンクが死んでいます – Trix