web-dev-qa-db-ja.com

Symfony2フォーム入力での翻訳を伴うプレースホルダー属性の設定

ユーザーの管理にFOSUserBundleを使用しています。ユーザーを登録するために、自分のニーズを満たすバンドルのフォームを再利用しました。それでも、フィールドの属性をいくつか設定する必要がありました。これは、twigによって次のように簡単に実行されました。

    {{ form_widget(form.username, { 'attr': {'class': "span12",
        'placeholder': "Username"} }) }}

今、私の目標は私のプレースホルダーで自動翻訳をすることなので、このコードを提案しました:

    {{ form_widget(form.username, { 'attr': {'class': "span12",
        'placeholder': "{{'security.login.usernameplaceholder'|trans}}"} }) }}

この前のコードは、プレースホルダー値が{{'security.login.usernameplaceholder' | trans}}に等しい入力を生成しました

この問題を取り除くために、変数を設定しようとしましたが、symfonyはエラーを生成しました!!!

    {% set usernameplaceholder = {{'security.login.usernameplaceholder'|trans}} %}
    {{ form_widget(form.username, { 'attr': {'class': "span12",
        'placeholder': usernameplaceholder} }) }}

この問題を解決する提案はありますか?

おかげで、

13
Amine Jallouli

Twigでは、{{{{内に配置しないでください({%と同じ)。これをphpタグと考えてください。

以下はうまくいくはずです

{% set usernameplaceholder = 'security.login.usernameplaceholder'|trans %}
{{ form_widget(form.username, { 'attr': {'class': "span12",
    'placeholder': usernameplaceholder} }) }}

OR

{{ form_widget(form.username, { 'attr': {'class': "span12",
    'placeholder': 'security.login.usernameplaceholder'|trans} }) }}
29
Thomas Potaire

Symfony 3.x、4.xの場合

プレースホルダー(または任意の属性を追加する)を追加する別の方法は、options-array$builderの形式に、キーと値のペアとして属性を持つ別のArray attrを含めます。

// The parameters are column name, form-type and options-array respectively.
$builder->add('field', null, array(
            'attr' => array(
                 'placeholder' => 'support.contact.titleplaceholder'
             )
        ));
6
Niket Pathak

次のようにフォーム定義に追加することもできます。

    $builder
        ->add('information', 'textarea', array(
            'label' => false,
            'required' => true,
            'constraints' => [
                new NotBlank()
            ],
            'placeholder' => 'support.contact.titleplaceholder',
        ));
0
crmpicco

この方法でも(symfony4を使用して)twigで翻訳できます。

{'attr':{'placeholder': "Text to translate"}}

HTMLのプレースホルダーは次のように記述されるため、次のように翻訳できます。

<input placeholder="{{"Text to translate"|trans }}">
0
Michaeldc