Symfony

CONNAITRE LE TYPE D'UN CHAMP DE FORMULAIRE DÉFINI PAR SYMFONY

D

Lundi 10 juin 2019

Mis à jour le lundi 10 juin 2019

Connaitre le type d'un champ de formulaire défini par Symfony

Symfony, par défaut, quand vous créez un formulaire, défini un type en fonction du type de la donnée et de ses contraintes. Ainsi, quand vous créez un formulaire comme ceci :
public function new()
{
    $task = new Task();

    $form = $this->createFormBuilder($task)
        ->add('task')
        ->add('dueDate', null, ['widget' => 'single_text'])
        ->add('save', SubmitType::class)
        ->getForm();
}
Symfony devine automatiquement que le champ task est un TextType et que le champ dueDate est un DateType.
Vous avez plus d'informations sur cette fonctionnalité directement dans la documentation de Symfony ici : https://symfony.com/doc/current/forms.html#field-type-guessing

Si vous souhaitez connaitre le type que Symfony a défini pour un de vos champs, voici comment vous pouvez l'afficher dans vos controlleurs :
<?php

namespace App\Controller;

use App\Entity\Activite;
use App\Form\ActiviteType;
use App\Repository\ActiviteRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Psr\Log\LoggerInterface;

/**
 * @Route("/activites")
 * @IsGranted("IS_AUTHENTICATED_FULLY")
 * @IsGranted("ROLE_ADMIN")
 */
class ActiviteController extends AbstractController
{

    /**
     * @Route("/new", name="activites_new", methods={"GET","POST"})
     */
    public function new(Request $request, LoggerInterface $logger): Response
    {
        $activite = new Activite();
        $form = $this->createForm(ActiviteType::class, $activite);

        // on log et on dump le type du champ "dueDate"
        $logger->info('class = ' . get_class($form->get('packagesInclus')->getConfig()->getType()->getInnerType()));
        dump($form->get('packagesInclus')->getConfig()->getType()->getInnerType());
        
        // Pour logger et dumper le type de chaque champ du formulaire
        foreach($form as $key => $per) {
          dump($per);
          dump($per->getConfig()->getType()->getInnerType());
          $logger->info(get_class($per->getConfig()->getType()->getInnerType()));
        }
        
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($activite);
            $entityManager->flush();

            // Message flash
            $this->addFlash('success', 'Activités créé avec succès !');

            return $this->redirectToRoute('activite_index');
        }

        return $this->render('activite/new.html.twig', [
            'activite' => $activite,
            'form' => $form->createView(),
        ]);
    }
}

Une erreur ? une question ? une critique ? une faute ? un conseil ? ou tout simplement un merci ?

Lâche ton commentaire