2

Symfony2 で、6 桁、ダッシュ、4 桁 (例: 123456-7890) で構成される文字列を受け入れるテキスト入力フィールドを持つフォームを作成しようとしています。それは機能しますが、フィールドをフォームに追加する方法によっては、HTML マークアップに一貫性がありません。

これはエンティティからのものです:

class Kursist
{
...
/**
 * @ORM\Column(type="string", length=11)
 */
protected $cpr;
....
public static function loadValidatorMetadata(ClassMetadata $metadata)
{
    $metadata->addPropertyConstraint('cpr', new NotBlank());
    $metadata->addPropertyConstraint('cpr', new Regex(array(
        'pattern' => '/^\d{6}-\d{4}$/',
    )));
}

フォーム定義から:

class KursistType extends AbstractType
{
  public function buildForm(FormBuilderInterface $builder, array $options)
  {
    $builder->add('cpr');
    ...
  }
}

小枝テンプレートから:

<form action= ... >;
  {{ form_row(form.cpr) }}
    ...
</form>

ブラウザのソース コードは次のようになります。pattern 属性と maxlength 属性に注意ください

<label for="KursistType_cpr" class="required">Cpr</label><input type="text" id="KursistType_cpr" name="KursistType[cpr]" required="required" maxlength="11" pattern= "\d{6}-\d{4}" value="123456-7890" />

デフォルトではなく独自のラベルを使用したいので、フォーム フィールドの定義を変更します。

    クラス KursistType は AbstractType を拡張します
    {
      public function buildForm(FormBuilderInterface $builder, array $options)
      {
        $builder->add('cpr','text', array('label' => 'CPR'));
        ...

しかし、ブラウザのソース コードを見ると、pattern属性とmaxlength属性が削除されています。

    <label for="KursistType_cpr" class="required">CPR</label><input type="text" id="KursistType_cpr" name="KursistType[cpr]" required="required" value="123456-7890" />

これらの属性を削除せずに FormBuilderInterface を使用してラベルを変更する方法はありますか?

4

1 に答える 1

3

この不一致は、フィールドに関する追加情報をフォームビルダーに提供しない場合に最初に発生する型オプションの推測によるものです。

オプションの推測が無効になっている場合は、フィールド属性を明示的に指定できます。

$builder->add('cpr','text', array('label' => 'CPR', 'pattern' => '\d{6}-\d{4}'));

または、オプションの推測を有効にしたままにして、ラベル属性のみをオーバーライドすることもできます

$builder->add('cpr',null, array('label' => 'CPR'));
于 2013-04-01T10:40:53.277 に答える