2

我在 configureFormFields 函数中定义了无映射属性

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

和验证功能中的约束

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

我得到错误:

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

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

4

3 回答 3

3

由于constraints属性,您可以直接在表单中验证字段。见官方文档

$builder
   ->add('lastName', 'text', array(
       'constraints' => array(
           new NotBlank(),
           new Length(array('min' => 3)),
       ),
   ))
于 2013-06-20T11:40:04.167 回答
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;
}
于 2013-06-20T10:19:29.497 回答
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

于 2013-06-20T11:04:29.277 回答