Home | Symfony2Doc »リファレンスドキュメント »Form Type リファレンス »repeated フィールドタイプ

ご注意

Symfony2日本語翻訳ドキュメントは内容が古くなっております。公式サイトの英語ドキュメントを参照してください。

Note

  • 対象バージョン:2.3+
  • 翻訳更新日:2014/05/24

repeated フィールドタイプ

これは特別なフィールド “グループ” です。値が一致しなくてはいけない(または、検証エラーがスローされる)二つの同一のフィールドです。 ユーザーに検証のためパスワードや電子メールを繰り返し求めるのが最も一般的な使用法です。

対応するデータ型 text フィールドがデフォルト。 type オプションを参照
オプション
上書きされた オプション
継承された オプション
親タイプ form
クラス RepeatedType

使用例

$builder->add('password', 'repeated', array(
    'type' => 'password',
    'invalid_message' => 'The password fields must match.',
    'options' => array('attr' => array('class' => 'password-field')),
    'required' => true,
    'first_options'  => array('label' => 'Password'),
    'second_options' => array('label' => 'Repeat Password'),
));

フォーム送信に成功したとき、 “password” フィールドの両方に入力された値は “password” キーのデータになります。 つまり、実際に2つのフィールドが描画されていても、フォームからのエンドデータはあなたが必要とする単一の値(通常は文字列)です。

最も重要なオプションは、type です。それは、任意のフィールドタイプを設定でき、2つの対応するフィールドの実際の型を決定します。 options オプションは、それらの個々のフィールドにそれぞれに渡され、 - この例では - password タイプがサポートする任意のオプションをこの配列に渡すことができます。

Rendering

繰り返されるフィールドタイプは、実際には二つのフィールドを、すべてを一度に、または個別にレンダリングすることができます。 一度にすべてをレンダリングするには、以下のように使用します。:

  • Twig
    {{ form_row(form.password) }}
    
  • PHP
    <?php echo $view['form']->row($form['password']) ?>
    

個別に各フィールドをレンダリングするためには、このように使用します。:

  • Twig
    {# .first and .second may vary in your use - see the note below #}
    {{ form_row(form.password.first) }}
    {{ form_row(form.password.second) }}
    
  • PHP
    <?php echo $view['form']->row($form['password']['first']) ?>
    <?php echo $view['form']->row($form['password']['second']) ?>
    

Note

firstsecond は二つのサブフィールドのデフォルトの名前です。 しかし、これらの名前は first_namesecond_name オプションを介して制御することができます。 これらのオプションを設定している場合は、firstsecond をレンダリングするとき代わりにそれらの値を使用します。

Validation

repeated フィールドの主な特徴の一つは(設定するために何もする必要がない)内部検証です。2つのフィールドが一致する値を持つように強制します。 2つのフィールドが一致しない場合、ユーザにエラーが表示されます。

invalid_message は2つのフィールドが一致しないときに表示されるエラーをカスタマイズするために使用されます。

フィールドオプション

type

データ型: string デフォルト: text

その2つのフィールドはこのフィールドタイプになります。たとえば、password タイプを渡すと、二つの password フィールドをレンダリングします。

options

データ型: array デフォルト: array()

このオプションの配列は二つのフィールドにそれぞれに渡されます。換言すれば、これらは、個々のフィールドタイプをカスタマイズするオプションがあります。 たとえば、type オプションに password を設定したとき、この配列には always_empty または required が含まれるでしょう。 どちらのオプションも password フィールドタイプでサポートされています。

first_options

データ型: array デフォルト: array()

第一フィールド だけ に渡されるべき追加オプション( options にマージされます)です。 これはラベルをカスタマイズする場合に特に便利です。:

$builder->add('password', 'repeated', array(
    'first_options'  => array('label' => 'Password'),
    'second_options' => array('label' => 'Repeat Password'),
));

second_options

データ型: array デフォルト: array()

第二フィールド だけ に渡されるべき追加オプション( options にマージされます)です。 これはラベルをカスタマイズする場合に特に便利です。(参照 first_options

first_name

データ型: string デフォルト: first

これは、第一フィールドのために使用される実際のフィールド名です。 大部分には無意味ですが、両方のフィールドに入力された実際のデータは、repeated フィールド自体(例えば``password``)に 割り当てられるそのキーで利用できるようになります。 しかし、ラベルを指定しない場合はこのフィールド名はラベルを「推測」するために使用されます。

second_name

データ型: string デフォルト: second

first_name と同様ですが、第二フィールドのためのものです。

上書きされたオプション

error_bubbling

デフォルト: false

継承されたオプション

以下のオプションは form タイプを継承しています:

data

データ型: mixed デフォルト: 対応するオブジェクトのフィールド(一つであれば)

フォームを作成したとき、各フィールドに表示する初期値は、フォームのドメインオブジェクトの対応するプロパティの値です(オブジェクトがフォームにバインドされている場合)。もしフォーム、または、単に個々のフィールドの初期値を上書きしたい場合は、data オプションで設定することが出来ます。:

$builder->add('token', 'hidden', array(
    'data' => 'abcdef',
));

Note

フォームのフィールドのデフォルト値は、直接データ構造(例えば、エンティティまたは配列)から取得されます。 data オプションはこのデフォルト値を上書きします。

invalid_message

データ型: string デフォルト: This value is not valid

フィールドに入力されたデータが意味を成さない(すなわち、バリデーション失敗の)場合に使われるバリデーションエラーのメッセージです。

たとえば、時間に変換される time フィールドに無意味な文字を入れたときに、または、 number フィールドに文字列(例、 apple )を入れたときにおきます。

通常の(最小の文字数をセットするような)(ビジネスロジック)バリデーションはバリデーションメッセージをバリデーションルール( reference )とあわせて設定すべきです。

invalid_message_parameters

データ型: array デフォルト: array()

invalid_message オプションをセットする場合、文字列にいくつかの変数を取り込む必要があるかもしれません。プレースホルダーをそのオプションに加え、変数をこのオプションに含めることで可能です:

$builder->add('some_field', 'some_type', array(
    // ...
    'invalid_message'            => 'You entered an invalid value - it should include %num% letters',
    'invalid_message_parameters' => array('%num%' => 6),
));

mapped

データ型: boolean

オブジェクトを読み込んでいるまたは書き込んでいる間、フィールドが無視されるようにしたい場合は、 mapped オプションを false にしてください。

error_mapping

データ型: array デフォルト: empty

このオプションはバリデーションエラーの対象を編集することができます。

matchingCityAndZipCode という名前のメソッドを持っているとして、それが city および zip code が一致するかの検証をするとします。しかし残念なことに、 “matchingCityAndZipCode” フィールドがフォームに無いため、 Symfony ができるのはフォームの上部にエラーを表示することです。

カスタマイズされたエラーマッピングを使うと、city フィールドの上にエラーを表示するように、より上手にエラーをマップできます。:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'error_mapping' => array(
            'matchingCityAndZipCode' => 'city',
        ),
    ));
}

こちらが左側、右側のマッピングするルールです:

  • 左側はプロパティパスを有します。
  • クラスのプロパティまたはメソッドで違反が生成された場合、そのパスは単に “propertyName” です。
  • array または ArrayAccess オブジェクトで違反が生成された場合、プロパティパスは [indexName] です。
  • ドットでプロパティを分離し、それらを連結して、ネストされたプロパティパスを作成することができます。たとえば addresses[work].matchingCityAndZipCode のように。
  • 左側のエラーマッピングは単一のドット . も認められます。それはフィールド自体をさしています。フィールドに追加されたエラーはネストされたフィールドの代わりに付与されたことを意味します。
  • 右側は単にフォームのフィールド名を有します。
blog comments powered by Disqus