Поле формы сущности и проверка в Symfony2? - PullRequest
2 голосов
/ 24 января 2012

В моей форме есть поле типа entity.Как отключить проверку этой сущности при отправке формы?Эта сущность уже сохранена в базе данных, поэтому для валидатора нет смысла проверять эту сущность с моей точки зрения.

РЕДАКТИРОВАТЬ:

Код выглядит следующим образом:

class SearchRequest
{
    /**
     * @ORM\ManyToOne(targetEntity="ArticlePattern")
     * @ORM\JoinColumn(name="article_pattern_id", onDelete="CASCADE")
     * @Assert\NotBlank
     */
    private $articlePattern;
}

поле формы:

$builder
    ->add('articlePattern', 'entity', array('class' => 'LonbitItssBundle:ArticlePattern')

Группы проверки не будут работать, потому что я хочу, чтобы валидатор проверял ограничение @Assert\NotBlank в поле $articlePattern, ноЯ не хочу, чтобы он проверял ограничения, определенные в классе ArticlePattern.Другими словами, я хочу предотвратить спуск валидатора внутри объекта $ articlePattern, но я хочу, чтобы ограничение, наложенное на само поле $ articlePattern, было проверено.

Есть идеи, как это сделать?

EDIT2:

Группы проверки будут работать .Таким образом, окончательное решение состоит в том, чтобы добавить groups={"search_request"} параметр ограничения (имя группы произвольно) к каждому утверждению поля в классе SearchRequest, например:

/**
 * @Assert\NotBlank(groups={"search_request"})
 */
private $articlePattern;

Таким образом, проверка не опустится до ассоциированногообъекты (при условии, что они не принадлежат - в данном случае - группе "search_request").

1 Ответ

4 голосов
/ 24 января 2012

1) Если вы хотите отключить это поле, просто не используйте его в форме класса!(и удалите его из шаблона)

public function buildForm(FormBuilder $builder, array $options)
{
        $builder
            ->add('content')
            ->add('username')
            //->add('yourEntity')
        ; 
}

2) Или лучше используйте группы проверки .Вы создаете группу validation_group, которая не вызывает вашу сущность validator, и затем вы используете эту группу в своей форме класса:

public function getDefaultOptions(array $options)
{
        return array(
            'data_class' => 'Sybio\BuzzBundle\Entity\SearchRequest',
            'csrf_protection' => true,
            'csrf_field_name' => '_token',
            'intention'       => '865c0c0b4ab0e063e5caa3387c1a8741',
            'validation_groups' => array('without_article_pattern_ckecking'),
        );
}

В вашем классе Entity:

/**
 * @ORM\ManyToOne(targetEntity="ArticlePattern")
 * @ORM\JoinColumn(name="article_pattern_id", onDelete="CASCADE")
 * @Assert\NotBlank(
 *  groups={"without_article_pattern_ckecking"}
 * )
 */
 private $articlePattern;

Ваша форма будет толькопроверяйте валидаторы, которые ссылаются на группуless_article_pattern_ckecking, поэтому он не должен тестировать валидаторы внутри вашей сущности ArticlePattern, если у них нет этой группы валидации.

Надеюсь, это поможет вам!

...