21

symfony のフォームビルダーで作成したフォームを翻訳したいです。1 つの大きな翻訳ファイルが必要ないため、「ドメイン」に分割されています。

ここtranslation_domainで、フォームフィールドごとに を指定する必要があります。そうしないと、symfony が間違ったファイルを検索してしまいます。このオプションはすべてのフィールドに追加する必要がありますが、このオプションをフォーム全体に設定する方法はあるのでしょうか?

私が満足していないサンプルコード:

$builder->add(
    'author_name',
    'text',
    array('label' => 'Comment.author_name', 'translation_domain' => 'comment')
)->add(
    'email',
    'email',
    array('label' => 'Comment.email', 'translation_domain' => 'comment')
)->add(
    'content',
    'textarea',
    array('label' => 'Comment.content', 'translation_domain' => 'comment')
);
4

4 に答える 4

56

次に、フォームのデフォルト オプションとして設定し、これを追加します。

public function setDefaultOptions(OptionsResolverInterface $resolver)
{    
    $resolver->setDefaults(array(
        'translation_domain' => 'comment'
    ));

}

あなたのsetDefaultOptions方法に、あなたの形で。

更新:非推奨です。代わりにconfigureOptionsメソッドを使用してください(@Sudhakar Krishnanに感謝します)

于 2013-08-07T06:39:39.170 に答える
26

Ahmedの回答のメソッド名は非推奨になりました (Symfony 2.7 以降)。2.7 以降の方法は次のとおりです。

/**
 * Configures the options for this type.
 *
 * @param OptionsResolver $resolver The resolver for the options.
 */
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefault('translation_domain', 'messages');
}

data_class設定などを設定するのと同じ方法で。

フォーム ビルダーだけを使用してこれを行うには、フォーム ビルダーにoptions引数があります。コントローラーから、例えば:

$form = $this->createFormBuilder($entity, ['translation_domain' => 'messages'])->add(..)->getForm();

FormFactoryサービスを使用している場合、これは

$formFactory->createBuilder('form', $entity, ['translation_domain' => 'messages']);
于 2015-06-25T06:53:51.863 に答える
3

シンフォニー3

/**
 * Configures the options for this type.
 *
 * @param OptionsResolver $resolver The resolver for the options.
 */
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'translation_domain' => 'forms',
        // Add more defaults if needed
    ));
}
于 2017-11-21T03:49:58.080 に答える