Présentation symfony epita

5 530 vues

Publié le

Présentation de symfony à l'EPITA le 22 avril 2010

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

Aucun téléchargement
Vues
Nombre de vues
5 530
Sur SlideShare
0
Issues des intégrations
0
Intégrations
28
Actions
Partages
0
Téléchargements
162
Commentaires
0
J’aime
3
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Présentation symfony epita

  1. 1. Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  2. 2. Symfony, qu’est-ce que c’est ?<br />Un framework PHP 5 Open-Source<br />Issu de l’expérience de Sensio Labs dans le développement d’application web<br />Ensemble d’outils conçus pour faciliter les développements et éviter les tâches répétitives<br />Destiné aux professionnels<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  3. 3. Sensio Labs<br />Web agency<br /> 70 personnesdédiéesau développementWeb<br />Spécialistes de l’Open-Source<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />Internet<br />Technologies<br />Sensio<br />Web Agency<br />Webmarketing<br />Creator of the<br />symfony framework<br />
  4. 4. Symfony, ce n’est pas que du code<br />Une documentation Open-source :<br />Plusieurs livres officiels :<br />Practical Symfony (350 pages)<br />The Reference guide (150 pages)<br />More with Symfony (320 pages, disponibles en 5 langues)<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  5. 5. Symfony, ce n’est pas que du code<br />Des ouvrages dans différents pays:<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  6. 6. Symfony, ce n’est pas que du code<br />Différents évènements et conférences :<br />Symfony camp, Symfony day, Symfony Live, sprints, bug huntdays, …<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  7. 7. Une version « entreprise »:<br />Version 1.4 :<br />supportée pendant 3 ans (jusqu’à fin 2012)<br />Environ une release par mois:<br />Correction de bugs<br />Pas de nouvelle fonctionnalité<br />La mise à jour est simple et sans danger<br />La migration depuis une version antérieure est simple<br />Support commercial <br />Documentation stable et maintenue<br />Formations<br />Conseil<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  8. 8. Objectifs<br />Développer plus vite, et surtout mieux<br />Promouvoir l’utilisation de bonnes pratiques de développement<br />Réaliser des applications évolutives et maintenables<br />Se concentrer uniquement sur la logique métier<br />Ne pas réinventer la roue<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  9. 9. Développer plus vite<br />Ecrire moins de code<br />Plus de temps pour la logique métier, les cas limites, …<br />Moins de code <br /><br />Moins de complexité<br /><br />Moins de bugs<br /><br />Plus de productivité<br /><br />Plus de temps<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  10. 10. Fonctionnalités<br />Architecture MVC<br />Internationalisation / Localisation<br />ORM<br />Support avancé des formulaires<br />Sécurité<br />Gestion des environnements<br />Outils de développement et de debug<br />Configurable et extensible<br />Cache<br />Générateur d’interface d’administration<br />Tests unitaires et fonctionnels<br />URLs « propres »<br />CLI<br />Emails<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  11. 11. Architecture MVC<br />Noël GUILBERT – Présentation Symfony EPITA<br />3 couches logiques :<br />Model: logique métier<br />View : présentation<br />Controller: logique applicative<br />Avantages :<br />Meilleure encapsulation<br />Code réutilisable<br />Testable unitairement<br />Robuste<br />client<br />server<br />internet<br />controller<br />view<br />model<br />Response<br />22/04/2010<br />
  12. 12. Url propres<br />Symfony gère les URLs propres<br />Pourquoi ?<br />SEO<br />« user-friendly »<br />Masque l’implémentation technique <br />Noël GUILBERT – Présentation Symfony EPITA<br />/blog.php?section=symfony&article_id=18475<br />/blog/2010-04-22/symfony-a-l-epita<br />22/04/2010<br />
  13. 13. Outils pour le développeur<br />Symfony est fourni avec des outils de débogage<br />Pourquoi ?<br />Faciliter le débogage<br />Améliorer la productivité du développeur<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  14. 14. CLI<br />Symfony possède un certain nombre d’outils en ligne de commande pour faciliter le développement:<br />Génération de code<br />Exécution des tests fonctionnels et unitaires<br />Génération de la base de données<br />Installation de plugins<br />Configurations diverses<br />Déploiements<br />Etc…<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  15. 15. CLI<br />$> php symfony<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  16. 16. Configurable et extensible<br />Symfony est configurable et facilement extensible<br />Système de plugins<br />Pourquoi ?<br />Le web évolue vite<br />Chaque projet a des besoins spécifiques<br />Un framework ne peut, et ne doit pas tout faire<br />Faciliter les contributions externes<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  17. 17. Sécurité<br />Symfony est protégé par défaut contre les principales vulnérabilités :<br />Injection SQL<br />XSS (Cross-site Scripting)<br />CSRF (Cross Site Request Forgeries)<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  18. 18. Environnements<br />Symfony dispose d’une notion d’environnements :<br />Développement<br />Test<br />Production<br />Pourquoi ?<br />Le développeur doit pouvoir diagnostiquer les problèmes rapidement: barre de debug, erreurs, etc…<br />Le site en production doit avoir le cache activé, masquer les informations sensibles en cas de problème, …<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  19. 19. Tests fonctionnels et unitaires<br />Symfony dispose d’un framework de test unitaire spécialement adapté : Lime<br />Symfony automatise les tests des applications par la simulation d’un navigateur<br />Pourquoi ?<br />Les tests manuels ne sont pas fiables et reproductibles<br />Une application testée contient moins de bugs<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  20. 20. Cache<br />symfony gère de façon très fine le cache des applications<br />Plusieurs mécanismes de cache sont supportés :fichier, APC, memcache, …<br />Permet d’améliorer la scalabilité des applications rapidement<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  21. 21. I18N et L10N<br />Symfony possède nativement un support de l’I18N et de la L10N<br />Facilite l’internationalisation des applications<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  22. 22. Object RelationalMapping<br />Réalise le mapping entre une base de donnée relationnelle et un modèle orienté objet<br />Couche d’abstraction de base de données<br />Manipulation de base de données à travers une interface orientée objet<br />Deux ORMs sont disponibles : Doctrine et Propel<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  23. 23. Abstraction de base de données<br />Chaque SGBD a ses spécificités<br />Permet de basculer d’un SGBD à un autre facilement<br />Vous n’avez plus de SQL à écrire !<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  24. 24. Doctrine et Propel<br />Bien intégrés à Symfony :<br />Configuration en YAML<br />Ligne de commandes<br />I18n<br />Admin-generator<br />Documentation<br />Tutoriels<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  25. 25. Décrire la structure de votre base de données<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />ShopProduct:<br />actAs:<br />Timestampable: ~<br />Sluggable:<br /> fields: [reference, name]<br /> columns:<br /> reference: { type: string(15), notnull: true, unique: true }<br /> name: { type: string(100), notnull: true }<br /> description: { type: clob, notnull: true }<br /> stock: { type: integer(4), notnull: true, default: 0 }<br /> price: { type: float, notnull: true }<br />Nom de la classe <br />Comportements automatiques<br />Définition des colonnes<br />
  26. 26. Du schéma à la base de données<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />ShopProduct:<br /> columns:<br /> name: <br /> type: string(100), <br />notnull: true<br />CREATE TABLE shop_product ( <br /> id integer NOT NULL PRIMARY KEY AUTO_INCREMENT,<br />namevarchar(100) NOT NULL<br />);<br />
  27. 27. Des objets à la base de données<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />INSERT INTO shop_product (‘reference’, ‘name’, ‘price’) VALUE (‘AZERTY’, ‘Blue couch’, 299.9); <br />UPDATE shop_product set name = ‘Redcouch’ WHERE id = 1; <br />
  28. 28. Intégré à la barre de debug<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  29. 29. Support avancé des formulaires<br />22/04/2010<br />Symfony a une gestion des formulaires très avancée et très modulaire<br />Toutes les applications ont des formulaires<br />La définition des formulaires est longue et fastidieuse<br />La validation des données « à la main » est fastidieuse<br />Noël GUILBERT – Présentation Symfony EPITA<br />
  30. 30. Support avancé des formulaires<br />22/04/2010<br />Les support des formulaires permettent d’encapsuler leur cycle de vie complet :<br />Champs de saisies<br />Validation<br />Processus métier : sauvegarde, traitement des données, etc…<br />Intégration avec les ORMs pour la manipulation des données<br />Noël GUILBERT – Présentation Symfony EPITA<br />
  31. 31. Support avancé des formulaires<br />22/04/2010<br />Noël GUILBERT – Présentation Symfony EPITA<br />
  32. 32. Support avancé des formulaires<br />22/04/2010<br />Noël GUILBERT – Présentation Symfony EPITA<br />
  33. 33. Support avancé des formulaires<br />22/04/2010<br />Gestion des erreurs :<br />Noël GUILBERT – Présentation Symfony EPITA<br />
  34. 34. Support avancé des formulaires<br />22/04/2010<br />Intégré à la barre de debug:<br />Noël GUILBERT – Présentation Symfony EPITA<br />
  35. 35. Emails avec SwiftMailer<br />22/04/2010<br />Symfony est fourni avec une des meilleures solutions en PHP d’emailing : SwiftMailer<br />Cette solution est complètement intégrée avec symfony :<br />Environnements<br />Files d’attente<br />Tests fonctionnels<br />Debuggage<br />Noël GUILBERT – Présentation Symfony EPITA<br />
  36. 36. Emails avec SwiftMailer<br />22/04/2010<br />Envoyer un email<br />Noël GUILBERT – Présentation Symfony EPITA<br />
  37. 37. Emails avec SwiftMailer<br />22/04/2010<br />Tester l’envoi d’un email<br />Noël GUILBERT – Présentation Symfony EPITA<br />
  38. 38. Emails avec SwiftMailer<br />22/04/2010<br />Configuration<br />Stratégies d’envoi<br />Désactivée par défaut dans les environnements de test et de développement <br />Possibilité de rediriger tous les mails vers une adresse unique<br />Pratique pour tester l’envoi des emails<br />En temps réel<br />En file d’attente<br />Noël GUILBERT – Présentation Symfony EPITA<br />
  39. 39. Emails avec SwiftMailer<br />22/04/2010<br />L’envoi des emails est intégré à la barre de debug<br />Noël GUILBERT – Présentation Symfony EPITA<br />
  40. 40. Générateur de Back-Office<br />Générationautomatiqued’interfacesd’administration :<br />Listes<br />Pagination<br />Tris<br />CRUD<br />Filtres<br />Validation<br />Pourquoi ?<br />Tous les sites ont un back-office<br />Fastidieux à développer et à tester<br />Aucune valeur ajoutée pour le développeur<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  41. 41. Générateur de Back-Office<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  42. 42. 22/04/2010<br />Noël GUILBERT – Présentation Symfony EPITA<br />Démonstration<br />
  43. 43. Réalisation d’un back office de gestion des étudiants<br />Lister les étudiants, 10 par page <br />afficher la photo, nom, prénom et promo de chaqueétudiant<br />Trier par défaut les étudiants par ordrealphabétique<br />Moteur de recherche multi-critères<br />Formulaires de création et d’édition<br />Upload de photo<br />Validation des données saisies<br />Suppression d’un étudiant<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  44. 44. Demo terminée!<br />22/04/2010<br />Noël GUILBERT – Présentation Symfony EPITA<br />
  45. 45. Symfony : que nous réserve l’avenir ?<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  46. 46. 22/04/2010<br />Noël GUILBERT – Présentation Symfony EPITA<br />Une évolution majeure de symfony 1.x :<br />Full stack<br />Configurable<br />Extensible<br />Testable<br />Une nouvelle architecture:<br />Utilisation des nouveautés de PHP 5.3<br />
  47. 47. Symfony 2 : ne pas réinventer la roue<br />Réutilisation des meilleurs composants du monde Open-Source :<br />Doctrine 2 <br />PHPUnit<br />SwiftMailer<br />Zend_Log<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  48. 48. PHP 5.3<br />Namespaces<br />Closures / Lambda functions<br />Late state binding<br />Noël GUILBERT – Présentation Symfony EPITA<br />22/04/2010<br />
  49. 49. Symfony 2 : Quelles nouveautés ?<br />22/04/2010<br />Meilleures performances<br />Composants autonomes<br />Injection de dépendance<br />Request Handler<br />Bundles<br />Noël GUILBERT – Présentation Symfony EPITA<br />
  50. 50. Symfony 2 : Plus rapide ?<br />22/04/2010<br />Symfony 2 est 2,5x plus rapide que symfony 1.4.x<br />… et environ 60x plus rapide que Flow 3 (en version alpha)<br />http://symfony-reloaded.org/fast<br />Noël GUILBERT – Présentation Symfony EPITA<br />
  51. 51. Symfony Components<br />22/04/2010<br />Librairies autonomes<br />Chaque composant à un périmètre et une documentation spécifique<br />http://components.symfony-project.org/ <br />Noël GUILBERT – Présentation Symfony EPITA<br />
  52. 52. Symfony Components<br />22/04/2010<br />Noël GUILBERT – Présentation Symfony EPITA<br />BrowserKit<br />Console<br />CssSelector<br />DependencyInjection<br />DomCrawler<br />EventDispatcher<br />Finder<br />OutputEscaper<br />Process<br />RequestHandler<br />Templating<br />Yaml<br />
  53. 53. Injection de dépendance<br />22/04/2010<br />Permet de gérer les dépendances entre les classes de votre projet<br />Inspiré par le framework Java Spring<br />Documentation : http://components.symfony-project.org/dependency-injection/<br />Noël GUILBERT – Présentation Symfony EPITA<br />
  54. 54. Injection de dépendance<br />22/04/2010<br /><?php<br />class User<br />{<br />protected $storage;<br /> public function__construct(Storage $storage)<br /> {<br /> $this->storage = $storage;<br /> }<br />}<br />Noël GUILBERT – Présentation Symfony EPITA<br />
  55. 55. Conteneur d’Injection de dépendance<br />22/04/2010<br />Une méthode pour organiser les dépendances<br />Chaque classe est un service, que l’on peut définir au format YAML :<br />Noël GUILBERT – Présentation Symfony EPITA<br />services:<br /> user:<br /> class: User<br /> arguments: [@user.storage]<br />user.storage:<br /> class: Storage<br />
  56. 56. Conteneur d’Injection de dépendance<br />22/04/2010<br />Noël GUILBERT – Présentation Symfony EPITA<br />
  57. 57. Request Handler<br />22/04/2010<br />Micro-kernel très rapide pour le développement de framework d’application web<br />Noël GUILBERT – Présentation Symfony EPITA<br />
  58. 58. Request Handler<br />22/04/2010<br />A la base de l’implémentation des contrôleurs dans Symfony 2<br />Concept très simple:<br />Le point d’entrée est une requête<br />Le point de sortie est une réponse<br />La requête peut être ce que vous voulez<br />L’objet réponse doit implémenter une méthode send()<br />Noël GUILBERT – Présentation Symfony EPITA<br />
  59. 59. Request Handler<br />22/04/2010<br />Noël GUILBERT – Présentation Symfony EPITA<br />
  60. 60. Les bundles<br />22/04/2010<br />Noël GUILBERT – Présentation Symfony EPITA<br />Les bundles sont l’équivalent des plugins dans symfony 1.x<br />Tout est bundle:<br />Symfony est un bundle<br />Le code de votre application sera dans un bundle<br />Une application est un ensemble de bundles<br />
  61. 61. Les bundles<br />22/04/2010<br />Noël GUILBERT – Présentation Symfony EPITA<br />Les bundles sont configuré dans le kernel de l’application<br />
  62. 62. Bundles<br />22/04/2010<br />Noël GUILBERT – Présentation Symfony EPITA<br />Springbok : ticketing system<br />http://github.com/naneau/springbok/<br />
  63. 63. Bundles<br />22/04/2010<br />Noël GUILBERT – Présentation Symfony EPITA<br />Shopping cart<br />http://github.com/noelguilbert/symfony-demo<br />
  64. 64. Sensio Labs Recrute !<br />22/04/2010<br />Chefs de projets web<br />Développeurs<br />Stages<br />CDI<br />Envoyez votre CV à job@sensio.com<br />Noël GUILBERT – Présentation Symfony EPITA<br />
  65. 65. Questions ?<br />Noël GUILBERT<br />http://www.noelguilbert.com/<br />@noelguilbert<br />22/04/2010<br />Noël GUILBERT – Présentation Symfony EPITA<br />

×