Créez votre première page dans Symfony

    Créer une nouvelle page - qu'il s'agisse d'une page HTML ou JSON - est un processus simple en deux étapes:
  1. Créer une route : Un route est l'URL (par exemple /about ) de votre page et pointe vers un contrôleur;
  2. Créer un contrôleur : Un contrôleur est la fonction PHP que vous écrivez et qui construit la page. Vous prenez les informations de demande entrantes et vous les utilisez pour créer un objet Response Symfony, qui peut contenir du contenu HTML, une chaîne JSON ou même un fichier binaire comme une image ou un fichier PDF.
 
Symfony englobe le cycle de vie HTTP Request-Response. Pour en savoir plus, consultez Symfony et les principes de base HTTP .

Créer une page: Route et contrôleur

Point

Avant de continuer, assurez-vous d'avoir lu l'article Configuration et d'accéder à votre nouvelle application Symfony dans le navigateur.

Supposons que vous vouliez créer une page - /lucky/number - qui génère un nombre chanceux (bien, aléatoire) et l'imprime. Pour ce faire, créez une "classe de contrôleur" et une méthode de "contrôleur" à l'intérieur de celle-ci:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
 <? php
// src/Controller/LuckyController.php
namespace App\Controller ;

use Symfony\Component\HttpFoundation\Response ;

class LuckyController
{
    public function number()
    {
        $number = mt_rand(0 , 100);

        return new Response (
            '<html><body>Lucky number: ' . $number . '</body></html>'
        );
    }
}

Vous devez maintenant associer cette fonction de contrôleur à une URL publique (par exemple /lucky/number ) pour que la méthode number() soit exécutée lorsqu'un utilisateur y accède. Cette association est définie en créant une route dans le fichier config/routes.yaml :

1
2
3
4
5
6
 # config/routes.yaml

# the "app_lucky_number" route name is not important yet
app_lucky_number :
    path : /lucky/number
    controller : App\Controller\LuckyController::number

C'est tout! Si vous utilisez le serveur Web Symfony, essayez-le en allant sur:

Si vous voyez un chiffre chanceux qui vous est imprimé, félicitations! Mais avant de vous lancer à la loterie, vérifiez comment cela fonctionne. Rappelez-vous les deux étapes pour créer une page?

  1. Créer un itinéraire : Dans config/routes.yaml , l'itinéraire définit l'URL de votre

    page ( path ) et quel controller appeler. Vous en apprendrez plus sur le routage dans sa propre section, y compris comment créer des URLs variables ;

  2. Créer un contrôleur : Il s'agit d'une fonction dans laquelle vous construisez la page et finalement renvoyez un objet Response . Vous en apprendrez plus sur les contrôleurs dans leur propre section, y compris comment retourner les réponses JSON.

annotations pour routes

Au lieu de définir votre route dans YAML, Symfony vous permet également d'utiliser des  annotations pour route . Pour ce faire, installez le package d'annotations:

  composer require annotations

Vous pouvez maintenant ajouter votre route directement au - dessus des actions :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
// src/Controller/LuckyController.php

// ...
+ use Symfony\Component\Routing\Annotation\Route;

class LuckyController
{
+     /**
+      * @Route("/lucky/number")
+      */
    public function number()
    {
        // this looks exactly the same
    }
}

C'est tout! La page - http://localhost:8000/lucky/number fonctionnera exactement comme avant! Les annotations sont la méthode recommandée pour configurer les routes.

 

Pointe

Pour créer des contrôleurs plus rapidement, laissez Symfony le générer pour vous:

  php bin/console make:controller

Auto-Installation de recettes avec Symfony Flex

Vous ne l'avez peut-être pas remarqué, mais lorsque vous avez exécuté un composer require annotations , deux choses spéciales se sont produites, à la fois grâce à un puissant plugin Composer appelé Flex .

Premièrement, les annotations ne sont pas un vrai nom de paquet: c'est un alias (raccourci) que Flex résout en sensio/framework-extra-bundle .

Deuxièmement, après que ce paquet ait été téléchargé, Flex a exécuté une recette , qui est un ensemble d'instructions automatisées qui indiquent à Symfony comment intégrer un paquet externe. Les recettes Flex existent pour de nombreux paquets (voir symfony.sh ) et ont la capacité de faire beaucoup, comme l'ajout de fichiers de configuration, la création de répertoires, la mise à jour de .gitignore et l'ajout de nouvelles config à votre fichier .env . Flex automatise l'installation des paquets pour que vous puissiez revenir au codage.

Vous pouvez en apprendre plus sur Flex en lisant " Utiliser Symfony Flex pour gérer les applications Symfony ". Mais ce n'est pas nécessaire: Flex fonctionne automatiquement en arrière-plan lorsque vous ajoutez des paquets.

La commande bin/console

Votre projet dispose déjà d'un puissant outil de débogage: la commande bin/console . Essayez de l'exécuter:

  php bin/console

Vous devriez voir une liste de commandes qui peuvent vous donner des informations de débogage, aider à générer du code, générer des migrations de bases de données et bien plus encore. Comme vous installez plus de paquets, vous verrez plus de commandes.

Pour obtenir une liste de toutes les routes de votre système, utilisez la commande debug:router :

  php bin/console debug:router

Vous devriez voir votre seule route jusqu'à présent:

Name Method Scheme Host Path
app_lucky_number ANY ANY ANY /lucky/number

Vous apprendrez à propos de beaucoup plus de commandes pendant que vous continuez!

La barre d'outils de débogage Web:

L'une des fonctionnalités phares de Symfony est la barre d'outils de débogage Web: une barre qui affiche une grande quantité d'informations de débogage au bas de la page pendant le développement.

Pour utiliser la barre d'outils de débogage Web, il suffit de l'installer:

  composer require --dev profiler

Dès que cela se termine, actualisez votre page. Vous devriez voir une barre noire au bas de la page. Vous en apprendrez plus sur toutes les informations qu'il contient, mais n'hésitez pas à expérimenter: survolez et cliquez sur les différentes icônes pour obtenir des informations sur le routage, les performances, la journalisation, etc.

Le paquet profiler est également un excellent exemple de Flex! Après avoir téléchargé le paquet, la recette a créé plusieurs fichiers de configuration pour que la barre d'outils de débogage Web fonctionne instantanément.

Rendu d'un template

Si vous renvoyez du code HTML à partir de votre contrôleur, vous souhaiterez probablement afficher un template. Heureusement, Symfony est livré avec Twig : un langage de template simple, puissant et amusant.

D'abord, installez Twig:

  composer require twig

Deuxièmement, assurez-vous que LuckyController étend la classe  Controller  de base de Symfony:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// src/Controller/LuckyController.php

// ...
+ use Symfony\Bundle\FrameworkBundle\Controller\Controller;

- class LuckyController
+ class LuckyController extends Controller
{
    // ...
}

Maintenant, utilisez la fonction render() pour rendre un template. Passez-lui une variable number afin de pouvoir l'utiliser dans Twig:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
 // src/Controller/LuckyController.php

// ...
class LuckyController extends Controller
{
    /**
     * @Route("/lucky/number")
     */
    public function number()
    {
        $number = mt_rand (0 , 100);

        return $this -> render ( 'lucky/number.html.twig' , array (
            'number' => $number ,
        ));
    }
}

Les fichiers modèles se trouvent dans le répertoire templates/ , créé automatiquement pour vous lorsque vous avez installé Twig. Créez un nouveau répertoire templates/lucky avec un nouveau fichier number.html.twig à l'intérieur:

1
2
3
 {# templates/lucky/number.html.twig #} 

<h1>Your lucky number is  {{ number }} </h1>

La syntaxe {{ number }} est utilisée pour imprimer les variables dans Twig. Rafraîchissez votre navigateur pour obtenir votre nouveau numéro chanceux!

Vous pouvez maintenant vous demander où la barre d'outils de débogage Web a disparu: c'est parce qu'il n'y a pas de </body> dans le modèle actuel. Vous pouvez ajouter vous-même l'élément body ou étendre base.html.twig , qui contient tous les éléments HTML par défaut.

Dans l'article Création et utilisation de templates , vous apprendrez tout sur Twig: comment faire une boucle, afficher d'autres templates et exploiter son puissant système d'héritage de mise en page.

Vérification de la structure du projet

Bonne nouvelle! Vous avez déjà travaillé dans les répertoires les plus importants de votre projet:

config/

Contient ... la configuration bien sûr! Vous allez configurer les itinéraires, les services et les packages.

src/

Tout votre code PHP vit ici.

templates/

Tous vos modèles Twig vivent ici.

La plupart du temps, vous travaillerez dans src/ , templates/ ou config/ . Pendant que vous continuez à lire, vous apprendrez ce qui peut être fait à l'intérieur de chacun d'eux.

Alors qu'en est-il des autres répertoires du projet?

bin/

Le fameux fichier bin/console trouve ici (et d'autres fichiers exécutables moins importants).

var/

C'est là que sont stockés les fichiers créés automatiquement, comme les fichiers cache ( var/cache/ ) et les logs ( var/log/ ).

vendor/

Les bibliothèques tierces (c.-à-d. «Vendor») vivent ici! Ceux-ci sont téléchargés via le gestionnaire de paquets Composer .

public/

Ceci est la racine du document pour votre projet: vous mettez tous les fichiers accessibles au public ici.

Et lorsque vous installez de nouveaux paquets, de nouveaux répertoires seront créés automatiquement en cas de besoin.

Et après?

Félicitations! Vous commencez déjà à maîtriser Symfony et découvrez une toute nouvelle façon de créer de belles applications fonctionnelles, rapides et maintenables.

Ok, il est temps de finir de maîtriser les fondamentaux en lisant ces articles:

Ensuite, découvrez d'autres sujets importants tels que le conteneur de service , le système de formulaires , l'utilisation de Doctrine (si vous avez besoin d'interroger une base de données) et plus encore!

Aller plus loin avec les principes de base HTTP et Framework