Symfony2 表单和 <input> 模式属性

Posted

技术标签:

【中文标题】Symfony2 表单和 <input> 模式属性【英文标题】:Symfony2 forms and <input> pattern attribute 【发布时间】:2013-03-22 07:53:26 【问题描述】:

我正在尝试在 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' => '/^\d6-\d4$/',
    )));

来自表单定义:

class KursistType extends AbstractType

  public function buildForm(FormBuilderInterface $builder, array $options)
  
    $builder->add('cpr');
    ...
  

来自树枝模板:

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

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

我想使用自己的标签而不是默认的,所以我更改了表单字段定义:

KursistType 类扩展 AbstractType 公共函数 buildForm(FormBuilderInterface $builder, array $options) $builder->add('cpr','text', array('label' => 'CPR')); ...

但是现在看浏览器源码的时候,patternmaxlength属性都没有了:

有没有办法在不删除这些属性的情况下使用 FormBuilderInterface 修改标签?

【问题讨论】:

我看起来像是 Symfony2 的 bug,应该可以正常工作... 【参考方案1】:

这种不一致是由于type options guessing 造成的,第一种情况是当您没有向表单构建器提供有关字段的任何其他信息时。

禁用选项猜测时,您可以明确提供字段属性。

$builder->add('cpr','text', array('label' => 'CPR', 'pattern' => '\d6-\d4'));

或者你甚至可以保持启用选项猜测,但只覆盖标签属性

$builder->add('cpr',null, array('label' => 'CPR'));

【讨论】:

以上是关于Symfony2 表单和 <input> 模式属性的主要内容,如果未能解决你的问题,请参考以下文章

symfony2 表单验证单选按钮

Symfony2/Doctrine 提交表单需要很长时间

带有两个提交按钮的 Symfony 2 表单

Symfony2 嵌入式表单删除按钮功能

Symfony2 复合表单,将错误与字段关联

Symfony2 表单 > 实体字段类型 > 查询构建器 > 可能的子选择?