Похоже, что-то я не могу понять.Это будет длинный пост, поэтому я постараюсь быть кратким.
Я пытаюсь использовать GroupSequence в Symfony 4.2, но я столкнулся с проблемой.Цель, которую я хочу достичь, - это добавление несопоставленного поля и определение GroupSequence в FormType (потому что я хочу использовать другой FormType для этого объекта без этого несопоставленного поля).Я хочу, чтобы это непроверенное поле «проверено» проверялось перед другими ограничениями в форме.
Проблема в том, что мне не удается включить часть проверки с использованием групповой последовательности в данном конкретном случае.
Пример кода: https://github.com/sarramegnag/groupsequence-issue
Вот мой код сущности:
<?php // src/Entity/Product.php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
*/
class Product
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*
* @Assert\NotBlank()
*/
private $name;
/**
* @ORM\Column(type="text")
*
* @Assert\NotBlank()
*/
private $description;
/**
* @ORM\Column(type="integer")
*
* @Assert\NotBlank()
*/
private $price;
...
И мой код типа формы:
<?php // src/Form/ProductType.php
namespace App\Form;
use App\Entity\Product;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\GroupSequence;
use Symfony\Component\Validator\Constraints\NotBlank;
class ProductType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('description')
->add('price')
->add('verified', CheckboxType::class, [
'mapped' => false,
'constraints' => [
new NotBlank(['groups' => ['Strict']]),
]
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Product::class,
'validation_groups' => new GroupSequence(['Strict', 'Product']),
]);
}
}
Это работает, еслиЯ устанавливаю атрибут и утверждение в сущности и отображаю его как обычное поле.
// src/Entity/Product.php
/**
* @Assert\NotBlank(groups={"Strict"})
*/
private $verified = false;
...
public function isVerified(): ?bool
{
return $this->verified;
}
public function setVerified(bool $verified): self
{
$this->verified = $verified;
return $this;
}
// src/Form/ProductType.php
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('description')
->add('price')
->add('verified', CheckboxType::class)
;
}
Фактически, это работает, как только я устанавливаю группу для утверждения в сущности.
Спасибо за потраченное время и дайте мне знать, если я не очень ясен.
Гийом