Accéder à l'entité liée à un form type Symfony dans la fonction buildForm
Publié le 16/03/2021 • Actualisé le 16/03/2021
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