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