Bonjour,
Dans le Controller, tu dois récupérer les datas que SI le formulaire est soumis ... Pas avant.
Le
$user = $form->getData();
doit etre dans les
if $form->isSubmitted() et $form->isValid()
Bonjour,
Voilà j'essaie désepérement de faire fonctionner un formulaire sous Symfony 4. Mais voilà quoi que je fasse je n'arrive pas à renvoyer à mon controller les datas de mon formulaire.
Voilà ce que j'ai fais et les fichiers que j'ai créer pour
- Un fichier entity User.php :
- Un fichier UserType.php :
<?php
namespace App\Form;
use App\Entity\User;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextType;
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('username', TextType::class, [
'invalid_message' => 'Usermname problems',
])
->add('password', TextType::class, [
'invalid_message' => 'Password problems',
])
->add('mail', TextType::class, [
'invalid_message' => 'Mail problems',
])
->add('firstName', TextType::class, [
'invalid_message' => 'FirstName problems',
])
->add('LastName', TextType::class, [
'invalid_message' => 'LastName problems',
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => User::class,
]);
}
}
<?php
namespace App\Controller;
use App\Entity\User;
use App\Form\UserType;
use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class HomeController extends AbstractController
{
/**
-
@Route("/", name="home")
*/
public function index()
{
return $this->render('home/index.html.twig', [
'controller_name' => 'HomeController',
]);
}/**
-
@Route("/user/create", name="create")
*/
public function create(Request $request, ObjectManager $manager)
{
$user = new User();
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
$user = $form->getData();
if ($form->isSubmitted()){
echo "Dans le isSubmitted";if ($form->isValid()) { echo "Dans le isvalid"; // $entityManager->persist($user); // $entityManager->flush(); // return $this->redirectToRoute('/'); } } return $this->render('home/index.html.twig', [ 'form' => $form->createView(), 'user' => $user, ]);}
}
{% extends 'base.html.twig' %}
{% block title %}Hello HomeController!{% endblock %}
{% block body %}
{%if form is defined %}
{{form_start(form)}}
{{form_row(form.username)}}
{{form_row(form.password)}}
{{form_row(form.mail)}}
{{form_row(form.firstName)}}
{{form_row(form.LastName)}}
<button type="submit">Envoyer</button>
{{form_end(form)}}
{% endif %}
{%if user is defined %}
{{dump(user)}}
{% endif %}
{% endblock %}
User^ {#437 ▼
-id: null
-username: null
-password: null
-mail: null
-firstName: null
-LastName: null
}
4 réponses
Et ne passe pas $user dans la vue ... puisque la page est un NEW USER.
User n'est donc pas encore créé quand tu arrives sur le formulaire
Bonjour, je pensais que la question n'avait pas été posté. J'avais rencontré un bug enfin bref.
Pour te repondre @bidule76 c'etait surtout pour voir si je recevais bien des données quand même. Idem pour le renvoie de $user à la vue. Car je fesais un dump dans celle ci
Pour mon problème c'etait le php.ini qui avait des valeur max_upload et une autre à -1. Ce que symfony n'aime pas apparament.
Hello,
@Bidule76 a bien répondu, juste quelques précisions pour info.
La ligne :
est en réalité optionnelle. En fait, c'est la méthode handleRequest() qui se charge d'hydrater ton entité User à partir des données reçues dans la réponse (généralement en POST). La méthode isSubmitted() permet de savoir si le formulaire a été soumis, et la méthode isValid() fait passer le validateur sur les données de User ($user), pour vérifier tes données (si tu as mis des contraintes de validation dans ton form ou dans ton entité, c'est à ce moment là qu'elles sont vérifiées).
Le lien vers la doc : https://symfony.com/doc/current/forms.html#processing-forms