我正在尝试在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>
这是浏览器源代码的样子 - 请注意模式和 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" />
我想使用自己的标签而不是默认标签,因此我更改了表单字段定义:
class KursistType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('cpr','text', array('label' => 'CPR')); ...
但现在当我查看浏览器源代码时,模式和 maxlength 属性已经消失:
<label for="KursistType_cpr" class="required">CPR</label><input type="text" id="KursistType_cpr" name="KursistType[cpr]" required="required" value="123456-7890" />
有没有办法使用FormBuilderInterface修改标签而不删除这些属性?
答案 0 :(得分:3)
这种不一致是由type options guessing引起的,当你没有向表单构建器提供有关字段的任何其他信息时,会发生{{3}}。
禁用选项猜测时,您可以明确提供字段属性。
$builder->add('cpr','text', array('label' => 'CPR', 'pattern' => '\d{6}-\d{4}'));
甚至可以启用选项猜测,但只覆盖标签属性
$builder->add('cpr',null, array('label' => 'CPR'));