# Documentation (Symfony 4 ) ## 1. Installation ### a) Installation de composer

# Documentation (Symfony 4 ) ## 1. Installation ### a) Installation de composer * La première étape pour démarrer un projet Symfony 4 est d’installer le Composer globalement dans votre système si vous n’avez pas dans votre pc et assurer que vous utilisez la version **7.1.3** du **PHP** minimum.Installer **composer** via : `https://symfony.com/doc/4.0/setup/composer.html` ### b) Créer votre projet * Après l’installation de composer, on n'a pas besoin que de taper la commande ce dessous et composer va nous créer notre première projet nommé **my-project** : ~~~ composer create-project symfony/website-skeleton my-project ~~~ > Le squelette de site Web est optimisé pour les applications Web traditionnelles(contrôler/modèle/template). Si vous créez des **microservices**, des applications **console** ou des **API**, envisagez d'utiliser le projet **skeleton**(just le contrôler) beaucoup plus simple: ~~~ composer create-project symfony/skeleton my-project ~~~ ### c) Installation du server web interne de Symfony * Maintenant le projet est prêt, on accède au dossier de projet **my-project** et nous installons le serveur web interne de symfony : ~~~ cd my-project composer require symfony/web-server-bundle --dev ~~~ *NB : Vous pouvez utiliser le server interne de symfony, il ne pas obligatoire d’utiliser un serverlocale comme `wamp` ou `Nginx`.* * Le moyen le plus simple consiste à installer la recette Apache en exécutant la commande suivante pour exécuter le projet sous wamp : ~~~ composer config extra.symfony.allow-contrib true composer req symfony/apache-pack ~~~ * NB:Un fichier **.htaccess** sera créé dans votre projet sous le dossier public qui contient les règles de réécriture et vous pouvez utiliser **wamp ** ou lieu de serveur web interne de symfony. ### d) Démarrer le projet * Tout est prêt à démarrer notre projet, il suffit d’exécuter le serveur symfony ~~~ php bin/console server:run ~~~ ### e) Stoker votre projet * Pour stocker votre projet dans les services telque **GitHub**, **GitLab** ou **Bitbucket**, Initiez un nouveau référentiel avec Git et vous êtes prêt : ~~~ git init git add . git commit -m "Initial commit" ~~~ ### f) Vérification des vulnérabilités de sécurité * Symfony fournit un utilitaire appelé **" Security Checker "** pour vérifier si les dépendances de votre projet contiennent une vulnérabilité de sécurité connue. Exécutez cette commande pour l'installer dans votre application: ~~~ cd my-project/ composer require sensiolabs/security-checker --dev ~~~ `NB : --dev : juste pour le projet en développement` ### g) Accès au projet * Le projet est accessible via http://127.0.0.1:8000 * Pour quitter du projet taper **ctrl+c** ## Conclusion : > Par défaut le projet installé est un **micro-framework** avec très peu des dépendances, ces dessous les dépendances installé lors de l'installation: > • **PHP 7**: C’est la toute dernière version du langage, elle vient avec des nouveautés comme le nouvel opérateur <=>, le spaceship operator et bien d’autres. > • **Flex**: Un plugin composer qui vous permet de crafter vos applications plus simplement en vous aidant à gérer vos dépendances. > • **Console**: La console > • **Framework-bundle**: le coeur du framework Symfony > • **lts**: pour le support des composants Symfony et yaml pour les configurations ## 2. Création du première page * Pour crée une page dans votre projet, il est procédé en deux étapes: ### a) Créer une route URL pour votre page * La création de routing dans symfony 4 , il est possible dans plusieurs manière (plusieurs language **PHP**, **YAML** , **XML** or **Annotations** ) i. **Annotations :** * Si vous pouvez utiliser l’annotation dans votre projet, il vous suffit d’exécuter cette commande pour l'activer dans votre projet: ~~~ composer require annotations ~~~ * Après ajouter la route en dessus de l’action dans le Contrôler spécifique comme dans cet exemple : ~~~ /** * @Route("/blog", name="blog_list") */ public function list() { // ... } ~~~ NB: L'annotation est écrite avec double code **"** non simple code **'** **Exp:** ~~~ /** * @Route('/') --> ne marche pas avec simple code */ ~~~ * Cependant, pour travailler, nous devons mettre **"** au lieu de **'** ~~~ /** * @Route("/") */ ~~~ ii.**Yaml** * Créer une page **config/routes.yaml** et ajouter vos routes. ~~~ # config/routes.yaml blog_list: path: /blog controller: App\Controller\BlogController::list ~~~ *NB : pour la langage YAML, il est très nécessaire de bien vérifier vos espacement.* iii.**PHP** * Créer une page **config/routes.php** et ajouter vos routes. ~~~ // config/routes.php use Symfony\Component\Routing\RouteCollection; use Symfony\Component\Routing\Route; use App\Controller\BlogController; $routes = new RouteCollection(); $routes->add('blog_list', new Route('/blog', array('_controller' => [BlogController::class, 'list'] ))); ~~~ iiii.**XML** * Créer une page **config/routes.xml** et ajouter vos routes. ~~~ <!-- config/routes.xml --> <?xml version="1.0" encoding="UTF-8" ?> <routes xmlns="http://symfony.com/schema/routing" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd"> <route id="blog_list" controller="App\Controller\BlogController::list" path="/blog" > <!-- settings --> </route> </routes> ~~~ ## b)Créer un Contrôler et l’action de page * Pour créer votre **Contrôler**, il y a deux méthodes pour le gérer : **i. A partir de Console** : ~~~ composer require make:controller ~~~ Et **Flex** (composer plugin qui gère la configuration de dépendent à installer ) va créer le Contrôler et leur dossier view qui situé dans le dossier templates. **MakerBundle :**est le moyen le plus rapide de générer le code le plus courant dont vous aurez besoin dans une application Symfony: commandes, contrôleurs, classes de formulaire, abonnés aux événements et plus encore! Pour l'utiliser , il faut l’Intègre dans l'application: ~~~ composer require symfony/maker-bundle --dev ~~~ **Exp :** ~~~ make:auth // Crée un authentificateur Garde vide make:command // Crée une nouvelle classe de commande de la console make:controller // Crée de nouveau controller make:entity // Crée de nouveau class Model (Doctrine entity class) make:form // Crée de nouveau class form make:functional-test // Crée une nouvelle classe de test fonctionnelle make:serializer:encoder // Crée une nouvelle classe codeur sérialiseur make:subscriber // Crée une nouvelle classe d'abonné événement make:twig-extension // Crée une nouvelle classe d'extension Twig make:unit-test // Crée une nouvelle classe de test unitaire make:validator // Crée une nouvelle validateur et la classe contrainte make:voter // Crée une nouvelle classe(voter) de sécurité ~~~ **ii. Manuellement** : Créer un contrôler dans le dossier **src/Controller**, le nom de contrôler doit être concaténer avec le mot **Controller** à la fin `Exp` : vous voulez créer contrôler blog, le nom sera **Blog**Controller ~~~ <?php // src/Controller/BlogController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; class BlogController { public function list() { return $this->render('Blog/list.html.twig', [ // La méthode **render()** rend une template et place ce contenu dans un objet Response (Template Blog/list.html.twig situé dans le dossier /templates) 'controller_name' => 'BlogController', ]); } } ~~~ * Votre première page est accessible via le lien http://127.0.0.1:8000/blog ou http://localhost:8000/blog ## 3.Base de données et ORM Doctrine(Object relationnelle mapping) * Doctrine assure le lien entre le projet et la base de données et elle constitue de trois principale parti : - **Entity :** **table** / Classe de modèle situé **src/Entity/**. - **Manager :** Gère la **manipulation** de données (ajout, mise à jour et suppresion) - **Repository :** permet de faire la **selection** ### a) Installation * Nous installons le support Doctrine via le pack **ORM**, ainsi que le **MakerBundle**, qui vous aidera à générer du code si vous ne l’intégrez pas : ~~~ composer require symfony/orm-pack composer require symfony/maker-bundle --dev ~~~ ### b) Configuration * Les informations de connexion à la base de données sont stockées sous la forme d'une variable d'environnement appelée **DATABASE_URL**. Pour le développement, vous pouvez trouver et personnaliser ceci dans le fichier **.env**: ~~~ # .env # personnaliser cette ligne! DATABASE_URL="mysql://db_user:db_password@127.0.0.1:3306/db_name" # pour utiliser sqlite: # DATABASE_URL="sqlite:///%kernel.project_dir%/var/app.db" # pour utiliser mysql: # DATABASE_URL="mysql://root:@127.0.0.1:3306/blog" ~~~ * db_user: nom d'utilisateur(log phpmyadmin) * db_password: mot de base(mot de passe phpmyadmin) * db_name: nom de base de données Maintenant vos paramètres de connexion sont configurés, **Doctrine** peut créer la base de données **db_name** pour vous: ~~~ php bin/console doctrine:database:create ~~~ c) Création **classe** du modèle (table) Symfony vous offre la possibilitée de crée une table on utilisons la commande **make: entity** pour créer le classe du cette table et tous les champs dont vous avez besoin. La commande vous posera quelques questions tel que le *nom*, *type* et le *longueur* de chaque nouveau champ: ~~~ php bin/console make:entity Class name of the entity to create or update: > Product to stop adding fields): > name Field type (enter ? to see all types) [string]: > string Field length [255]: > 255 Can this field be null in the database (nullable) (yes/no) [no]: > no to stop adding fields): > price Field type (enter ? to see all types) [string]: > integer Can this field be null in the database (nullable) (yes/no) [no]: > no to stop adding fields): > (press enter again to finish) ~~~ * Une fichier sera crée dans src/Entity/Nom_de_classe.php(Product.php) qui contient tous les champs(propriète) de table avec deux action **getChamp()** et **setChamp()** pour chaqu'un, maintenant vous pourrez enregistrer et interroger des objets de classe (Product comme dans l'exemple ce dessus) dans une table de votre base de données. ~~~ // src/Entity/Product.php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity(repositoryClass="App\Repository\ProductRepository") */ class Product { /** * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer") */ private $id; /** * @ORM\Column(type="string", length=255) */ private $name; /** * @ORM\Column(type="integer") */ private $price; public function getId() { return $this->id; } uploads/Ingenierie_Lourd/ documentation-symfony-4-1 1 .pdf

  • 20
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager