La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Symfony2, les grandes lignes

Présentations similaires


Présentation au sujet: "Symfony2, les grandes lignes"— Transcription de la présentation:

1 Symfony2, les grandes lignes
Jérôme CUTRONA 03:05:26 Programmation Web

2 Introduction 03:05:26 Programmation Web

3 Symfony Lancement de symfony-project.com en 2005
Framework Web MVC en PHP Créé par Sensio, agence Web française Utilise d’autres projets PHP : Doctrine, Propel, PDO, PHPUnit, Twig, … Utilisé par d’autres projets : Drupal, phpBB, Laravel, … Utilisé par de nombreux sites à travers le monde Philosophie : ne pas réinventer la roue 03:05:26 Programmation Web

4 03:05:26 Programmation Web

5 Symfony2 Composants PHP réutilisables Framework (cadre de travail) PHP
Base pour l’architecture d’une application Web Ne plus réinventer la roue : routes, formulaires… Code : conventions et organisation Architecture MVC Composants testés et éprouvés Communauté de développeurs Documentation 03:05:26 Programmation Web

6 Composer, Dependency Manager for PHP
03:05:26 Programmation Web

7 Composer https://getcomposer.org/
Outil de gestion des dépendances de bibliothèques Écrit en PHP, utilisé en ligne de commande Comfiguration des bibliothèques et de leurs dépendances dans composer.js Installation : curl -sS | php ou php -r "readfile(' | php 03:05:26 Programmation Web

8 Installer Symfony2 avec Composer
Composer est une archive PHP, un fichier .phar (PHP Archive) Si PHP est accessible en ligne de commande, Composer peut être exécuté comme une commande : ./composer.phar Pour installer Symfony2 : composer create-project symfony/framework-standard-edition path/ "2.5.*" 03:05:26 Programmation Web

9 Installer Symfony2 avec Composer
composer create-project symfony/framework-standard-edition Symfony "2.5.*" Installing symfony/framework-standard-edition (v2.5.5) - Installing symfony/framework-standard-edition (v2.5.5) Downloading: 100% Created project in Symfony2 Loading composer repositories with package information Installing dependencies (including require-dev) - Installing jdorn/sql-formatter (v1.2.17) - Installing psr/log (1.0.0) - Installing twig/twig (v1.16.1) - Installing doctrine/lexer (v1.0)   … 03:05:26 Programmation Web

10 Installer Symfony2 avec Composer
Would you like to install Acme demo bundle? [y/N] n Creating the "app/config/parameters.yml" file Some parameters are missing. Please provide them. database_driver (pdo_mysql): database_host ( ): mysql database_port (null): database_name (symfony): cutron01 database_user (root): cutron01 database_password (null): pass mailer_transport (smtp): mailer_host ( ): mailer_user (null): mailer_password (null): locale (en): fr secret (ThisTokenIsNotSoSecretChangeIt): debug_toolbar (true): debug_redirects (false): use_assetic_controller (true): Clearing the cache for the dev environment with debug true Installing assets as hard copies Installing assets for Symfony\Bundle\FrameworkBundle into web/bundles/framework Installing assets for Sensio\Bundle\DistributionBundle into web/bundles/sensiodistribution 03:05:26 Programmation Web

11 Architecture des fichiers
03:05:26 Programmation Web

12 Architecture des répertoires
app L’application Web sans son code source src Les sources de l’application Web vendor Bibliothèques utilisées par l’application Web bin Fichiers binaires des bibliothèques utilisées par l’application Web web Ressources statiques et contrôleur frontal 03:05:26 Programmation Web

13 CONTRÔLEUR FRONTAL 03:05:26 Programmation Web

14 Contrôleur frontal ? Jusqu’à présent, vous utilisiez de multiples scripts PHP : saisir_donnees.php valider_donnees.php L’architecture de Symfony2 n’utilise qu’un seul script, le contrôleur frontal Tous les contenus dynamiques PHP seront produits par ce script C’est le point d’entrée unique de l’application 03:05:26 Programmation Web

15 En réalité, plusieurs contrôleurs frontaux
Environnement de production : app.php Application telle qu’elle sera visible par les visiteurs Rapidité nécessaire Tests de cache peu poussés Environnement de développement : app_dev.php Application pour les développeurs Environnement de débogage complet Plus lent que la version de production 03:05:26 Programmation Web

16 Environnement de production
03:05:26 Programmation Web

17 Environnement de développement
03:05:26 Programmation Web

18 Le profiler en mode développement
03:05:26 Programmation Web

19 Flux applicatif 03:05:26 Programmation Web

20 Flux applicatif de Symfony2
Toutes les requêtes sont interceptées par le contrôleur frontal Le noyau trouve le contrôleur via le système de routage et exécute l’action adéquate Une réponse est produite 03:05:26 Programmation Web

21 Architecture MVC 03:05:26 Programmation Web

22 Architecture MVC Modèle Vue Contrôleur Doctrine2
Accès/persistance des données Vue Twig Présentation des données Contrôleur Symfony Logique de l’application Utilise le modèle Prépare les données pour la vue 03:05:26 Programmation Web

23 Les bundles 03:05:26 Programmation Web

24 Bundle (paquet) Bundle = brique de l’application
Gestion des utilisateurs Boutique Administration, … Ensemble structuré de fichiers permettant la gestion d’une partie de l’application Bundles de la communauté Symfony2 FOSUserBundle DoctrineFixturesBundle WebProfilerExtraBundle, … 03:05:26 Programmation Web

25 Créer un bundle Utilisation de la console app/console
Symfony version app/dev/debug Usage: [options] command [arguments] app/console generate:bundle Welcome to the Symfony2 bundle generator Each bundle is hosted under a namespace (like vAcme/Bundle/BlogBundle). The namespace should begin with a "vendor" name like your company name, your project name, or your client name, followed by one or more optional category sub-namespaces, and it should end with the bundle name itself (which must have Bundle as a suffix). Use / instead of \ for the namespace delimiter to avoid any problem. 03:05:26 Programmation Web

26 Créer un bundle Bundle namespace: cutrona\TestBundle In your code, a bundle is often referenced by its name. It can be the concatenation of all namespace parts but it's really up to you to come up with a unique name (a good practice is to start with the vendor name). Based on the namespace, we suggest cutronaTestBundle. Bundle name [cutronaTestBundle]: The bundle can be generated anywhere. The suggested default directory uses the standard conventions. Target directory [/home/Enseignants/cutron01/public_html/Symfony/src]: Determine the format to use for the generated configuration. Configuration format (yml, xml, php, or annotation): yml To help you get started faster, the command can generate some code snippets for you. Do you want to generate the whole directory structure [no]? yes 03:05:26 Programmation Web

27 Créer un bundle Summary before generation You are going to generate a "cutrona\TestBundle\cutronaTestBundle" bundle in "/home/Enseignants/cutron01/public_html/Symfony/src/" using the "yml" format. Do you confirm generation [yes]? Bundle generation Generating the bundle code: OK Checking that the bundle is autoloaded: OK Confirm automatic update of your Kernel [yes]? Enabling the bundle inside the Kernel: OK Confirm automatic update of the Routing [yes]? Importing the bundle routing resource: OK You can now start using the generated code! 03:05:26 Programmation Web

28 contrôleurs (controller)
Créer un bundle vendeur (vendor) paquet (bundle) contrôleurs (controller) configuration vues (view) 03:05:26 Programmation Web

29 Les fichiers de configuration
03:05:26 Programmation Web

30 Les fichiers de configuration
De nombreux éléments de Symfony vont devoir être configurés Le but est de séparer le code de l’application et sa configuration La configuration consiste en un ensemble de données structurées Il existe 3 formats possibles : XML, namespace et schémas, visuellement lourd PHP, namespace, instanciation, peu lisible YAML, simple et efficace ! Nous retiendrons le format YAML pour les TP 03:05:26 Programmation Web

31 Le format YAML 03:05:26 Programmation Web

32 YAML, les grandes lignes
YAML: YAML Ain't Markup Language What It Is: YAML is a human friendly data serialization standard for all programming languages. YAML est un standard de sérialisation de données compréhensible facilement par l'humain pour tous les langages de programmation Fichiers texte .yml facilement lisibles et modifiables 03:05:26 Programmation Web

33 YAML, les types Chaîne de caractères Une chaîne de caractères en YAML 'Entourée par des guillemets simples en YAML' Nombres x e+42 .inf Nuls null ~ Booléens true false Dates t12:12: : 03:05:26 Programmation Web

34 YAML, les types Séquences (- suivi de espace) - XML - YAML
Séquences (entre crochets) [XML, YAML] Couple clé/valeur (: suivi de espace(s)) PHP: Liste (indentation espaces, jamais tabulations) xml: pas bon yaml: bon Liste (entre accolades) {xml: pas bon, yaml: bon} 03:05:26 Programmation Web

35 Vérifier vos fichiers YAML
Utilisation de la console Un fichier particulier app/console yaml:lint src/Cutrona/TestBundle/Resources/config/routing.yaml Un répertoire app/console yaml:lint src/Cutrona/TestBundle/Resources/config Un bundle complet app/console 03:05:26 Programmation Web

36 Le routage 03:05:26 Programmation Web

37 Le routage Faire correspondre une URL et une action d’un contrôleur
Configuration du routage général de l’application dans app/config/routing.yml cutrona_test: resource: prefix: / La configuration du routage d’un bundle est faite dans ce bundle Import possible des routes d’un bundle dans la configuration générale 03:05:26 Programmation Web

38 Le routage Routes dans un bundle : src/Cutrona/TestBundle/Resources/config/routing.yml cutrona_test_homepage: path: /hello/{name} defaults: { _controller: CutronaTestBundle:Default:index } cutrona_test_helloworld: path: / defaults: { _controller: CutronaTestBundle:Default:helloWorld } Chaque route est nommée Correspondance entre une URL et un contrôleur Testées dans l’ordre 03:05:26 Programmation Web

39 Le routage avec paramètres
Éléments entre {} dans l’URL (path: xxx) cutrona_test_homepage: path: /hello/{name} defaults: { _controller: CutronaTestBundle:Default:index } cutrona_test_helloworldT: path: /{times} defaults: { _controller: CutronaTestBundle:Default:helloWorldT } requirements: times: \d+ Chaque route est nommée Correspondance entre une URL et un contrôleur Testées dans l’ordre, la première correspondance est déclenchée 03:05:26 Programmation Web

40 Consultation des routes en console
app/console router:debug --env=dev [router] Current routes Name Method Scheme Host Path _wdt ANY ANY ANY /_wdt/{token} _profiler_home ANY ANY ANY /_profiler/ _profiler_search ANY ANY ANY /_profiler/search _profiler_search_bar ANY ANY ANY /_profiler/search_bar _profiler_purge ANY ANY ANY /_profiler/purge _profiler_info ANY ANY ANY /_profiler/info/{about} _profiler_phpinfo ANY ANY ANY /_profiler/phpinfo _profiler_search_results ANY ANY ANY /_profiler/{token}/search/results _profiler ANY ANY ANY /_profiler/{token} _profiler_router ANY ANY ANY /_profiler/{token}/router _profiler_exception ANY ANY ANY /_profiler/{token}/exception _profiler_exception_css ANY ANY ANY /_profiler/{token}/exception.css _configurator_home ANY ANY ANY /_configurator/ _configurator_step ANY ANY ANY /_configurator/step/{index} _configurator_final ANY ANY ANY /_configurator/final cutrona_test_homepage ANY ANY ANY /hello/{name} cutrona_test_helloworld ANY ANY ANY / cutrona_test_helloworldT ANY ANY ANY /{times} 03:05:26 Programmation Web

41 Consultation du routage avec Profiler
03:05:26 Programmation Web

42 Routes pour produire des URL
Les routes permettent de faire correspondre une URL et une action d’un contrôleur Cette relation est une bijection Le nom de la route permet de produire son URL relative ou absolue Découplage complet permettant de modifier un paramètre sans tout réexaminer/réécrire Sera utilisé en particulier dans les vues Route nommée : URL  action d’un contrôleur Nom d’une route  URL de la route 03:05:26 Programmation Web

43 LES CONTRÔLEURS ET LES ACTIONS
03:05:26 Programmation Web

44 Les contrôleurs Regroupés dans src/Cutrona/TestBundle/Controller/
Leur nom se termine obligatoirement par Controller Exemple DefaultController Héritent de Controller du namespace Symfony\Bundle\FrameworkBundle\Controller\Controller Font partie du namespace Controler du bundle : Cutrona\TestBundle\Controller Contiennent les actions 03:05:26 Programmation Web

45 Les actions Méthodes publiques des contrôleurs
Leur nom se termine obligatoirement par Action Exemple : HelloWorldAction() Reçoivent automatiquement en paramètre les paramètres des routes cutrona_test_helloworldT: path: /{times} defaults: { _controller: CutronaTestBundle:Default:helloWorldT } requirements: times: \d+ public function helloWorldTAction($times) { 03:05:26 Programmation Web

46 Les actions Briques de la logique applicative :
Interagissent avec les données Présentent des données à afficher aux vues Retournent un objet Response du namespace Symfony\Component\HttpFoundation\Response : return new Response('Hello World!'); Peuvent déclencher l’affichage d’une vue : return $this->render( 'CutronaTestBundle:Default:index.html.twig', array('name' => $name)); 03:05:26 Programmation Web

47 Les vues 03:05:26 Programmation Web

48 Les vues Constituent la partie présentation de l’application
Utilisent le moteur de templates (modèles) Twig Reçoivent des données du contrôleur Peuvent utiliser des structures algorithmiques Ne contiennent aucun code PHP Utilisent le pseudo-langage Twig à base de { } Les templates Twig peuvent être hérités ou inclus pour un meilleur découpage Classiquement, 3 niveaux d’héritage : application  section  page 03:05:26 Programmation Web

49 Les vues src/Cutrona/TestBundle/Resources/views/Default/index.html.twig <!doctype html> <html> <head><title>Hello</title></head> <body> Hello {{ name }}! </body> </html> 03:05:26 Programmation Web

50 Twig 03:05:26 Programmation Web

51 Twig, les bases {{ … }} Écrire dans le template, une variable ou le résultat d’une expression <h1>{{ page_title }}</h1> {% … %} Contrôler la logique du template, instructions, états, structures algorithmiques {% for user in users %} * {{ user.name }} {% else %} No users have been found. {% endfor %} {# … #} Commentaires {# page_title : Titre de la page #} 03:05:26 Programmation Web

52 Écrire dans le template
Variables simples <h1>{{ page_title }}</h1> Variables simples filtrées <h1>{{ page_title | upper }}</h1> Fonctions <a href="{{ url('_welcome') }}">Home</a> Attributs d’objets <span>{{ user.name }}</span> Méthode d’instances <span>{{ user.getName() }}</span> 03:05:26 Programmation Web

53 Production d’URL dans le template
cutrona_test_helloworldtimes: path: /{times} defaults: { _controller: CutronaTestBundle:Default:helloWorldTimes } requirements: times: \d+ URL relative <a href="{{ path('cutrona_test_helloworldtimes', {'times': 5}) }}">Hello (5)</a> produit <a href="/Symfony2/web/app_dev.php/5">Hello (5)</a> URL absolue <a href="{{ url('cutrona_test_helloworldtimes', {'times': 5}) }}">Hello (5)</a> produit <a href=" (5)</a> 03:05:26 Programmation Web

54 Vérifier vos templates Twig
Utilisation de la console Un fichier particulier app/console twig:lint src/Cutrona/TestBundle/Resources/views/Default/index.html.twig Un répertoire app/console twig:lint src/Cutrona/TestBundle/Resources/views Un bundle complet app/console 03:05:26 Programmation Web

55 Accès à la base de données : ORM Doctrine2
03:05:26 Programmation Web

56 ORM ORM : Object-Relational Mapping
Couche d’abstraction d’accès aux données Ne plus écrire de requêtes mais des objets Lazy loading (chargement paresseux) Décrire les relations entre objets One-To-One Many-To-One Many-To-Many Many-To-Many avec attributs Gestion personnalisée des accès si nécessaire 03:05:26 Programmation Web

57 ORM : Entités Le mapping (mise en correspondance) entre un objet et une table de la base de données se fait par le biais d’une entité (Entity) L’entité est une classe qui possède des attributs et se situe dans xxxBundle/Entity Des annotations permettent de faire le lien avec la base de données La console permet de générer automatiquement accesseurs (getters) et modificateurs (setters) La console peut générer la table de la base de donnes à partir de l’entité 03:05:26 Programmation Web

58 Entité : un exemple Base de données « morceaux de musique »
namespace Cutrona\TestBundle\Entity ; use Doctrine\ORM\Mapping as ORM ; /** */ class Artist { private $id ; private $name ; 03:05:26 Programmation Web

59 Entité : génération de code
app/console doctrine:generate:entities Cutrona/TestBundle/Entity/Artist Generating entity "Cutrona\TestBundle\Entity\Artist" > backing up Artist.php to Artist.php~ > generating Cutrona\TestBundle\Entity\Artist /** * Set id * integer $id Artist */ public function setId($id) { $this->id = $id; return $this; } /** * Get id * integer */ public function getId() { return $this->id; } 03:05:26 Programmation Web

60 Utilisation de l’entité
Contrôleur <?php namespace Cutrona\TestBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Cutrona\TestBundle\Entity\Artist; class DefaultController extends Controller { public function ArtistAction($id) { $a = $this->getDoctrine() ->getManager()->find('CutronaTestBundle:Artist', $id) ; return $this->render( 'CutronaTestBundle:Default:artist.html.twig', array('artist' => $a)) ; } Vue L'artiste {{ artist.id}} est '{{ artist.name }}' 03:05:26 Programmation Web

61 Génération automatique des entités
doctrine peut effectuer une introspection de la base et produire automatiquement les entités mapping app/console doctrine:mapping:convert yml src/Cutrona/TestBundle/Resources/config/doctrine/metadata/orm --from-database entities app/console doctrine:mapping:import CutronaTestBundle annotation code app/console doctrine:generate:entities CutronaTestBundle 03:05:26 Programmation Web

62 Mise à jour de la base de données
Les modifications des entités peuvent être rendues persistantes dans la base de données persist($entity) demande de persistance flush() synchronisation de la BD public function ArtistUpdateAction($id, $name) { $em = $this->getDoctrine()->getManager() ; $a = $em->find('CutronaTestBundle:Artist', $id) ; $a->setName($name) ; $em->persist($a) ; $em->flush() ; return new Response('Modification effectuée') ; } 03:05:26 Programmation Web

63 Les formulaires 03:05:26 Programmation Web

64 Objectif des formulaires
Un formulaire se construit sur un objet Son objectif est d’hydrater l’objet Hydrater : affecter les attributs de l’objet Construire un formulaire : FormBuilder Ajouter des champs au formulaire, type sémantique : text, , integer, … Sécurisation automatique Contrôler la validité d’un formulaire Exploitation du formulaire dans la vue Twig : {{ form_widget(form) }} 03:05:26 Programmation Web

65 Exemple d’utilisation de formulaire
public function ArtistAction($id) { $request = $this->get('request') ; $em = $this->getDoctrine()->getManager() ; $artist = $em->find('CutronaTestBundle:Artist', $id) ; $formBuilder = $this->createFormBuilder($artist) ; $formBuilder->add('name', 'text', array('required' => true)) ; $form = $formBuilder->getForm() ; if ($request->getMethod() == 'POST') { $form->bind($request) ; if ($form->isValid()) { $em->persist($artist) ; $em->flush() ; return new Response('Modification effectuée') ; } else { return $this->render( 'CutronaTestBundle:Default:artist.html.twig', array('artist' => $artist, 'form' => $form->createView())) ; 03:05:26 Programmation Web

66 Sécurité 03:05:26 Programmation Web

67 Sécurité, principe La sécurité regroupe deux principes :
Authentification (authentication) Droits d’accès (authorization) L’authentification consiste à s’assurer de l’identité d’un utilisateur : formulaire de connexion, authentification HTTP, … Authentification gérée par le firewall Les droits d’accès permettent de contrôler qu’un utilisateur authentifié peut exécuter une action Droits d’accès sont gérés par access control Configuré dans app/config/security.yml 03:05:26 Programmation Web

68 Sécurité, principe 03:05:26 Programmation Web

69 Sécurité, accès illimité
03:05:26 Programmation Web

70 Sécurité, accès non authentifié
03:05:26 Programmation Web

71 Sécurité, accès refusé 03:05:26 Programmation Web

72 Sécurité, accès avec privilèges
03:05:26 Programmation Web


Télécharger ppt "Symfony2, les grandes lignes"

Présentations similaires


Annonces Google