Symfony - определенная часть последовательности группы в сущности и в форме формы - PullRequest
0 голосов
/ 19 марта 2019

Похоже, что-то я не могу понять.Это будет длинный пост, поэтому я постараюсь быть кратким.

Я пытаюсь использовать 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)
    ;
}

Фактически, это работает, как только я устанавливаю группу для утверждения в сущности.

Спасибо за потраченное время и дайте мне знать, если я не очень ясен.

Гийом

...