Accéder à l'entité liée à un form type Symfony dans la fonction buildForm

Publié le 16/03/2021 • Mis à jour le 16/03/2021


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

Dans ce bout de code, nous allons voir comment accéder à l'entité liée à un type de formulaire Symfony dans la fonction buildForm. On a juste à apeller la fonction getData() de l'objet form builder. C'est utile quand on veut créer des formulaires dynamiques dépendant de l'état courant de l'entité. Veuillez noter que si le formulaire est utilisé plusieurs au cours d'une requête, on doit utiliser les événements afin de le modifier (cf le lien de documentation ci-dessous).


<?php

declare(strict_types=1);

// src/Form/ArticleType.php

namespace App\Form;

use App\Entity\Article;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\NotBlank;

/**
 * Fake article form for snippet30.
 */
final class ArticleType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $article = $builder->getData();
        if (!$article instanceof Article) {
            throw new \RuntimeException('Invalid entity.');
        }

        if ($article->isArticle() || $article->isSnippet()) {
            $builder->add('slug', TextType::class, ['constraints' => [new NotBlank()]]);
        }
    }

    public function configureOptions(OptionsResolver $resolver): void
    {
        $resolver->setDefaults([
            'csrf_protection' => false,
            'data_class' => Article::class,
            'constraints' => [
                new UniqueEntity(['fields' => ['slug']]),
            ],
        ]);
    }
}

 Plus sur Stackoverflow   Lire la doc  Snippet aléatoire