SlideShare une entreprise Scribd logo
Noël GUILBERT – Présentation Symfony EPITA22/04/2010
Symfony, qu’est-ce que c’est ?Un framework PHP 5 Open-SourceIssu de l’expérience de Sensio Labs dans le développement d’application webEnsemble d’outils conçus pour faciliter les développements et éviter les tâches répétitivesDestiné aux professionnelsNoël GUILBERT – Présentation Symfony EPITA22/04/2010
Sensio LabsWeb agency 70 personnesdédiéesau développementWebSpécialistes de l’Open-SourceNoël GUILBERT – Présentation Symfony EPITA22/04/2010InternetTechnologiesSensioWeb AgencyWebmarketingCreator of thesymfony framework
Symfony, ce n’est pas que du codeUne documentation Open-source :Plusieurs livres officiels :Practical Symfony (350 pages)The Reference guide (150 pages)More with Symfony (320 pages, disponibles en 5 langues)Noël GUILBERT – Présentation Symfony EPITA22/04/2010
Symfony, ce n’est pas que du codeDes ouvrages dans différents pays:Noël GUILBERT – Présentation Symfony EPITA22/04/2010
Symfony, ce n’est pas que du codeDifférents évènements et conférences  :Symfony camp, Symfony day, Symfony Live, sprints, bug huntdays, …Noël GUILBERT – Présentation Symfony EPITA22/04/2010
Une version « entreprise »:Version 1.4 :supportée pendant 3 ans (jusqu’à fin 2012)Environ une release par mois:Correction de bugsPas de nouvelle fonctionnalitéLa mise à jour est simple et sans dangerLa migration depuis une version antérieure est simpleSupport commercial	Documentation stable et maintenueFormationsConseilNoël GUILBERT – Présentation Symfony EPITA22/04/2010
ObjectifsDévelopper plus vite, et surtout mieuxPromouvoir l’utilisation de bonnes pratiques de développementRéaliser des applications évolutives et maintenablesSe concentrer uniquement sur la logique métierNe pas réinventer la roueNoël GUILBERT – Présentation Symfony EPITA22/04/2010
Développer plus viteEcrire moins de codePlus de temps pour la logique métier, les cas limites, …Moins de code Moins de complexitéMoins de bugsPlus de productivitéPlus de tempsNoël GUILBERT – Présentation Symfony EPITA22/04/2010
FonctionnalitésArchitecture MVCInternationalisation / LocalisationORMSupport  avancé des formulairesSécuritéGestion des environnementsOutils de développement et de debugConfigurable et extensibleCacheGénérateur d’interface d’administrationTests unitaires et fonctionnelsURLs « propres »CLIEmailsNoël GUILBERT – Présentation Symfony EPITA22/04/2010
Architecture MVCNoël GUILBERT – Présentation Symfony EPITA3 couches logiques :Model: logique métierView : présentationController: logique applicativeAvantages :Meilleure encapsulationCode réutilisableTestable unitairementRobusteclientserverinternetcontrollerviewmodelResponse22/04/2010
Url propresSymfony gère les URLs propresPourquoi ?SEO« user-friendly »Masque l’implémentation technique Noël GUILBERT – Présentation Symfony EPITA/blog.php?section=symfony&article_id=18475/blog/2010-04-22/symfony-a-l-epita22/04/2010
Outils pour le développeurSymfony est fourni avec des outils de débogagePourquoi ?Faciliter le débogageAméliorer la productivité du développeurNoël GUILBERT – Présentation Symfony EPITA22/04/2010
CLISymfony possède un certain nombre d’outils en ligne de commande pour faciliter le développement:Génération de codeExécution des tests fonctionnels et unitairesGénération de la base de donnéesInstallation de pluginsConfigurations diversesDéploiementsEtc…Noël GUILBERT – Présentation Symfony EPITA22/04/2010
CLI$> php symfonyNoël GUILBERT – Présentation Symfony EPITA22/04/2010
Configurable et extensibleSymfony est configurable et facilement extensibleSystème de pluginsPourquoi ?Le web évolue viteChaque projet a des besoins spécifiquesUn framework ne peut, et ne doit pas tout faireFaciliter les contributions externesNoël GUILBERT – Présentation Symfony EPITA22/04/2010
SécuritéSymfony est protégé par défaut contre les principales vulnérabilités :Injection SQLXSS (Cross-site Scripting)CSRF (Cross Site Request Forgeries)Noël GUILBERT – Présentation Symfony EPITA22/04/2010
EnvironnementsSymfony dispose d’une notion d’environnements :DéveloppementTestProductionPourquoi ?Le développeur doit pouvoir diagnostiquer les problèmes rapidement: barre de debug, erreurs, etc…Le site en production doit avoir le cache activé, masquer les informations sensibles en cas de problème, …Noël GUILBERT – Présentation Symfony EPITA22/04/2010
Tests fonctionnels et unitairesSymfony dispose d’un framework de test unitaire spécialement adapté : LimeSymfony automatise les tests des applications par la simulation d’un navigateurPourquoi ?Les tests manuels ne sont pas fiables et reproductiblesUne application testée contient moins de bugsNoël GUILBERT – Présentation Symfony EPITA22/04/2010
Cachesymfony gère de façon très fine le cache des applicationsPlusieurs mécanismes de cache sont supportés :fichier,  APC, memcache, …Permet d’améliorer la scalabilité des applications rapidementNoël GUILBERT – Présentation Symfony EPITA22/04/2010
I18N et L10NSymfony possède nativement un support de l’I18N et de la L10NFacilite l’internationalisation des applicationsNoël GUILBERT – Présentation Symfony EPITA22/04/2010
Object RelationalMappingRéalise le mapping entre une base de donnée relationnelle et un modèle orienté objetCouche d’abstraction de base de donnéesManipulation de base de données à travers une interface orientée objetDeux ORMs sont disponibles : Doctrine et  PropelNoël GUILBERT – Présentation Symfony EPITA22/04/2010
Abstraction de base de donnéesChaque SGBD a ses spécificitésPermet de basculer d’un SGBD à un autre facilementVous n’avez plus de SQL à écrire !Noël GUILBERT – Présentation Symfony EPITA22/04/2010
Doctrine et PropelBien intégrés à Symfony :Configuration en YAMLLigne de commandesI18nAdmin-generatorDocumentationTutorielsNoël GUILBERT – Présentation Symfony EPITA22/04/2010
Décrire la structure de votre base de donnéesNoël GUILBERT – Présentation Symfony EPITA22/04/2010ShopProduct:actAs:Timestampable: ~Sluggable:      fields:      [reference, name]  columns:    reference:      { type: string(15), notnull: true, unique: true }    name:            { type: string(100), notnull: true }    description:    { type: clob, notnull: true }    stock:             { type: integer(4), notnull: true, default: 0 }    price:              { type: float, notnull: true }Nom de la classe Comportements automatiquesDéfinition des colonnes
Du schéma à la base de donnéesNoël GUILBERT – Présentation Symfony EPITA22/04/2010ShopProduct:  columns:     name:         type: string(100), notnull: trueCREATE TABLE shop_product (    id integer NOT NULL PRIMARY KEY AUTO_INCREMENT,namevarchar(100) NOT NULL);
Des objets à la base de donnéesNoël GUILBERT – Présentation Symfony EPITA22/04/2010INSERT INTO shop_product (‘reference’, ‘name’, ‘price’) VALUE (‘AZERTY’, ‘Blue couch’, 299.9);  UPDATE shop_product set name = ‘Redcouch’ WHERE id = 1;
Intégré à la barre de debugNoël GUILBERT – Présentation Symfony EPITA22/04/2010
Support avancé des formulaires22/04/2010Symfony a une gestion des formulaires très avancée et très modulaireToutes les applications ont des formulairesLa définition des formulaires est longue et fastidieuseLa validation des données « à la main » est fastidieuseNoël GUILBERT – Présentation Symfony EPITA
Support avancé des formulaires22/04/2010Les support des formulaires permettent d’encapsuler leur cycle de vie complet :Champs de saisiesValidationProcessus métier : sauvegarde, traitement des données, etc…Intégration avec les ORMs pour la manipulation des donnéesNoël GUILBERT – Présentation Symfony EPITA
Support avancé des formulaires22/04/2010Noël GUILBERT – Présentation Symfony EPITA
Support avancé des formulaires22/04/2010Noël GUILBERT – Présentation Symfony EPITA
Support avancé des formulaires22/04/2010Gestion des erreurs :Noël GUILBERT – Présentation Symfony EPITA
Support avancé des formulaires22/04/2010Intégré à la barre de debug:Noël GUILBERT – Présentation Symfony EPITA
Emails avec SwiftMailer22/04/2010Symfony est fourni avec une des meilleures solutions en PHP d’emailing : SwiftMailerCette solution est complètement intégrée avec symfony :EnvironnementsFiles d’attenteTests fonctionnelsDebuggageNoël GUILBERT – Présentation Symfony EPITA
Emails avec SwiftMailer22/04/2010Envoyer un emailNoël GUILBERT – Présentation Symfony EPITA
Emails avec SwiftMailer22/04/2010Tester l’envoi d’un emailNoël GUILBERT – Présentation Symfony EPITA
Emails avec SwiftMailer22/04/2010ConfigurationStratégies d’envoiDésactivée par défaut dans les environnements de test et de développement Possibilité de rediriger tous les mails vers une adresse uniquePratique pour tester l’envoi des emailsEn temps réelEn file d’attenteNoël GUILBERT – Présentation Symfony EPITA
Emails avec SwiftMailer22/04/2010L’envoi des emails est intégré à la barre de debugNoël GUILBERT – Présentation Symfony EPITA
Générateur de Back-OfficeGénérationautomatiqued’interfacesd’administration :ListesPaginationTrisCRUDFiltresValidationPourquoi ?Tous les sites ont un back-officeFastidieux à développer et à testerAucune valeur ajoutée pour le développeurNoël GUILBERT – Présentation Symfony EPITA22/04/2010
Générateur de Back-OfficeNoël GUILBERT – Présentation Symfony EPITA22/04/2010
22/04/2010Noël GUILBERT – Présentation Symfony EPITADémonstration
Réalisation d’un back office de gestion des étudiantsLister les étudiants, 10 par page afficher la photo, nom, prénom et promo de chaqueétudiantTrier par défaut les étudiants par ordrealphabétiqueMoteur de recherche multi-critèresFormulaires de création et d’éditionUpload de photoValidation des données saisiesSuppression d’un étudiantNoël GUILBERT – Présentation Symfony EPITA22/04/2010
Demo terminée!22/04/2010Noël GUILBERT – Présentation Symfony EPITA
Symfony : que nous réserve l’avenir ?Noël GUILBERT – Présentation Symfony EPITA22/04/2010
22/04/2010Noël GUILBERT – Présentation Symfony EPITAUne évolution majeure de symfony 1.x :Full stackConfigurableExtensibleTestableUne nouvelle architecture:Utilisation des nouveautés de PHP 5.3
Symfony 2 : ne pas réinventer la roueRéutilisation des meilleurs composants du monde Open-Source :Doctrine 2 PHPUnitSwiftMailerZend_LogNoël GUILBERT – Présentation Symfony EPITA22/04/2010
PHP 5.3NamespacesClosures / Lambda functionsLate state bindingNoël GUILBERT – Présentation Symfony EPITA22/04/2010
Symfony 2 : Quelles nouveautés ?22/04/2010Meilleures performancesComposants autonomesInjection de dépendanceRequest HandlerBundlesNoël GUILBERT – Présentation Symfony EPITA
Symfony 2 : Plus rapide ?22/04/2010Symfony 2 est 2,5x plus rapide que symfony 1.4.x… et environ 60x plus rapide que Flow 3 (en version alpha)http://symfony-reloaded.org/fastNoël GUILBERT – Présentation Symfony EPITA
Symfony Components22/04/2010Librairies autonomesChaque composant à un périmètre et une documentation spécifiquehttp://components.symfony-project.org/ Noël GUILBERT – Présentation Symfony EPITA
Symfony Components22/04/2010Noël GUILBERT – Présentation Symfony EPITABrowserKitConsoleCssSelectorDependencyInjectionDomCrawlerEventDispatcherFinderOutputEscaperProcessRequestHandlerTemplatingYaml
Injection de dépendance22/04/2010Permet de gérer les dépendances entre les classes de votre projetInspiré par le framework Java SpringDocumentation : http://components.symfony-project.org/dependency-injection/Noël GUILBERT – Présentation Symfony EPITA
Injection de dépendance22/04/2010<?phpclass User{protected $storage;    public function__construct(Storage $storage)    {        $this->storage = $storage;    }}Noël GUILBERT – Présentation Symfony EPITA
Conteneur d’Injection de dépendance22/04/2010Une méthode pour organiser les dépendancesChaque classe est un service, que l’on peut définir au format YAML :Noël GUILBERT – Présentation Symfony EPITAservices:   user:     class: User     arguments: [@user.storage]user.storage:      class: Storage
Conteneur d’Injection de dépendance22/04/2010Noël GUILBERT – Présentation Symfony EPITA
Request Handler22/04/2010Micro-kernel très rapide pour le développement de framework d’application webNoël GUILBERT – Présentation Symfony EPITA
Request Handler22/04/2010A la base de l’implémentation des contrôleurs dans Symfony 2Concept très simple:Le point d’entrée est une requêteLe point de sortie est une réponseLa requête peut être ce que vous voulezL’objet réponse doit implémenter une méthode send()Noël GUILBERT – Présentation Symfony EPITA
Request Handler22/04/2010Noël GUILBERT – Présentation Symfony EPITA
Les bundles22/04/2010Noël GUILBERT – Présentation Symfony EPITALes bundles sont l’équivalent des plugins dans symfony 1.xTout est bundle:Symfony est un bundleLe code de votre application sera dans un bundleUne application est un ensemble de bundles
Les bundles22/04/2010Noël GUILBERT – Présentation Symfony EPITALes bundles sont configuré dans le kernel de l’application
Bundles22/04/2010Noël GUILBERT – Présentation Symfony EPITASpringbok : ticketing systemhttp://github.com/naneau/springbok/
Bundles22/04/2010Noël GUILBERT – Présentation Symfony EPITAShopping carthttp://github.com/noelguilbert/symfony-demo
Sensio Labs Recrute !22/04/2010Chefs de projets webDéveloppeursStagesCDIEnvoyez votre CV à job@sensio.comNoël GUILBERT – Présentation Symfony EPITA
Questions ?Noël GUILBERThttp://www.noelguilbert.com/@noelguilbert22/04/2010Noël GUILBERT – Présentation Symfony EPITA

Contenu connexe

PDF
Symfony2: 30 astuces et bonnes pratiques
PPTX
Symfony 2 : chapitre 1 - Présentation Générale
PPTX
Symfony3 overview
PDF
Mieux Développer en PHP avec Symfony
PPTX
Atelier Symfony2- Introduction
PDF
Introduction à Symfony2
ODP
Symfony Best Practices
PDF
Présentation de symfony - Human talks aux docks le 8 juillet 2014
Symfony2: 30 astuces et bonnes pratiques
Symfony 2 : chapitre 1 - Présentation Générale
Symfony3 overview
Mieux Développer en PHP avec Symfony
Atelier Symfony2- Introduction
Introduction à Symfony2
Symfony Best Practices
Présentation de symfony - Human talks aux docks le 8 juillet 2014

Tendances (20)

PPTX
Presentation Symfony2
ODP
Presentation du framework symfony
PPTX
Symfony 2 et le Web
PDF
Orchestrez vos projets Symfony sans fausses notes
PPT
Symfony 2 : chapitre 2 - Les vues en Twig
PPT
Symfony 2 : chapitre 4 - Les services et les formulaires
PPT
Presentation Symfony
PDF
Une application en deux heure - PHP Québec Janvier 2009
PDF
Symfony2 Presentation
PDF
symfony : Un Framework Open-Source pour les Professionnels
PDF
Exposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
PDF
Formation Symfony2 par KNP Labs
PPT
Soutenance Zend Framework vs Symfony
PDF
wallabag, comment on a migré vers symfony3
PDF
Utiliser le Zend Framework avec Symfony
PPT
PHP5 et Zend Framework
PDF
Symfony
PDF
Atelier symfony n 1
ODP
Présentation de PHP 5.4 [FR]
PDF
Django pour les développeurs Symfony (et réciproquement)
Presentation Symfony2
Presentation du framework symfony
Symfony 2 et le Web
Orchestrez vos projets Symfony sans fausses notes
Symfony 2 : chapitre 2 - Les vues en Twig
Symfony 2 : chapitre 4 - Les services et les formulaires
Presentation Symfony
Une application en deux heure - PHP Québec Janvier 2009
Symfony2 Presentation
symfony : Un Framework Open-Source pour les Professionnels
Exposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
Formation Symfony2 par KNP Labs
Soutenance Zend Framework vs Symfony
wallabag, comment on a migré vers symfony3
Utiliser le Zend Framework avec Symfony
PHP5 et Zend Framework
Symfony
Atelier symfony n 1
Présentation de PHP 5.4 [FR]
Django pour les développeurs Symfony (et réciproquement)
Publicité

En vedette (10)

PPT
Symfony 2 : chapitre 3 - Les modèles en Doctrine 2
PDF
PHP 5 pour les développeurs Java
PPT
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
PDF
Presentation symfony
PDF
Php
PDF
Introduction à Laravel 4 @Dogstudio
PPT
PHP 5.3, PHP Next
PDF
Application web php5 html5 css3 bootstrap
KEY
Exploiter php 5
PPTX
Php 5.3
Symfony 2 : chapitre 3 - Les modèles en Doctrine 2
PHP 5 pour les développeurs Java
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Presentation symfony
Php
Introduction à Laravel 4 @Dogstudio
PHP 5.3, PHP Next
Application web php5 html5 css3 bootstrap
Exploiter php 5
Php 5.3
Publicité

Similaire à Présentation symfony epita (20)

PDF
Symfony 4 2019
PPTX
retour sur confoo2011 et Symfony2
PDF
Etude des Frameworks PHP
PPTX
Introduction à Symfony
PPTX
Introduction à Symfony
PPTX
Quid de vos applications symfony 1
PDF
Boostez vos-developpements-symfony-avec-phpedit
PDF
cours.symfony.web2pouringenieurseninformatique
PPTX
Symfony2 - Un Framework PHP 5 Performant
PPTX
Performance au quotidien dans un environnement symfony
PDF
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
PPT
CMS, Framework : à l'origine de nouvelles pratiques et de nouveaux enjeux dan...
PDF
Symfi formation-symfony-les-bases
PDF
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
PDF
Symfb formation-symfony-les-bases-et-perfectionnement
PDF
Symfony Live Paris 2016 - Ce que nous avons retenu
PDF
L'e-commerce sans accroc avec Sylius
PDF
Ecrire et déployer une appli PHP maintenable
PDF
Php forum 2017 - Maisons du Monde
PDF
php.Cours Symfony (database_connection & entities & orm)
Symfony 4 2019
retour sur confoo2011 et Symfony2
Etude des Frameworks PHP
Introduction à Symfony
Introduction à Symfony
Quid de vos applications symfony 1
Boostez vos-developpements-symfony-avec-phpedit
cours.symfony.web2pouringenieurseninformatique
Symfony2 - Un Framework PHP 5 Performant
Performance au quotidien dans un environnement symfony
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
CMS, Framework : à l'origine de nouvelles pratiques et de nouveaux enjeux dan...
Symfi formation-symfony-les-bases
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
Symfb formation-symfony-les-bases-et-perfectionnement
Symfony Live Paris 2016 - Ce que nous avons retenu
L'e-commerce sans accroc avec Sylius
Ecrire et déployer une appli PHP maintenable
Php forum 2017 - Maisons du Monde
php.Cours Symfony (database_connection & entities & orm)

Présentation symfony epita

  • 1. Noël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 2. Symfony, qu’est-ce que c’est ?Un framework PHP 5 Open-SourceIssu de l’expérience de Sensio Labs dans le développement d’application webEnsemble d’outils conçus pour faciliter les développements et éviter les tâches répétitivesDestiné aux professionnelsNoël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 3. Sensio LabsWeb agency 70 personnesdédiéesau développementWebSpécialistes de l’Open-SourceNoël GUILBERT – Présentation Symfony EPITA22/04/2010InternetTechnologiesSensioWeb AgencyWebmarketingCreator of thesymfony framework
  • 4. Symfony, ce n’est pas que du codeUne documentation Open-source :Plusieurs livres officiels :Practical Symfony (350 pages)The Reference guide (150 pages)More with Symfony (320 pages, disponibles en 5 langues)Noël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 5. Symfony, ce n’est pas que du codeDes ouvrages dans différents pays:Noël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 6. Symfony, ce n’est pas que du codeDifférents évènements et conférences :Symfony camp, Symfony day, Symfony Live, sprints, bug huntdays, …Noël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 7. Une version « entreprise »:Version 1.4 :supportée pendant 3 ans (jusqu’à fin 2012)Environ une release par mois:Correction de bugsPas de nouvelle fonctionnalitéLa mise à jour est simple et sans dangerLa migration depuis une version antérieure est simpleSupport commercial Documentation stable et maintenueFormationsConseilNoël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 8. ObjectifsDévelopper plus vite, et surtout mieuxPromouvoir l’utilisation de bonnes pratiques de développementRéaliser des applications évolutives et maintenablesSe concentrer uniquement sur la logique métierNe pas réinventer la roueNoël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 9. Développer plus viteEcrire moins de codePlus de temps pour la logique métier, les cas limites, …Moins de code Moins de complexitéMoins de bugsPlus de productivitéPlus de tempsNoël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 10. FonctionnalitésArchitecture MVCInternationalisation / LocalisationORMSupport avancé des formulairesSécuritéGestion des environnementsOutils de développement et de debugConfigurable et extensibleCacheGénérateur d’interface d’administrationTests unitaires et fonctionnelsURLs « propres »CLIEmailsNoël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 11. Architecture MVCNoël GUILBERT – Présentation Symfony EPITA3 couches logiques :Model: logique métierView : présentationController: logique applicativeAvantages :Meilleure encapsulationCode réutilisableTestable unitairementRobusteclientserverinternetcontrollerviewmodelResponse22/04/2010
  • 12. Url propresSymfony gère les URLs propresPourquoi ?SEO« user-friendly »Masque l’implémentation technique Noël GUILBERT – Présentation Symfony EPITA/blog.php?section=symfony&article_id=18475/blog/2010-04-22/symfony-a-l-epita22/04/2010
  • 13. Outils pour le développeurSymfony est fourni avec des outils de débogagePourquoi ?Faciliter le débogageAméliorer la productivité du développeurNoël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 14. CLISymfony possède un certain nombre d’outils en ligne de commande pour faciliter le développement:Génération de codeExécution des tests fonctionnels et unitairesGénération de la base de donnéesInstallation de pluginsConfigurations diversesDéploiementsEtc…Noël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 15. CLI$> php symfonyNoël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 16. Configurable et extensibleSymfony est configurable et facilement extensibleSystème de pluginsPourquoi ?Le web évolue viteChaque projet a des besoins spécifiquesUn framework ne peut, et ne doit pas tout faireFaciliter les contributions externesNoël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 17. SécuritéSymfony est protégé par défaut contre les principales vulnérabilités :Injection SQLXSS (Cross-site Scripting)CSRF (Cross Site Request Forgeries)Noël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 18. EnvironnementsSymfony dispose d’une notion d’environnements :DéveloppementTestProductionPourquoi ?Le développeur doit pouvoir diagnostiquer les problèmes rapidement: barre de debug, erreurs, etc…Le site en production doit avoir le cache activé, masquer les informations sensibles en cas de problème, …Noël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 19. Tests fonctionnels et unitairesSymfony dispose d’un framework de test unitaire spécialement adapté : LimeSymfony automatise les tests des applications par la simulation d’un navigateurPourquoi ?Les tests manuels ne sont pas fiables et reproductiblesUne application testée contient moins de bugsNoël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 20. Cachesymfony gère de façon très fine le cache des applicationsPlusieurs mécanismes de cache sont supportés :fichier, APC, memcache, …Permet d’améliorer la scalabilité des applications rapidementNoël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 21. I18N et L10NSymfony possède nativement un support de l’I18N et de la L10NFacilite l’internationalisation des applicationsNoël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 22. Object RelationalMappingRéalise le mapping entre une base de donnée relationnelle et un modèle orienté objetCouche d’abstraction de base de donnéesManipulation de base de données à travers une interface orientée objetDeux ORMs sont disponibles : Doctrine et PropelNoël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 23. Abstraction de base de donnéesChaque SGBD a ses spécificitésPermet de basculer d’un SGBD à un autre facilementVous n’avez plus de SQL à écrire !Noël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 24. Doctrine et PropelBien intégrés à Symfony :Configuration en YAMLLigne de commandesI18nAdmin-generatorDocumentationTutorielsNoël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 25. Décrire la structure de votre base de donnéesNoël GUILBERT – Présentation Symfony EPITA22/04/2010ShopProduct:actAs:Timestampable: ~Sluggable: fields: [reference, name] columns: reference: { type: string(15), notnull: true, unique: true } name: { type: string(100), notnull: true } description: { type: clob, notnull: true } stock: { type: integer(4), notnull: true, default: 0 } price: { type: float, notnull: true }Nom de la classe Comportements automatiquesDéfinition des colonnes
  • 26. Du schéma à la base de donnéesNoël GUILBERT – Présentation Symfony EPITA22/04/2010ShopProduct: columns: name: type: string(100), notnull: trueCREATE TABLE shop_product ( id integer NOT NULL PRIMARY KEY AUTO_INCREMENT,namevarchar(100) NOT NULL);
  • 27. Des objets à la base de donnéesNoël GUILBERT – Présentation Symfony EPITA22/04/2010INSERT INTO shop_product (‘reference’, ‘name’, ‘price’) VALUE (‘AZERTY’, ‘Blue couch’, 299.9); UPDATE shop_product set name = ‘Redcouch’ WHERE id = 1;
  • 28. Intégré à la barre de debugNoël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 29. Support avancé des formulaires22/04/2010Symfony a une gestion des formulaires très avancée et très modulaireToutes les applications ont des formulairesLa définition des formulaires est longue et fastidieuseLa validation des données « à la main » est fastidieuseNoël GUILBERT – Présentation Symfony EPITA
  • 30. Support avancé des formulaires22/04/2010Les support des formulaires permettent d’encapsuler leur cycle de vie complet :Champs de saisiesValidationProcessus métier : sauvegarde, traitement des données, etc…Intégration avec les ORMs pour la manipulation des donnéesNoël GUILBERT – Présentation Symfony EPITA
  • 31. Support avancé des formulaires22/04/2010Noël GUILBERT – Présentation Symfony EPITA
  • 32. Support avancé des formulaires22/04/2010Noël GUILBERT – Présentation Symfony EPITA
  • 33. Support avancé des formulaires22/04/2010Gestion des erreurs :Noël GUILBERT – Présentation Symfony EPITA
  • 34. Support avancé des formulaires22/04/2010Intégré à la barre de debug:Noël GUILBERT – Présentation Symfony EPITA
  • 35. Emails avec SwiftMailer22/04/2010Symfony est fourni avec une des meilleures solutions en PHP d’emailing : SwiftMailerCette solution est complètement intégrée avec symfony :EnvironnementsFiles d’attenteTests fonctionnelsDebuggageNoël GUILBERT – Présentation Symfony EPITA
  • 36. Emails avec SwiftMailer22/04/2010Envoyer un emailNoël GUILBERT – Présentation Symfony EPITA
  • 37. Emails avec SwiftMailer22/04/2010Tester l’envoi d’un emailNoël GUILBERT – Présentation Symfony EPITA
  • 38. Emails avec SwiftMailer22/04/2010ConfigurationStratégies d’envoiDésactivée par défaut dans les environnements de test et de développement Possibilité de rediriger tous les mails vers une adresse uniquePratique pour tester l’envoi des emailsEn temps réelEn file d’attenteNoël GUILBERT – Présentation Symfony EPITA
  • 39. Emails avec SwiftMailer22/04/2010L’envoi des emails est intégré à la barre de debugNoël GUILBERT – Présentation Symfony EPITA
  • 40. Générateur de Back-OfficeGénérationautomatiqued’interfacesd’administration :ListesPaginationTrisCRUDFiltresValidationPourquoi ?Tous les sites ont un back-officeFastidieux à développer et à testerAucune valeur ajoutée pour le développeurNoël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 41. Générateur de Back-OfficeNoël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 42. 22/04/2010Noël GUILBERT – Présentation Symfony EPITADémonstration
  • 43. Réalisation d’un back office de gestion des étudiantsLister les étudiants, 10 par page afficher la photo, nom, prénom et promo de chaqueétudiantTrier par défaut les étudiants par ordrealphabétiqueMoteur de recherche multi-critèresFormulaires de création et d’éditionUpload de photoValidation des données saisiesSuppression d’un étudiantNoël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 44. Demo terminée!22/04/2010Noël GUILBERT – Présentation Symfony EPITA
  • 45. Symfony : que nous réserve l’avenir ?Noël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 46. 22/04/2010Noël GUILBERT – Présentation Symfony EPITAUne évolution majeure de symfony 1.x :Full stackConfigurableExtensibleTestableUne nouvelle architecture:Utilisation des nouveautés de PHP 5.3
  • 47. Symfony 2 : ne pas réinventer la roueRéutilisation des meilleurs composants du monde Open-Source :Doctrine 2 PHPUnitSwiftMailerZend_LogNoël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 48. PHP 5.3NamespacesClosures / Lambda functionsLate state bindingNoël GUILBERT – Présentation Symfony EPITA22/04/2010
  • 49. Symfony 2 : Quelles nouveautés ?22/04/2010Meilleures performancesComposants autonomesInjection de dépendanceRequest HandlerBundlesNoël GUILBERT – Présentation Symfony EPITA
  • 50. Symfony 2 : Plus rapide ?22/04/2010Symfony 2 est 2,5x plus rapide que symfony 1.4.x… et environ 60x plus rapide que Flow 3 (en version alpha)http://symfony-reloaded.org/fastNoël GUILBERT – Présentation Symfony EPITA
  • 51. Symfony Components22/04/2010Librairies autonomesChaque composant à un périmètre et une documentation spécifiquehttp://components.symfony-project.org/ Noël GUILBERT – Présentation Symfony EPITA
  • 52. Symfony Components22/04/2010Noël GUILBERT – Présentation Symfony EPITABrowserKitConsoleCssSelectorDependencyInjectionDomCrawlerEventDispatcherFinderOutputEscaperProcessRequestHandlerTemplatingYaml
  • 53. Injection de dépendance22/04/2010Permet de gérer les dépendances entre les classes de votre projetInspiré par le framework Java SpringDocumentation : http://components.symfony-project.org/dependency-injection/Noël GUILBERT – Présentation Symfony EPITA
  • 54. Injection de dépendance22/04/2010<?phpclass User{protected $storage; public function__construct(Storage $storage) { $this->storage = $storage; }}Noël GUILBERT – Présentation Symfony EPITA
  • 55. Conteneur d’Injection de dépendance22/04/2010Une méthode pour organiser les dépendancesChaque classe est un service, que l’on peut définir au format YAML :Noël GUILBERT – Présentation Symfony EPITAservices: user: class: User arguments: [@user.storage]user.storage: class: Storage
  • 56. Conteneur d’Injection de dépendance22/04/2010Noël GUILBERT – Présentation Symfony EPITA
  • 57. Request Handler22/04/2010Micro-kernel très rapide pour le développement de framework d’application webNoël GUILBERT – Présentation Symfony EPITA
  • 58. Request Handler22/04/2010A la base de l’implémentation des contrôleurs dans Symfony 2Concept très simple:Le point d’entrée est une requêteLe point de sortie est une réponseLa requête peut être ce que vous voulezL’objet réponse doit implémenter une méthode send()Noël GUILBERT – Présentation Symfony EPITA
  • 59. Request Handler22/04/2010Noël GUILBERT – Présentation Symfony EPITA
  • 60. Les bundles22/04/2010Noël GUILBERT – Présentation Symfony EPITALes bundles sont l’équivalent des plugins dans symfony 1.xTout est bundle:Symfony est un bundleLe code de votre application sera dans un bundleUne application est un ensemble de bundles
  • 61. Les bundles22/04/2010Noël GUILBERT – Présentation Symfony EPITALes bundles sont configuré dans le kernel de l’application
  • 62. Bundles22/04/2010Noël GUILBERT – Présentation Symfony EPITASpringbok : ticketing systemhttp://github.com/naneau/springbok/
  • 63. Bundles22/04/2010Noël GUILBERT – Présentation Symfony EPITAShopping carthttp://github.com/noelguilbert/symfony-demo
  • 64. Sensio Labs Recrute !22/04/2010Chefs de projets webDéveloppeursStagesCDIEnvoyez votre CV à job@sensio.comNoël GUILBERT – Présentation Symfony EPITA