2013-06-20 105 views
2

我在验证功能如何验证无对应的属性

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

定义在configureFormFields功能

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

和约束没有对应的属性,我得到错误:

无论财产numberOfSubproducts也没有方法getNumberOfSubproducts()也没有方法isNumberOfSubproducts()存在于类path\to\entity

如何以正确的方式为SonataAdminBundle中的no-mapped属性定义约束?

回答

3

您可以直接在窗体中验证字段,这要归功于constraints属性。请参阅official documentation

$builder 
    ->add('lastName', 'text', array(
     'constraints' => array(
      new NotBlank(), 
      new Length(array('min' => 3)), 
     ), 
    )) 
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; 
} 
+0

forgottenbas'答案是干净的解决方案,我的只是一种很好的黑客;) – AlterPHP

+0

有时是非常有用的存储在实体属性,但形式可以不映射到实体或模型=) –