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(),
]);
}
}