Symfony Best Practices

4 062 vues

Publié le

Symfony Best Practices présenté par Wanadev (en français), par Baptiste Donaux.

Publié dans : Technologie
0 commentaire
8 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
4 062
Sur SlideShare
0
Issues des intégrations
0
Intégrations
1 780
Actions
Partages
0
Téléchargements
127
Commentaires
0
J’aime
8
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Symfony Best Practices

  1. 1. Le guide du code propre
  2. 2. Hello World ● Wanadev, créé en 2009 ● Basé à Lyon ● Prestation Symfony2 ● WebGL power
  3. 3. ● Baptiste Donaux, développeur Symfony ● Twitter @baptistedonaux ● Gmail baptiste.donaux@gmail.com Hello World
  4. 4. Best Practices Le Best Practices, qu'est-ce que c'est ? ● 31 conseils issus de la communauté ● Destiné à tous les développeurs (initiés ou non) ● Un document en perpétuelle évolution
  5. 5. Best Practices Le Best Practices, qu'est-ce que ce n'est pas ? ● Un tutoriel ● Une checklist à valider pour déployer son application
  6. 6. Best Practices Il a pour but de conseiller et de guider les développeurs, de manière à uniformiser le code.
  7. 7. Sommaire ● Créer un projet ● Configurer un projet ● Organiser votre application ● Les contrôleurs ● Les templates ● Les formulaires ● Internationalisation ● Sécurité ● Assets ● Tests
  8. 8. Partie 1 Créer un projet
  9. 9. Créer un projet ● Toujours utiliser Composer
  10. 10. Créer un projet ● Toujours utiliser Composer ● Résolution des dépendances automatiques
  11. 11. Créer un projet ● Toujours utiliser Composer ● Résolution des dépendances automatiques ● Installation automatique des assets
  12. 12. Créer un projet ● Toujours utiliser Composer ● Résolution des dépendances automatique ● Installation automatique des assets Packagist.org est la base de données de Composer
  13. 13. Créer un projet Structurer notre application app/cache/ stocke le cache de l'application app/config/ stocke les configurations app/logs/ stocke les logs app/Resources/ stocke les templates ainsi que les traductions src/AppBundle/ stocke le code métier vendor/ contient les dépendances gérées par Composer web/ contient les fichiers exposés ainsi que les assets
  14. 14. Créer un projet Un bundle doit être standalone. $ php app/console generate:bundle Création d'un unique bundle AppBundle par application logique.
  15. 15. Créer un projet Un bundle doit être standalone. $ php app/console generate:bundle On y reviendra plus tard… Création d'un unique bundle AppBundle par application logique.
  16. 16. Partie 2 Configurer un projet
  17. 17. Configurer un projet ● Définition des variables dynamiques dans parameters.yml
  18. 18. Configurer un projet ● Définition des variables dynamiques dans parameters.yml Non versionné
  19. 19. Configurer un projet ● Définition des variables dynamiques dans parameters.yml ● incenteev/composer-parameter-handler Permet de générer automatiquement le parameters.yml à partir du parameters.yml.dist Non versionné
  20. 20. Configurer un projet ● Définition des variables dynamiques dans parameters.yml ● incenteev/composer-parameter-handler Permet de générer automatiquement le parameters.yml à partir du parameters.yml.dist Non versionné Versionné
  21. 21. Configurer un projet ● Définition des variables statiques dans app/config/config.yml ● Pour les variables statiques valables pour un environnement app/config/config_{env_name}.yml Exemple : – config_dev.yml – config_prod.yml
  22. 22. Configurer un projet Comment savoir si mes variables sont dynamiques ou statiques ? Une variable est constante pour les variables qui changent peu.
  23. 23. Configurer un projet La déclaration de service se fait dans des fichiers dédiés. JAMAIS EN DUR ! Exemple : ● *Extension charge les fichiers .yml ● Les *.yml chargés, déclarent des services
  24. 24. Partie 3 Organiser votre application
  25. 25. Organiser votre application Cela ne nous empêche pas d'organiser notre code ! Création d'un unique bundle AppBundle par application logique.
  26. 26. Organiser votre application Cela ne nous empêche pas d'organiser notre code ! Création d'un unique bundle AppBundle par application logique.
  27. 27. Organiser votre application Cela ne nous empêche pas d'organiser notre code ! Création d'un unique bundle AppBundle par application logique. Recommandé Plus simple
  28. 28. Organiser votre application Cela ne nous empêche pas d'organiser notre code ! Création d'un unique bundle AppBundle par application logique. Peut être déclaré comme service
  29. 29. Organiser votre application Vous pouvez aussi faire ça ! Création d'un unique bundle AppBundle par application logique.
  30. 30. Organiser votre application Vous pouvez aussi faire ça ! Création d'un unique bundle AppBundle par application logique. Et c'est conseillé par Sensio !
  31. 31. Organiser votre application Les autres recommandations - Service ● Utilisation du format YAML XML très répandu mais plus verbeux
  32. 32. Organiser votre application Les autres recommendations - Service ● Utilisation du format YAML XML très répandu mais plus verbeux ● Ne pas définir les classes de nos services dans des variables
  33. 33. Organiser votre application Les autres recommandations – ORM ● Stocker les entités dans src/Namespace/MyBundle/Entity
  34. 34. Organiser votre application Les autres recommandations – ORM ● Stocker les entités dans src/Namespace/MyBundle/Entity ● Utiliser les annotations sur les entités Tous les formats ont la même performance, c'est donc une histoire de préférences
  35. 35. Organiser votre application Les autres recommendations – ORM ● Stocker les entités dans src/Namespace/MyBundle/Entity ● Utiliser les annotations sur les entités Tous les formats ont la même performance, c'est donc une histoire de préférences ● Utiliser des Fixtures
  36. 36. Organiser votre application Coding standards Symfony respecte le PSR-1 et le PSR-2. ● PSR-1 : Basic Coding Standard ● PSR-2 : Coding Style Guide Respecter le PSR-1 et le PSR-2 permet de facilement relire le code d'un collègue.
  37. 37. Organiser votre application Coding standards Symfony respecte le PSR-1 et le PSR-2. ● PSR-1 : Basic Coding Standard ● PSR-2 : Coding Style Guide Respecter le PSR-1 et le PSR-2 permet de facilement relire le code d'un collègue. Proposing a Standards Recommendation
  38. 38. Partie 4 Les contrôleurs
  39. 39. Les contrôleurs ● Les contrôleurs doivent être réalisés en respectant la règle « 5-10-20 »
  40. 40. Les contrôleurs ● Les contrôleurs doivent être réalisés en respectant la règle « 5-10-20 » – 5 variables maximum par méthode – 10 méthodes maximum par contrôleur – 20 lignes maximum par méthode
  41. 41. Les contrôleurs ● Les contrôleurs doivent être réalisés en respectant la règle « 5-10-20 » – 5 variables maximum par méthode – 10 méthodes maximum par contrôleur – 20 lignes maximum par méthodes Une méthode est une agrégation d'appel à du code métier.
  42. 42. Les contrôleurs ● Ils doivent hériter du contrôleur de base du FrameworkBundle (Sensio). Utilisation du container
  43. 43. Les contrôleurs ● Ils doivent hériter du contrôleur de base du FrameworkBundle (Sensio). Utilisation du container ● Utilisation des annotations recommandée YAML, XML et PHP fonctionnent de la même manière.
  44. 44. Les contrôleurs ● Template Il est déconseillé d'utiliser l'annotation @Template
  45. 45. Les contrôleurs ● Template Il est déconseillé d'utiliser l'annotation @Template ● ParamConverter Conseillé pour les cas simples
  46. 46. Les contrôleurs ● Template Il est déconseillé d'utiliser l'annotation @Template ● ParamConverter Conseillé pour les cas simples ● Routing (hors Best Pratices) Utilisation des requirements pour rendre plus spécifique les routes
  47. 47. Partie 5 Les templates
  48. 48. Les templates ● Utilisation de Twig – Utilisé par de nombreux développeurs PHP – Gestion avancée des templates comme l'héritage – Support garanti jusqu'à Symfony 3 – Communauté très active (intégration par Drupal)
  49. 49. Les templates ● Utilisation de Twig ● Stocker les templates globaux dans app/Resources/views
  50. 50. Les templates ● Utilisation de Twig ● Stocker les templates globaux dans app/Resources/views ● Utiliser des extensions Twig pour limiter le code métier dans les templates
  51. 51. Partie 6 Les forms
  52. 52. Les forms ● Définir des forms pour chaque entité Intégration complète dans Symfony
  53. 53. Les forms ● Déclaration d'un form comme service Jacques a dit : « Vous pouvez aussi enregistrer vos formulaires comme un service… »
  54. 54. Les forms ● Déclaration d'un form comme service Jacques a dit : « Vous pouvez aussi enregistrer vos formulaires comme un service… » « … Mais ce n'est pas conseillé… »
  55. 55. Les forms ● Possibilité d'ajout de bouton directement depuis le form, mais pas conseillé
  56. 56. Les forms ● Possibilité d'ajout de bouton directement depuis le form, mais pas conseillé ● Les méthodes Twig form() et form_start() ne doivent pas être utilisées
  57. 57. Partie 7 Internationalisation
  58. 58. Internationalisation ● Multiples choix de format – PHP – Qt – .po – .mo – JSON – CSV – INI – XLIFF
  59. 59. Internationalisation ● Multiples choix de format – PHP – Qt – .po – .mo – JSON – CSV – INI – XLIFF Conseillé par Sensio
  60. 60. Internationalisation ● Multiples choix de format – PHP – Qt – .po – .mo – JSON – CSV – INI – XLIFF Conseillé par Sensio On aime bien Qt et son outil
  61. 61. Internationalisation ● On stocke tous nos traductions dans app/Resources/translations ● On utilise des clés pour traduire notre contenu
  62. 62. Partie 8 Sécurité
  63. 63. Sécurité ● L'utilisation de FOSUserBundle n'est plus nécessaire ! – Kit de survie : Gestion utilisateur sans FOSUserBundle – Implémenter un UserProvider – Implémenter son propre SecurityController ● Mettre en place une unique « entrée firewall » ● Mettre en place un encodage spécifique – bcrypt (en natif à partir de PHP 5.5) ● Utiliser la clé anonymous
  64. 64. Sécurité ● Gestion des autorisations – Protéger les URL globales via le security.yml
  65. 65. Sécurité ● Gestion des autorisations – Protéger les URL globales via le security.yml – Utiliser les annotations @Security
  66. 66. Sécurité ● Gestion des autorisations – Protéger les URL globales via le security.yml – Utiliser les annotations @Security – On évite d'utiliser @Secure
  67. 67. Sécurité ● Gestion des autorisations – Protéger les URL globales via le security.yml – Utiliser les annotations @Security – On évite d'utiliser @Secure – Utiliser le service security.context pour vérifier les droits
  68. 68. Sécurité ● Gestion des autorisations – Protéger les URL globales via le security.yml – Utiliser les annotations @Security – On évite d'utiliser @Secure – Utiliser le service security.context pour vérifier les droits – Définir des voters
  69. 69. Partie 9 Assets
  70. 70. Assets ● Peu de choses à dire. Il gère les ressources (CSS, JavaScript, images). – Concaténation des ressources – Minification – Compilation des Less, Sass, TypeScript… – Compression des images
  71. 71. Assets ● Peu de choses à dire. Il gère les ressources (CSS, JavaScript, images). – Concaténation des ressources – Minification – Compilation des Less, Sass, TypeScript… – Compression des images ● Assetic géré par défaut. Possibilité d'utiliser d'autres outils tels que GruntJS.
  72. 72. Partie 10 Tests
  73. 73. Tests ● Tests unitaires Ils seront utilisés par les tests fonctionnels ● Tests fonctionnels – Créer de bons scénarios est essentiel – Tester le code retour d'une page – Privilégier l'utilisation d'URL hardcodée plutôt que générée
  74. 74. Tests ● Les outils – PHPUnit et PhpSpec pour le PHP – Mink (librairie de PHPUnit) et CasperJS pour le JavaScript – Faker et Alice pour générer des jeux de données
  75. 75. The end ! Le Best Practices changent régulièrement tout comme Symfony. Tenez-vous au courant ! Slideshare extrait de l'article de Baptiste Donaux sur les Bonnes Pratiques Symfony. Remerciement tout particulier pour leur relecture à Anthony Colas @anthonycolas, Manuel Klein @manukleins et Yannick Comte @cyannick.

×