如何验证无映射属性

时间:2013-06-20 10:14:08

标签: validation symfony sonata-admin

我在configureFormFields函数中定义了no-mapped属性

add('numberOfSubproducts', 'integer',array('mapped' => false,'required' => true, 'data'=> 1))

和验证函数中的约束

assertRange(['min' => 0, 'max' => 9999])

我收到错误:

numberOfSubproducts

中不存在属性getNumberOfSubproducts(),方法isNumberOfSubproducts()和方法path\to\entity

如何以正确的方式在SonataAdminBundle中为无映射属性定义约束?

3 个答案:

答案 0 :(得分:2)

由于constraints属性,您可以直接在表单中验证字段。请参阅official documentation

$builder
   ->add('lastName', 'text', array(
       'constraints' => array(
           new NotBlank(),
           new Length(array('min' => 3)),
       ),
   ))

答案 1 :(得分:1)

最简单的方法是将其定义为实体的属性,而不将其声明为ORM \ Column。

使用注释,你可以这样做:

实体类声明中的

use Symfony\Component\Validator\Constraints as Assert;

// ...

/**
 * Assert\Range(min=0, max=9999)
 */
protected $numberOfSubproducts;

// ...

public function getNumberOfSubproducts()
{
    return $this->numberOfSubproducts;
}

public function setNumberOfSubproducts($numberOfSubproducts)
{
    $this->numberOfSubproducts = $numberOfSubproducts;
    return $this;
}

答案 2 :(得分:0)

验证表单的第一种方法是FormType http://symfony.com/doc/2.2/book/forms.html#form-validation

如果您想要自定义验证(仅适用于组的那些),您也可以使用验证组 http://symfony.com/doc/2.2/book/forms.html#validation-groups

其次是创建表单,简单调用createFormBuilder()。然后输入每个字段的自定义验证 http://symfony.com/doc/2.2/book/forms.html#building-the-form