4

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

正しくレンダリングされません。

上記のテンプレートに基づいて、の翻訳機能を使用せずに新しいテンプレートを作成しました。

質問

デフォルトのテンプレートの代わりに新しいテンプレートを使用するように小枝を取得するにはどうすればよいですか?

4

2 に答える 2

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ドキュメント

ただし、元のテンプレートを使用して、次のように翻訳プロバイダーを登録する方がよいと思います。

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

また、検証を使用する場合は、このクックブックを読むことを忘れないでください。

翻訳クックブック

これがお役に立てば幸いです。

于 2012-04-26T10:57:03.663 に答える
1

SymfonyBridgesServiceProviderTranslationServiceProviderを登録する必要があります。

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

于 2012-04-26T10:55:03.463 に答える