owned this note changed 5 years ago
Published Linked with GitHub

Symfony - Formulaires & Formulaires imbriqués

tags: Symfony gobelins

Documentation symfony

Qu'est-ce qu'un formulaire en symfony ?

Dans les frameworks, on fait la différence entre un formulaire et un champ de formulaire.

En symfony, un formulaire et un champ de formulaire, c'est la même chose.

  • Un champ = un type de formulaire (exemple : TextType est un champ de formulaire et un formulaire en lui-même)
  • Un groupe de plusieurs champs de formulaire HTML = un type de formulaire

On a ici le design pattern Composite

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Distinguer les formulaires back et front.

Lorsqu'on crée un formulaire, on crée un type.


Exemples de types :

  • TextType
  • DateType

Il y a aussi un type SubmitType particulier qui va créer le bouton de soumission du formulaire.

Architecture

Pour créer un nouveau formulaire, il faut créer une classe spécifique que l'on va appeler dans le controller. Le controller doit uniquement appeler la classe, et non construire le formulaire.

Les classes sont dans le dossier App/Form/Type.

Exemple :

class TaskType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('task', TextType::class)
            ->add('dueDate', DateType::class)
            
            ->add('save', SubmitType::class)
        ;
    }
}
class TaskController extends AbstractController
{
    public function new()
    {
    
        // [FACULTATIF] creates a task object and initializes some data for this example
        $task = new Task();
        $task->setTask('Write a blog post');
        $task->setDueDate(new \DateTime('tomorrow'));
    
        $form = $this->createForm(TaskType::class, $task);

        // ...
    }
}

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Ne pas oublier d'importer les types utilisés :

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;

Avec cette construction, on peut facilement imaginer utiliser des formulaires imbriqués, puisqu'un formulaire est un type, et qu'on utilise les types dans les formulaires.

Select a repo