在Symfony2中使用必需字段的验证和自定义错误消息构建表单时,我手动必须为客户端验证指定NotBlank约束和自定义错误消息属性(使用Bootstrap Validator)。每个表单字段的代码都是这样的:
$builder->add('name', 'text', array(
'required' => true,
'constraints' => array(
new NotBlank(array('message' => 'Bitte geben Sie Ihren Namen ein.')),
),
'attr' => array(
// This is for client side bootstrap validator
'data-bv-notempty-message' => 'Bitte geben Sie Ihren Namen ein.'
)
));
我正在寻找的是通过仅指定required_message一次来缩短它的可能性:
$builder->add('name', 'text', array(
'required_message' => 'Bitte geben Sie Ihren Namen ein.'
));
我希望构建器创建NotBlank约束和data-bv-notempty-message属性。
实现这一目标的最佳方法是什么?通过创建表单类型扩展名?
答案 0 :(得分:1)
我目前使用的解决方案如下:在我的表单的类型类中(或者在Controller类中,如果在没有Type类的情况下动态创建表单),我添加了一个私有函数addRequired
用于添加所需的字段,如:
class MyFormWithRequiredFieldsType extends AbstractType
{
private $builder;
private function addRequired($name, $type = null, $options = array())
{
$required_message = 'Bitte füllen Sie dieses Feld aus';
if (isset($options['required_message'])) {
$required_message = $options['required_message'];
unset($options['required_message']);
}
$options['required'] = true;
$options['attr']['data-bv-notempty-message'] = $required_message;
if (!isset($options['constraints'])) {
$options['constraints'] = array();
}
$options['constraints'][] = new NotBlank(array(
'message' => $required_message
));
$this->builder->add($name, $type, $options);
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$this->builder = $builder;
$this->addRequired('name', 'text', array(
'required_message' => 'Bitte geben Sie Ihren Namen ein'
));
}
}
这有效,但我不喜欢这个解决方案,因为要添加必填字段,我必须调用$this->addRequired()
而不是$builder->add()
,因此我放弃了链接{{1}的可能性}}调用。这就是我正在寻找透明覆盖add()
方法的解决方案的原因。