Symfony 5

Fiche d'aides

Composer

# Installe les dépendances nescessaire pour faire
# fonctionner un projet symfony
# ATTENTION: Si il y a un problème vous pouvez supprimer
# le fichier "composer.lock" et relancer la commande.
composer install

# Install une librairie externe, un bundle ou
# un "package" flex
composer require <nom_du_paquet>

Symfony Server

# Lance un server de dévelopement
symfony server:start

# Lance un server de dévelopement sur un
# port prédéfinie
symfony server:start --port=4444

# Lance un server de dévelopement en 
# tache d'arrière plan
symfony server:start -d

# Affiche si un server est actuellement
# en route
symfony server:status

# Stop un server symfony
symfony server:stop

Symfony Console

# Affiche toute les commandes disponible dans
# la console symfony
symfony console

# Affiche l'aide d'une commande
symfony console help <nom_de_la_commande>

Symfony Console: Doctrine

# Créer la base de données
symfony console doctrine:database:create

# Supprime la base de données
symfony console doctrine:database:drop --force

# Créé le shéma de la base de données (les tables et
# les colones)
symfony console doctrine:schema:create

# Met à jour le schéma de la base de données
symfony console doctrine:schema:update --force

# Charge les "fixtures" (données fictive) dans la
# base de données
symfony console doctrine:fixtures:load

Symfony Console: Debug

# Affiche la liste de toutes les routes
# de l'application
symfony console debug:router

# Affiche toutes les informations d'une route
symfony console debug:router <nom_de_la_route>

Symfony Console: Make

# Crée un nouveau controller
symfony console make:controller <nom_du_controller>

# Crée une nouvelle entité doctrine et
# son repository
symfony console make:entity <nom_de_lentity>

# Crée un nouveau formulaire
symfony console make:form <nom_du_formulaire>

# Créé une nouvelle class d'utilisateur
symfony console make:user

# Créé un system d'authentification
symfony console make:auth

Controller

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class ExampleController extends AbstractController
{
    /**
     * @Route("/example", name="app_example_hello")
     */
    public function hello(Request $request, string $name): Response
    {
        $name = $request->query->get('name', 'Inconnue');

        return new Response("Hello $name");
    }
}

Controller

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class ExampleController extends AbstractController
{
    /**
     * @Route("/example", name="app_example_hello")
     */
    public function hello(Request $request): Response
    {
        $name = $request->query->get('name', 'Inconnue');

        return new Response("Hello $name");
    }
}

Hérite de AbstractController: permet d'utiliser les méthodes de base

Controller

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class ExampleController extends AbstractController
{
    #[Route('/hello', name: 'app_example_hello')]
    public function hello(Request $request): Response
    {
        $name = $request->query->get('name', 'Inconnue');

        return new Response("Hello $name");
    }
}

Attache une route

Controller

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class ExampleController extends AbstractController
{
    /**
     * @Route("/example", name="app_example_hello")
     */
    public function hello(Request $request): Response
    {
        $name = $request->query->get('name', 'Inconnue');

        return new Response("Hello $name");
    }
}

Injécte la Request et retourne toujours une Response

Controller

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class ExampleController extends AbstractController
{
    /**
     * @Route("/example", name="app_example_hello")
     */
    public function hello(Request $request): Response
    {
        $name = $request->query->get('name', 'Inconnue');

        return new Response("Hello $name");
    }
}

Récupére "name" depuis les queries de l'url

Controller & Request


/**
* @Route("/example", name="app_example_hello")
*/
public function hello(Request $request): Response
{
    $name = $request->query->get('name', 'Inconnue');
    $request->request->get('name');
    
    $request->isMethod('POST');

    return new Response("Hello $name");
}

Récupére "name" depuis les queries de l'url

Controller & Request


/**
* @Route("/example", name="app_example_hello")
*/
public function hello(Request $request): Response
{
    $name = $request->query->get('name', 'Inconnue');
    $request->request->get('name');
    
    $request->isMethod('POST');

    return new Response("Hello $name");
}

Récupére "name" depuis les données POST

Controller & Request


/**
* @Route("/example", name="app_example_hello")
*/
public function hello(Request $request): Response
{
    $name = $request->query->get('name', 'Inconnue');
    $request->request->get('name');
    
    $request->isMethod('POST');

    return new Response("Hello $name");
}

Test la méthode HTTP (l'envoie d'un formulaire)

Controller

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class ExampleController extends AbstractController
{
    /**
     * @Route("/example", name="app_example_hello")
     */
    public function hello(Request $request): Response
    {
        $name = $request->query->get('name', 'Inconnue');

        return new Response("Hello $name");
    }
}

Retourne une Response

Controller: Template & Redirect

// Retourne une réponse avec le contenue du template
// twig
return $this->render('nom_du_controller/nom_de_la_methode.html.twig', [
	'variable1' => 'valeur',
]);

// Redirige vers une autre route
return $this->redirectToRoute('nom_de_la_route', [
	'variable_de_la_route' => 'valeur',
]);

Controller: Doctrine

// Pour obtenir un repository l'injecter en paramètre du controller.
// et pour le manager utiliser : EntityManagerInterface

// Récupére toute les entité d'un repository
$entities = $repository->findAll();

// Récupére l'entité avec l'id 1
$entity = $repository->find(1);

// Sauvegarde une entité en base de données
$manager->persist($entity);
$manager->flush()

// Supprime une entité en base de données
$manager->remove($entity);
$manager->flush();

Controller: Form

// Créé un nouveau formulaire
$form = $this->createForm(NomDuType::class);

# Créé un nouveau formulaire préremplie
$form = $this->createForm(NomDuType::class, $entity);

# Remplie le formulaire avec les données
# de la requète
$form->handleRequest($request);

# Vérifie si le formulaire a bien était
# envoyé
$form->isSubmitted();

# Vérifie si le formulaire est valide
$form->isValid();

# Récupére les données de notre formulaire
$form->getData();

# Créé la "Vue" de notre formulaire pour twig
$formView = $form->createView();

FormType

<?php

namespace App\Form;

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

class ExampleType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nom_du_champ', TextType::class, [
                'label' => 'Mon label'
            ]);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => MonEntity::class,
        ]);
    }
}

FormType

<?php

namespace App\Form;

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

class ExampleType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nom_du_champ', TextType::class, [
                'label' => 'Mon label'
            ]);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => MonEntity::class,
        ]);
    }
}

Hérite de AbstractType

FormType

<?php

namespace App\Form;

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

class ExampleType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nom_du_champ', TextType::class, [
                'label' => 'Mon label'
            ]);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => MonEntity::class,
        ]);
    }
}

Contient 2 méthodes

FormType

<?php

namespace App\Form;

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

class ExampleType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nom_du_champ', TextType::class, [
                'label' => 'Mon label'
            ]);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => MonEntity::class,
        ]);
    }
}

Configure les champs du formulaire

FormType

<?php

namespace App\Form;

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

class ExampleType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nom_du_champ', TextType::class, [
                'label' => 'Mon label'
            ]);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => MonEntity::class,
        ]);
    }
}

Configure les options du formulaire

FormType

<?php

namespace App\Form;

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

class ExampleType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nom_du_champ', TextType::class, [
                'label' => 'Mon label'
            ]);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => MonEntity::class,
        ]);
    }
}

Définie l'objet PHP que le formulaire doit remplir. Nous pouvons le récupérer avec $form->getData();

FormType

<?php

namespace App\Form;

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

class ExampleType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nom_du_champ', TextType::class, [
                'label' => 'Mon label'
            ]);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => MonEntity::class,
        ]);
    }
}

Ajoute des champs

Twig

{# Affiche une variable #}
{{ nom_de_la_variable }}

{# Condition #}
{% if some_variable > 10 %}
   <p>Vous avec plus de 10 ans</p>
{% endif %}

{# Boucle #}
{% for element in tableaux %}

{% endfor %}

{# Inclure un template #}
{{ include('chemin/_de_mon_template.html.twig') }}

Twig & Routing

{# Génére le lien relatif d'une route #}
{{ path('nom_de_la_route') }}

{# Génére l'url complet d'une route #}
{{ url('nom_de_la_route') }}

Twig & Form

{# Affiche l'intégralité d'un formulaire #}
{{ form(formView) }}

{# affiche seulement la balise ouvrante d'un formulaire #}
{{ form_start(formView) }}

{# affiche le label d'un champ #}
{{ form_label(formView.nomDuChamp) }}

{# affiche les erreurs d'un champ #}
{{ form_errors(formView.nomDuChamp) }}

{# Affiche le widget d'un champ #}
{{ form_widget(formView.nomDuChamp) }}

{# Affiche l'aide d'un champ #}
{{ form_help(formView.nomDuChamp) }}

{#
    Affiche l'aide, le label, les erreurs et le widget
    d'un champ
#}
{{ form_row(formView.nomDuChamp) }}

{# Affiche le reste du formulaire #}
{{ form_rest(forwView) }}

{# Affiche la balise fermante d'un formulaire #}
{{ form_end(formView) }}

Twig Héritage

{# Dans base.html.twig #}
Made with Slides.com