Я следил за документацией и смог добавить собственные ограничения для многих своих полей (http://symfony.com/doc/current/validation/custom_constraint.html).
Я выясняю проблему с полем CollectionType. Мое настраиваемое ограничение просто проверяет, не коснулся ли пользователь нескольких пробелов в поле (ограничение в любом случае не имеет значения).
У меня есть форма вопроса с заголовком и ответами:
$builder
->add('title', TextType::class)
->add('answers', CollectionType::class, array(
'entry_type' => AnswerType::class,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false
))
У меня есть ограничение:
use Symfony\Component\Validator\Constraint;
/**
* @Annotation
*/
class ContainsText extends Constraint
{
public $message = 'constraint_error';
}
И мой валидатор ограничений:
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class ContainsTextValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint)
{
// It checks if user didn't had multiple space in field
if (strlen(trim($value)) == 0) {
$this->context->buildViolation($constraint->message)
->addViolation();
}
}
}
В моих сущностях:
Вопрос:
use XX\XXBundle\Validator\Constraints as CustomAssert;
class Question
{
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=255, unique=true)
* @CustomAssert\ContainsText
*/
private $title;
...
}
Ответ:
use XX\XXBundle\Validator\Constraints as CustomAssert;
class Answer
{
/**
* @var string
*
* @ORM\Column(name="text", type="string", length=255, unique=true)
* @CustomAssert\ContainsText
*/
private $text;
...
}
В моей проверке формы, если в заголовке вопроса я нажимаю много пробелов, я получаю сообщение об ошибке проверки формы с моим сообщением "constraint_error" => Все работает.
Но если в тексте ответов на вопросы я нажимаю много пробелов, проверка формы не возвращает никаких ошибок, и мой вопрос создается с пустыми ответами!
Кажется, что если поле поступает из CollectionType, пользовательские утверждения игнорируются.
Я не понимаю, если бы у меня был Assert (например, @Assert \ Blank (), а не пользовательский) в тексте ответа, даже если мы находимся в CollectionType, утверждение не игнорируется, и я не могу проверить форма с пустым ответом.
Что я здесь пропустил? TY
Symfony3
, а в имени тега указаноsymfony2
. В любом случае ответы охватывают и то, и другое;) - person Jovan Perovic   schedule 17.10.2016