Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ProTips Symfony (mais pas que)

ProTips Symfony (mais pas que)

Présentation pour le sfPot Lyonnais du 2 Octobre 2014 hébergé par Norsys. http://afsy.fr/

Alexandre Balmes

October 02, 2014
Tweet

More Decks by Alexandre Balmes

Other Decks in Programming

Transcript

  1. La Blackroom 2 Alexandre BALMES twitter.com/pockystar github.com/pocky ! Project Manager

    Développeur Futur indépendant Le dev c’est trop ma vie <3 Au programme Système
 Devops sur fond d’industrialisation Code
  2. La Blackroom 3 • Ce qui suit n’est pas trié

    par importance ou par criticité • Pondérez suivant vos projets (temps/argent) • Tout protip est discutable Disclaimer
  3. La Blackroom 5 • Quel OS et pour qui ?

    • Parlons de case-sensitive • Et de ce que vous utilisez pour développer Le système
  4. La Blackroom 6 • Windows : à éviter (sauf si…

    Arrêtez de pensez à Azure svp). • Linux : Oui mais quel distribution ? • OSX : A quel moment ? • Envisager la virtualisation ET Docker : http://geoffrey.io/making-docker- commands.html par Geoffrey Bachelet (@ubermuda) Quel OS et pour qui ?
  5. La Blackroom 7 • Attention à OSX ! • Problèmes

    collatéraux (Adobe…) Parlons de Case-sensitive
  6. La Blackroom 8 • Et de GIT • # git

    config --unset-all core.ignorecase && git config --system core.ignorecase false Parlons de case-sensitive
  7. La Blackroom 9 • Utilisez un IDE. Et de ce

    que vous utilisez pour développer
  8. La Blackroom 10 • Un IDE. Et de ce que

    vous utilisez pour développer
  9. La Blackroom 13 • Il n’existe pas que Netbeans et

    Eclipse Et de ce que vous utilisez pour développer
  10. La Blackroom 14 • PHPStorm est une vraie solution •

    PHPStorm est gratuit pour les étudiants et les porteurs de projets OpenSource • PHPStorm (depuis sa version 8) est capable de communiquer avec un interpréteur PHP en remote (Vagrant h00h00!) Et de ce que vous utilisez pour développer
  11. La Blackroom 15 • Dans une équipe une multitude de

    logiciels pour un même besoin c’est : • Mettre des bâtons dans les roues à l’entraide (raccourcis, navigation dans l’arbo) • Un delta en cas de “panne” matériel. Comment gérer le spare ? Et de ce que vous utilisez pour développer
  12. La Blackroom 16 • Liste de raccourcis (par défaut) :

    http://www.jetbrains.com/phpstorm/ documentation/PhpStorm_ReferenceCard.pdf
 • Plugins pour l’écosystème Symfony : • Behat / PHPUnit / PHPMD / PHPCS / PHP / PHP Remote Interpreter • PHP Advanced autocomplete / PHP Annotations / PHPMetrics / phpspec / Symfony2 Plugin / Symfony2 Clickable View / Twig Support Et de ce que vous utilisez pour développer
  13. La Blackroom 18 • Un peu de Dev • Un

    peu d’Ops • Industrialisation (mais sur la phase amont) DevOps sur fond d’industrialisation
  14. La Blackroom 19 • Se créer sa propre “symfony-standard” •

    https://github.com/black-project/black-standard ! • Utiliser la directory structure 3.0 (et remplacer dès que possible les méthodes qui seront dépréciées en 3.0) • http://stackoverflow.com/questions/23993295/what-is-the-new-symfony-3- directory-structure • https://github.com/symfony/symfony/blob/master/UPGRADE-3.0.md Un peu de dev
  15. La Blackroom 20 • Personnaliser le SensioGeneratorBundle
 app/Resources/SensioGeneratorBundle └── skeleton

    └── bundle ├── Bundle.php.twig ├── Configuration.php.twig └── Extension.php.twig Un peu de dev
  16. La Blackroom 22 • Désigner une personne chargé des PR

    • Utiliser à minima une branche master et des branches feature-* puis hotfix-* Un peu de dev
  17. La Blackroom 23 • Utiliser phpcs avec PSR-2 • Utiliser

    phpmd • Utiliser php-cs-fixer • http://arnolog.net/post/92715936483/use-fabpots-php-cs-fixer-tool-in- phpstorm-in-2-steps par Ronan Guilloux (@arno_u_loginlux) Un peu de dev
  18. La Blackroom 25 • Provisionner la box pour en faire

    une VM • Ansible • Chef • Puppet • Le bon vieux bash ! • Et si vous vous sentez, générer des containers Docker que vous enverrez en production Un peu d’Ops
  19. La Blackroom 26 • Mettre en place un Satis •

    https://getcomposer.org/doc/articles/handling-private-packages-with-satis.md Un peu d’Ops
  20. La Blackroom 27 • Détruire régulièrement vos VM pour vous

    assurer que personne n’a ajouté quelque chose “à la main” sans l’automatiser. Industrialisation
  21. La Blackroom 28 • Utiliser des indicateurs clés de performance

    orienté “dev” • https://gist.github.com/marekkalnik/e1a9cae6d5266450db29 par Marek Kalnik (@marekkalnik) Industrialisation
  22. La Blackroom 31 • Partout, tout le temps. • Ne

    pas oublier les cookbooks. • Mettre le PDF sur votre liseuse : http://symfony.com/pdf/ Symfony_metabook_master.pdf (909 pages actuellement) Lire la doc
  23. La Blackroom 33 Petite aparté WebPage Application Client Person User

    Event Organization PostalAddress Date GeoCoordinates Place OppeningHours Seat Service Comment
  24. La Blackroom 34 • Permet de se projeter et de

    prendre en charge l’historique de votre travail Penser “récurrent”
  25. La Blackroom 36 • Ne jamais faire un namespace (MonProjet|MonClient|MaBoite)/MonBundle

    parce que vous ne connaissez pas l’avenir.
 • Privilégier : • MonProjet/Bundle/MonBundle • MonProjet/(Library|Component)/MaLib • MonProjet/(Bridge|Adapter)/MonAdapter Namespaces
  26. La Blackroom 37 • Même si elles vous paraissent “stupides”,

    les respecter sur vos Bundles. • http://symfony.com/doc/current/contributing/code/conventions.html Convention de nommages
  27. La Blackroom 38 • Créer des libs et les utiliser

    à travers un bundle : • La librairie vous permet de rentrer dans les composants de Symfony • La librairie vous permet d’être cross-framework/cross-cms (FIG standard) • Le bundle vous permet de gérer uniquement la partie Symfony
 
 http://www.slideshare.net/matthiasnoback/the-naked-bundle-symfony-live- london-2014 par Matthias Noback (@matthiasnoback) Avoir une approche orienté lib
  28. La Blackroom 39 • Il existe de la magie la

    dedans • getContainerExtension(); • registerCommands(); • getName(); • getPath(); (mais on passe la dessus) *Bundle.php
  29. La Blackroom 40 • Economisez-vous un potentiel oubli • Passer

    l’alias de l’extension à la Configuration via un constructeur personnalisé DependencyInjection
  30. La Blackroom 41 • Créer un maximum de services pour

    vos éléments “front” • Ajouter de la configuration personnalisable via config.yml/ PrependExtensionInterface() • https://github.com/FriendsOfSymfony/FOSUserBundle Services
  31. La Blackroom 42 • Toujours écrire un Model dont votre

    Entity/Document/… héritera • Mettre vos contraintes dans le Model • Mettre votre mapping ORM/ODM dans votre Entity/Document/… Model (Solution 1)
  32. La Blackroom 43 • Ne faire qu’un Model • Utiliser

    un mapping XML • Signaler à Doctrine le changement via la méthode build() et des CompilerPass ! • http://symfony.com/doc/current/cookbook/doctrine/ mapping_model_classes.html Model (Solution 2)
  33. La Blackroom 44 • Définir l’$id dans l’application finale •

    Définir toutes vos relations/références dans l’application finale ou vos interfaces (attention aux dépendances fortes) • http://symfony.com/fr/doc/current/cookbook/doctrine/ resolve_target_entity.html Model
  34. La Blackroom 45 • Eliminer les éléments “statiques” via l’injection

    • ‘data_class’ • getName() ! • Ajouter une intention/modifier le translation_domain Form\Type
  35. La Blackroom 46 • Jamais de création/traitement de formulaire dans

    le contrôleur • N’oubliez-pas le S de SOLID Form\Handler
  36. La Blackroom 47 • Créer des ChoiceLists au lieu de

    mettre un array dans votre Form\Type • Injecter le tout Form\ChoiceList
  37. La Blackroom 48 • Ne pas utiliser le type “entity”

    ou “document”. • Préférer quelque chose d’agnostique via un Transfomer • https://github.com/black-project/CommonBundle/blob/master/Application/ Form/Type/CustomChoiceListType.php • https://github.com/black-project/CommonBundle/blob/master/Resources/ doc/use.md#form---transformer EntityType\DocumentType
  38. La Blackroom 49 • Ne pas étendre Symfony\Bundle\FrameworkBundle\Controller • Un

    contrôleur = une action • Injecter ce dont vous avez besoin • Déclarer vos contrôleurs en tant que service Controlleurs
  39. La Blackroom 50 • Le manager est un point d’entrée

    vers le repository (qui peut être custom) • Interagissez avec le manager jamais avec le repository en direct • Ne mettez pas de méthodes getRepository() dans votre Manager Manager et repository (Version 1)
  40. La Blackroom 51 • Utiliser le D de SOLID et

    créer une interface pour tous vos repositories • Ajouter les méthodes save/delete dans vos repositories • Attention au flush (géré via le manager) Manager et repository (Version 2)
  41. La Blackroom 53 • Pour vos traitement lourds via Cron,

    mettre utiliser un pid • Surveiller les signaux systèmes pour interrompre les traitements correctement • https://leanpub.com/signalingphp par Cal Evans (@calevans) Commandes
  42. La Blackroom 54 • Intégrer des ValueObjects • Dealer avec

    ces ValueObjects à la place de l’$id Faites un peu de DDD
  43. La Blackroom 55 • Approche équivalente au Request -> Response

    de Symfony • Input = Commande • Output = DomainEvent • Entre les deux, ce que vous voulez Faites un peu de CQRS
  44. La Blackroom 56 • Utiliser Behat • Créer des scénarios

    simple pour vérifier vos éléments “clés” Faites un peu de BDD
  45. La Blackroom 57 • Utiliser phpspec • Décrire vos objets

    “métier” et vos méthodes Faites un peu de TDD SpecBDD
  46. La Blackroom 58 • Bonnes pratiques pour Symfony2 par Tugdual

    Saunier (@tucksaun) • https://www.youtube.com/watch?v=AuhGAvvn2Ws • A year with Symfony par Matthias Noback • https://leanpub.com/a-year-with-symfony ! • Pourquoi pas une journée d’eXtreme Programming par semaine ? • UTILISEZ VOTRE DIF (lorsque vous y avez droit) Complément