Как проверить не-сопоставленное свойство

Я определил свойство no-mapped в функции configureFormFields

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

и ограничение в функции проверки

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

и я получаю ошибку:

Ни одно свойство numberOfSubproducts ни метод getNumberOfSubproducts() ни метод isNumberOfSubproducts() существует в классе path\to\entity

Как правильно определить ограничение для свойства no-mapped в SonataAdminBundle?

3 ответа

Решение

Вы можете проверить поле непосредственно в форме, благодаря constraints имущество. Смотрите официальную документацию.

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

Самый простой способ - определить его как свойство вашей сущности, не указывая его как 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;
}

Первый способ проверки формы - FormType http://symfony.com/doc/2.2/book/forms.html

А также вы можете использовать группы проверки, если вы хотите настраиваемую проверку (только те, которые применены к группе) http://symfony.com/doc/2.2/book/forms.html

Во-вторых, создать форму как простой вызов createFormBuilder(). И введите туда свою пользовательскую проверку для каждого поля http://symfony.com/doc/2.2/book/forms.html

Другие вопросы по тегам