Problèmes forms

Par WhiteAsssss, il y a 6 ans


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

<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity(repositoryClass="App\Repository\UserRepository") */ class User { /** * @ORM\Id() * @ORM\GeneratedValue() * @ORM\Column(type="integer") */ private $id; /** * @ORM\Column(type="string", length=255) */ private $username; /** * @ORM\Column(type="string", length=255) */ private $password; /** * @ORM\Column(type="string", length=255) */ private $mail; /** * @ORM\Column(type="string", length=255) */ private $firstName; /** * @ORM\Column(type="string", length=255) */ private $LastName; public function getId(): ?int { return $this->id; } public function getUsername(): ?string { return $this->username; } public function setUsername(string $username): self { $this->username = $username; return $this; } public function getPassword(): ?string { return $this->password; } public function setPassword(string $password): self { $this->password = $password; return $this; } public function getMail(): ?string { return $this->mail; } public function setMail(string $mail): self { $this->mail = $mail; return $this; } public function getFirstName(): ?string { return $this->firstName; } public function setFirstName(string $firstName): self { $this->firstName = $firstName; return $this; } public function getLastName(): ?string { return $this->LastName; } public function setLastName(string $LastName): self { $this->LastName = $LastName; return $this; } }

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

}

- Un controller HomeController.php :

<?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
{
/**

- Une vue index.html.twig :

{% 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 %}

Si je mets juste un {{form_widget(form)}}, lors de la validation de mon formulaire je récupère une erreur de type => "The uploaded file was too large. Please try to upload a smaller file". Déjà je comprend pas pourquoi ça fait ceci. Ensuite voilà ce que je récupère niveau data :

User^ {#437 ▼
-id: null
-username: null
-password: null
-mail: null
-firstName: null
-LastName: null
}

Si certaine pouvez éclairer ma lanterne car la je séche. Merci pour votre aide.

4 réponses

bidule76, il y a 6 ans

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()

bidule76, il y a 6 ans

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

WhiteAsssss, il y a 6 ans

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.

Digivia, il y a 6 ans

Hello,

@Bidule76 a bien répondu, juste quelques précisions pour info.
La ligne :

$user = $form->getData();

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