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>

这就是浏览器源代码的样子——注意patternmaxlength属性:

<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
    {
      公共函数 buildForm(FormBuilderInterface $builder, array $options)
      {
        $builder->add('cpr','text', array('label' => 'CPR'));
        ...

但是现在当我查看浏览器源代码时,patternmaxlength属性已经消失了:

    <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 回答