Avec cette nouvelle version de votre framework préféré, de nouvelles fonctionnalités et de nouveaux usages sont apparus. Vous vous demandez comment structurer vos bundles? Comment organiser votre code source? Comment utiliser correctement l'injecteur de dépendance? Venez découvrir au cours de cette session les bonnes pratiques, et quelques astuces, qui vous aiderons dans la réalisation de vos projets avec Symfony2.
Cette nouvelle version du framework a été entièrement réécrite afin de tirer profit de PHP 5.3 d'une part mais également de corriger les erreurs du passé avec symfony 1.x.
Cette nouvelle version regorge de fonctionnalités puissantes pour vous aider à bâtir des applications web maintenables, pérennes, performantes et évolutives.
Cette présentation donne un aperçu des nouvelles fonctionnalités de Symfony2 comme l'architecture MVC, les tests automatisés ou bien encore l'envoi d'emails.
Au cours de cette session, nous présenterons d'une manière générale toutes les caractéristiques qui font de symfony un framework open source tourné vers le monde professionnel.
Il s'agira dans un premier temps de montrer que symfony n'est pas seulement une base de code mais un projet open source à part entière disposant d'un écosystème riche sur lequel n'importe quel développeur peut compter.
Nous porterons ensuite un oeil plus attentif aux fonctionnalités phares du framework telles que sa couche d'abstraction de base de données, son interface en ligne de commande, le routing bidirectionnel, les outils de test automatisés ou bien encore le générateur automatique de backoffice.
Premier chapitre d'une formation Symfony 2,
l'Objectif de ce chapitre peut se résumer dans les points suivants :
- Présentation du framework Symfony en sa version 2.x
- Première installation de Symfony, et découvert de son arborescence projet
- Notion des Bundles : Notion de contrôleur et Vue + Réalisation d'un premier contrôleur
- Système des Routes : utilisation des annotations pour définir des routes
Orchestrez vos projets Symfony sans fausses notesXavier Gorse
Retour d'expériences sur tout le processus d'ingénierie logicielle de projets Symfony que nous avons construits au fil du temps depuis nos premiers projets en 2006. Nous aborderons toutes les phases de l'industrialisation nous ayant permis d'accroître la qualité et la réactivité d’intervention sur les projets
Cette formation a pour objectif de faire acquérir aux stagiaires les connaissances des mécanismes de base du framework PHP Symfony2 avec l'ORM Doctrine 2 et de mettre en pratique ces connaissances.
Le parcours pédagogique se présente sous la forme d'un projet d'application internet "Knoodle" réalisé par chaque stagiaire : des travaux pratiques auront lieu tout au long de la formation.
Vous pourrez ainsi profiter de multiples conseils et recommandations tirés de la (grande) expérience du formateur sur Symfony.
Deuxième chapitre d'une formation Symfony 2,
l'Objectif de ce chapitre peut se résumer dans les points suivants :
- Présentation du moteur de template Twig
- Syntaxe et utilisation du moteur de template Twig dans les vues des contrôleurs
- Passer des variables depuis les contrôleurs vers les vues
Cette nouvelle version du framework a été entièrement réécrite afin de tirer profit de PHP 5.3 d'une part mais également de corriger les erreurs du passé avec symfony 1.x.
Cette nouvelle version regorge de fonctionnalités puissantes pour vous aider à bâtir des applications web maintenables, pérennes, performantes et évolutives.
Cette présentation donne un aperçu des nouvelles fonctionnalités de Symfony2 comme l'architecture MVC, les tests automatisés ou bien encore l'envoi d'emails.
Au cours de cette session, nous présenterons d'une manière générale toutes les caractéristiques qui font de symfony un framework open source tourné vers le monde professionnel.
Il s'agira dans un premier temps de montrer que symfony n'est pas seulement une base de code mais un projet open source à part entière disposant d'un écosystème riche sur lequel n'importe quel développeur peut compter.
Nous porterons ensuite un oeil plus attentif aux fonctionnalités phares du framework telles que sa couche d'abstraction de base de données, son interface en ligne de commande, le routing bidirectionnel, les outils de test automatisés ou bien encore le générateur automatique de backoffice.
Premier chapitre d'une formation Symfony 2,
l'Objectif de ce chapitre peut se résumer dans les points suivants :
- Présentation du framework Symfony en sa version 2.x
- Première installation de Symfony, et découvert de son arborescence projet
- Notion des Bundles : Notion de contrôleur et Vue + Réalisation d'un premier contrôleur
- Système des Routes : utilisation des annotations pour définir des routes
Orchestrez vos projets Symfony sans fausses notesXavier Gorse
Retour d'expériences sur tout le processus d'ingénierie logicielle de projets Symfony que nous avons construits au fil du temps depuis nos premiers projets en 2006. Nous aborderons toutes les phases de l'industrialisation nous ayant permis d'accroître la qualité et la réactivité d’intervention sur les projets
Cette formation a pour objectif de faire acquérir aux stagiaires les connaissances des mécanismes de base du framework PHP Symfony2 avec l'ORM Doctrine 2 et de mettre en pratique ces connaissances.
Le parcours pédagogique se présente sous la forme d'un projet d'application internet "Knoodle" réalisé par chaque stagiaire : des travaux pratiques auront lieu tout au long de la formation.
Vous pourrez ainsi profiter de multiples conseils et recommandations tirés de la (grande) expérience du formateur sur Symfony.
Deuxième chapitre d'une formation Symfony 2,
l'Objectif de ce chapitre peut se résumer dans les points suivants :
- Présentation du moteur de template Twig
- Syntaxe et utilisation du moteur de template Twig dans les vues des contrôleurs
- Passer des variables depuis les contrôleurs vers les vues
Cette présentation à pour but d'expliquer à des néophites les avantages du framework PHP Symfony.
Elle m'a servit en entreprise pour expliquer ses concepts complexe à des non-informaticiens.
Cette présentation à pour but d'expliquer à des néophites les avantages du framework PHP Symfony.
Elle m'a servit en entreprise pour expliquer ses concepts complexe à des non-informaticiens.
Symfony est le framework le plus répandu pour les dévéloppeurs PHP,pour ce fait je vais vous montrer comment développer les applications web (Backend) ultra-rapides et savoir quand et comment choisir un outil
Symfony2 est un framework PHP pour le développement de sites web. Cette présentation fournit -entre autre- quelques exemples pour commencer à manipuler les concepts et les commandes de base du framework.
Elle a été présenté à l'occasion d'un code d'armor sur le sujet (Mardi 19 novembre 2013 de 19:00 à 21:30).
Par Eric PARA & Sylvain RAGOT.
wallabag est une application opensource de lecture différée : elle vous permet de mettre de côté la version épurée d'un article pour la consulter plus tard où que vous soyez. Créée il y a 3 ans à base de fichiers PHP comme on faisait en 2005, nous avons décidé il y a maintenant un peu plus d'un an de migrer le projet à Symfony. Au cours de ce talk, nous présenterons donc le projet wallabag et tout son écosystème : son concept, son socle technique (API REST, tests unitaires, Rulerz, RabbitMQ, Capistrano), les difficultés rencontrées, la communauté et les projets qui tournent autour, la roadmap pour les semaines à venir.
PHP Composer : Pourquoi ? Comment ? Et plus ...Romain Cambien
Présentation de la gestion de dépendance grâce à Composer. Comment l'installer et le principales commandes à connaitre. Présentation et demonstration du projet Toran Proxy.
Atelier Framework Web Côté Serveur
TP N° 1
Installation et Démarrage de Symfony
Objectifs
• Découvrir, installer et configurer l’environnement de développement,
• Installation et configuration de Symfony3,
• Démarrer un projet avec Symfony,
• Ouvrir la structure d’un projet Symfony dans l’Editeur.
Design pattern in Symfony2 - Nanos gigantium humeris insidentesGiulio De Donato
This document discusses various design patterns used within the Symfony framework such as the Front Controller pattern, Decorator pattern, Dependency Injection, and others. It also discusses anti-patterns to avoid like over-engineering, overuse of patterns, big ball of mud, and reinventing the wheel. Throughout the document there is an emphasis on decoupling code and avoiding tightly coupled spaghetti code.
Cette présentation à pour but d'expliquer à des néophites les avantages du framework PHP Symfony.
Elle m'a servit en entreprise pour expliquer ses concepts complexe à des non-informaticiens.
Cette présentation à pour but d'expliquer à des néophites les avantages du framework PHP Symfony.
Elle m'a servit en entreprise pour expliquer ses concepts complexe à des non-informaticiens.
Symfony est le framework le plus répandu pour les dévéloppeurs PHP,pour ce fait je vais vous montrer comment développer les applications web (Backend) ultra-rapides et savoir quand et comment choisir un outil
Symfony2 est un framework PHP pour le développement de sites web. Cette présentation fournit -entre autre- quelques exemples pour commencer à manipuler les concepts et les commandes de base du framework.
Elle a été présenté à l'occasion d'un code d'armor sur le sujet (Mardi 19 novembre 2013 de 19:00 à 21:30).
Par Eric PARA & Sylvain RAGOT.
wallabag est une application opensource de lecture différée : elle vous permet de mettre de côté la version épurée d'un article pour la consulter plus tard où que vous soyez. Créée il y a 3 ans à base de fichiers PHP comme on faisait en 2005, nous avons décidé il y a maintenant un peu plus d'un an de migrer le projet à Symfony. Au cours de ce talk, nous présenterons donc le projet wallabag et tout son écosystème : son concept, son socle technique (API REST, tests unitaires, Rulerz, RabbitMQ, Capistrano), les difficultés rencontrées, la communauté et les projets qui tournent autour, la roadmap pour les semaines à venir.
PHP Composer : Pourquoi ? Comment ? Et plus ...Romain Cambien
Présentation de la gestion de dépendance grâce à Composer. Comment l'installer et le principales commandes à connaitre. Présentation et demonstration du projet Toran Proxy.
Atelier Framework Web Côté Serveur
TP N° 1
Installation et Démarrage de Symfony
Objectifs
• Découvrir, installer et configurer l’environnement de développement,
• Installation et configuration de Symfony3,
• Démarrer un projet avec Symfony,
• Ouvrir la structure d’un projet Symfony dans l’Editeur.
Design pattern in Symfony2 - Nanos gigantium humeris insidentesGiulio De Donato
This document discusses various design patterns used within the Symfony framework such as the Front Controller pattern, Decorator pattern, Dependency Injection, and others. It also discusses anti-patterns to avoid like over-engineering, overuse of patterns, big ball of mud, and reinventing the wheel. Throughout the document there is an emphasis on decoupling code and avoiding tightly coupled spaghetti code.
The document outlines 30 best practices for developing applications with the Symfony framework. Some of the key best practices include managing the view within templates, always redirecting after form submissions, avoiding ORM/database specific code in controllers and templates, writing unit and functional tests, and using YAML configuration files to avoid hardcoding absolute paths. The document provides examples of good and bad implementations to illustrate how to design applications following the recommended practices.
Alphorm.com Support de la Formation Symfony 3 , les fondamentaux-ssAlphorm
Formation complète ici :
http://www.alphorm.com/tutoriel/formation-en-ligne-symfony-3-les-fondamentaux
Symfony 2 a apporté beaucoup de changements dans la façon dont les développeurs PHP abordaient le développement d'applications web. Avec une architecture à la fois complexe mais claire et transparente, laissant une bonne marge de manœuvre aux développeurs. Contrairement à Zend qui est orienté vers le code, Symfony est davantage orienté vers la production d'application à partir de modèles conceptuels. Toute la production de code qui peut être automatisée doit l'être.
Dans de ce cours, nous suivrons la création d'une application depuis le début, l'installation de Symfony sur le serveur jusqu'au traitement des données et l'interaction avec l'utilisateur. Et nous commencerons par quelques rappels sur PHP Objet, sans oublier Composer, devenu indispensable dans toute application.
Au travers d'une application-jouet, nous verrons comment articuler le code entre les différents composants de l'architecture Modèle-Vue-Contrôleur et comment mettre en œuvre les outils puissants que sont l'ORM Doctrine et le moteur de templates Twig.
Nous apprendrons à nous servir de l'injection de dépendances et des services pour réaliser des applications modulaires à base de briques prévues pour être réutilisées et assemblées entre elles.
Nous verrons également comment quel bénéfice tirer des nombreux fichiers de configuration déclaratifs qui évitent (voire empêchent) un bon nombre de mauvaises pratiques et facilitent l'administration des applications.
A la fin de ce premier cours, vous pourrez développer vos propres applications à partir de la boîte à outils de Symfony, mais aussi des nombreuses bibliothèques disponibles sur les dépôts PHP.
Troisième chapitre d'une formation Symfony 2,
l'Objectif de ce chapitre peut se résumer dans les points suivants :
- Présentation de l'ORM Doctrine 2
- Génération d'entité et utiliser les annotations pour modéliser une base de donnée relationnelle
- Écriture et Lecture des données.
New Symfony Tips & Tricks (SymfonyCon Paris 2015)Javier Eguiluz
This talk included tens of tips and tricks, new features and rarely used options for Symfony and its ecosystem. Besides the full-stack Symfony framework, other related technologies were mentioned, like Doctrine, Composer, Twig, PHPUnit and Monolog.
Il n'y a que des bugs faciles à résoudre... quand on a de quoi les cerner ! Le développeur PHP dispose de toute une panoplie d'outils pour tracker les situations les plus rocambolesques. Depuis ses débuts, Symfony n'a eu de cesse d'améliorer l'expérience du développeur en proposant des solutions d'accompagnement robustes et génériques. Les connaissez-vous suffisament ? Lors de cette présentation, je vous donnerai les clefs des mécanismes de debugging présents dans Symfony : VarDumper, Web Debug Toolbar, logs, gestionnaire d'erreur fatales et d'exceptions, etc.
Twig is the template engine used by Drupal 8 and other modern PHP applications. Twig's expressiveness, consistency and secure-by-default policy are still unparalleled among PHP's template engines.
In this session you'll learn advanced techniques, tips and tricks useful for real-world applications and uncommonly used features that will allow you to master Twig.
Conference drupal 8 au Forum PHP 2013 à ParisChipway
Conférence sur les nouveautés de Drupal 8 lors du Forum PHP 2013 à Paris.
Léon Cros a parlé de Views, Symfony2, Editeur CKEditor, Édition directe, HTML5, Mobile et smartphones, services web, ...
Présentation utilisée en guise de support lors du Symfony Live 2014 à Paris sur comment migrer rapidement et simplement une application Symfony2 sur Azure. L'exemple se base principalement sur comment migrer son système de stockage de données et sa gestion des fichiers via la mise en place d'un Blob Storage.
Bien que Docker soit facile d'utilisation, construire une image reste un exercice compliqué.
Optimisation, layers, et sécurité nécessitent de s'abstraire des Dockerfile basiques qu'on peut trouver sur internet.
Dans ce BBL, nous verrons comment bien packager une application Spring Boot dans une image Docker/OCI.
Nous allons parcourir les bonnes pratiques préconisées par Spring, les pièges à éviter, comment bien écrire un Dockerfile pour optimiser la construction et l'image finale pour une exécution dans Kubernetes et nous verrons aussi des moyens alternatifs de construction d'images Spring Boot et l'outillage d'analyse à ajouter à votre toolbox.
Atelier Framework Web Côté Serveur
TP N° 2
Les Bases de Symfony
Objectifs
• Découvrir l’architecture d’un projet Symfony et son principe de fonctionnement,
• Découvrir la structure des fichiers PHP sous Symfony (namespace, Class, use, …)
• Créer un Bundle et découvrir son architecture,
• Découvrir les Contrôleurs et les Routes.
FRAMEWORK PHP – notre dernier « cahier techno » !
PHP est aujourd’hui le langage de développement Web le plus populaire. Au cours de son ascension un certain nombre de Frameworks ont émergés afin d’aider les développeurs et de standardiser certaines bonnes pratiques.
David Négrier, notre CTO, explique l’intérêt des Frameworks dans un projet Web et réalise un test en « temps réel » sur des Frameworks majeurs du marché.
Comment réussir son projet en Angular 1.5 ?Maxime Bernard
À travers un retour d'éxpérience, je vous propose de découvrir les outils, les nouveautés d'Angular 1.5 et quelques tips & tricks qui vous aideront dans la réussite de votre projet Angular.
Accroître la sécurité de son site internet et de Joomla! plus spécifiquementChristophe Avonture
Reccueil de conseils permettant d'accroître la sécurité de son site internet, plus spécifiquement Joomla!. Cette présentation aborde la sécurité sur le web en général (stratégie de mots de passe, protection de l'ordinateur, ...) puis celle d'un site web. Plusieurs outils sont epxliqués dont aeSecure qui est un parefeu logiciel permettant de protéger tout site tournant sur un serveur Apache.
Présentation de Maven et de son utilisation en entreprise dans le cadre du Ch'ti JUG, le 15 juin 2009.
Pourquoi Maven ? Pourquoi l'adopter ? Les bonnes et mauvaise pratiques. Son avenir ...
Objectif général
Prendre en main l’un des framework PHP les plus utilisés
Objectifs opérationnels
Structurer les fonctionnalités grâce aux bundles
Faire correspondre une URL donnée à un traitement précis grâce au routage
Traiter les requêtes grâce aux contrôleurs
Intégrer des données dans des templates grâce à TWIG
Faciliter la communication avec une base de données grâce à Doctrine
Permettre à un utilisateur d’initialiser ou de modifier les attributs d'un objet métier grâce aux formulaires
2. Noel GUILBERT
• Développeur Symfony depuis 2005
• Consultant et formateur à SensioLabs
• http://www.noelguilbert.com
• http://twitter.com/noelguilbert
3. Avant propos
• La version actuelle est en cours de développement
• Une version stable est prévue pour bientôt
• Les éléments présenté durant cette session peuvent changer
4. Rappel
Les bonnes pratiques que vous avez appris avec symfony 1 sont bien
évidemment toujours d'actualité:
• Pas de logique métier dans les templates, ni dans les contrôleurs
: uniquement dans les classes métier
• Gérer la présentation dans les vues : pas dans les contrôleurs ni
les classes métier
• Ne dupliquez pas de code
• Ne modifiez pas directement les classes du framework
• ...
5. Here we Go !
30 astuces et bonnes pratiques à propos de Symfony2
• Par où commencer ?
• Comment organiser votre code ?
• Quel moteur de templates choisir ?
• Configuration
• Gestion des erreurs
• Templating
• Comment utiliser l'injecteur de dépendances ?
• Profiling
• Debugging
• Sécurité
• Performances
7. Par où commencer ?
• Documentation: http://docs.symfony-reloaded.org/master/
◦ Quick Tour: 1h pour prendre en main le framework
◦ Flat PHP application to Symfony2: un autre tutorial pour prendre en main le framework
◦ Guides: http://docs.symfony-reloaded.org/master/guides
◦ Cookbook: http://docs.symfony-reloaded.org/master/cookbook
• Sandbox: version prépackagée d'une application Symfony2
◦ Pour le moment, c'est la seule méthode recommandée pour démarrer un projet
9. Organisation des projets
Projets
• Avec Symfony2, aucune structure n'est imposée
• La sandbox est une structure possible, respectant les bonnes
pratiques
• Si vous voulez que vos projets soit facilement repris en main par
différents développeurs, gardez le modèle de la sandbox
10. Organisation des applications
Les applications
• Avec Symfony2, vous aurez généralement besoin que d'une
seule application:
◦ Le système de sécurité permet de cloisonner efficacement
chaque fonctionnalité (backend/frontend)
◦ Les classes et services sont chargés uniquement si vous les
utilisez: pas d'impact sur les performances
11. Multi applications
• Vous pouvez avoir besoin de plusieurs applications:
◦ Projet avec beaucoup de fonctionnalités, et avec un besoin
cloisonnement
◦ Séparation importante entre les différentes fonctionnalités
• Généralement, vous avez surtout besoin de créer un nouveau
projet
12. Organisation en multi-applications
Exemple de projet avec plusieurs applications
/application1/
Application1Kernel.php
...
/application2/
Application2Kernel.php
...
/web/
application1.php
application2.php
...
13. Organisation des bundles
Les bundles
• Organisez vos bundles en briques logicielles: chaque bundle est responsable d'une
fonctionnalité:
◦ ForumBundle
◦ BlogBundle
◦ UserBundle
◦ ShopBundle
src/Sensio/
Bundle/
UserBundle/
Controller/
UserController.php
ShopBundle/
Controller/
OrderController.php
15. Isolez vos classes métiers
Problématique
• Souvent, vous avez des classes qui sont réutilisées dans plusieurs bundles
• Ces classes peuvent même être utilisées dans des projets n'utilisant pas Symfony2
Solution
• Les bundles sont uniquement des liens entre votre code métier et le framework
• Vous pouvez donc avoir des classes en dehors de vos bundles
• C'est le choix d'architecture qui a été fait pour le framework: Bundles vs Components
16. Séparez vos classes métiers des
bundles
Exemple de structure avec une séparation des classes métiers et des
bundles
src/Sensio/
Bundle/
UserBundle/
OrderBundle/
Business/ <--------- Classes metiers
Form/
User.php
Validator/
Order.php
Entity/ <--------- Entites Doctrine2
User.php
17. Séparez vos classes métiers des
bundles
Grâce à l'autoloading, vous pouvez très simplement charger des classes qui ne sont pas dans un bundle.
<?php
use SymfonyComponentClassLoaderUniversalClassLoader;
$loader = new UniversalClassLoader();
$loader->registerNamespaces(array(
'Sensio' => __DIR__.'/../src',
));
$loader->register();
# in your application
new SensioBusinessFormUser();
18. Spécificité pour les entités
Doctrine2
Déclarez les mappings
Il faut indiquer à Doctrine2 où sont les entités, lorsqu'elles ne sont pas dans un bundle:
# app/config/config.yml
orm:
auto_generate_proxy_classes: %kernel.debug%
mappings:
Sensio:
type: annotation
prefix: Sensio
dir: %kernel.root_dir%/../src/Sensio/Entity
22. Bibliothèques externes
• Par défaut, la sandbox est fournie avec toutes les bibliothèques externe qu'elle supporte:
◦ Symfony2
◦ Twig
◦ Doctrine
◦ SwiftMailer
◦ Assetic
• Retirez les bibliothèques que vous n'utilisez pas:
◦ Supprimez les répertoires correspondants
◦ Retirez les de la configuration de l'autoloader
◦ Désactivez les bundles associés
24. Ne divulgez plus vos mots de passes
Utilisez des variables d'environnement
• Vous pouvez définir des variables d'environnement spécifiques pour vos projets Symfony2:
◦ Les variables doivent être préfixées par SYMFONY_ _
◦ Vous pouvez ensuite utiliser ces paramètres naturellement dans vos fichiers de
configuration
25. Ne divulgez plus vos mots de passes
Configuration des variables d'environnement depuis un VirtualHost
# VirtualHost configuration
<VirtualHost *:80>
Servername www.domain.tld
# ...
SetEnv SYMFONY__DATABASE_USERNAME "sflive"
SetEnv SYMFONY__DATABASE_PASSWORD "s3cr3t"
</VirtualHost>
# Application configuration: app/config/config.yml
doctrine:
dbal:
username: %database_username%
password: %database_password%
27. Le format INI
Généralement, n'utilisez pas le format INI pour vos projets:
• La syntaxe est limité
• Pas de validation
28. Le format INI
Le format INI peut être utile dans certains cas
Si vous souhaitez fournir une application paramétrable à des profils peu techniques, vous pouvez
utiliser le format INI.
; blog.ini
[parameters]
blog.admin.email = noelguilbert@gmail.com
blog.admin.name = Noël
Importez ce fichier dans la configuration de votre bundle:
<container>
<imports>
<import resource="blog.ini" />
</imports>
<services id="blog.notification.email"
class="SensioBlogBundleNotificationEmail">
<argument key="admin_email">%blog.admin.email%</argument>
<argument key="admin_name">%blog.admin.name%</argument>
</services>
</container>
30. Utilisez Twig
• Deux moteurs de templates sont disponibles par défaut avec Symfony2:
◦ PHP
◦ Twig
• Twig est le moteur de template recommandé :
◦ Protection XSS
◦ Mode sandbox
◦ Limite la logique métier dans les templates
◦ Utilisable très facilement par les intégrateurs HTML
32. Surcharge des pages d'erreurs
Plusieurs solutions sont à votre disposition:
• Surcharger uniquement les templates
• Surcharger les contrôleurs
• Créer un service pour surcharger le comportement du framework
33. Surcharge des pages d'erreurs
• Surchargez les templates:
◦ app/view/FrameworkBundle/error.html.twig
◦ app/view/FrameworkBundle/error.xml.twig
◦ app/view/FrameworkBundle/error.json.twig
<!-- app/view/FrameworkBundle/error.html.twig -->
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<h1>Oops! An Error Occurred</h1>
<h2>The server returned a "{{ status_code }} {{ status_text }}".</h2>
<div>
Something is broken. Please e-mail us at [email] and let us know
what you were doing when this error occurred. We will fix it as soon
as possible. Sorry for any inconvenience caused.
</div>
</body>
</html>
34. Surcharge des pages d'erreurs
• Par défaut, les exceptions sont récupérées par un controller.
• Vous pouvez utiliser un autre contrôleur
# app/config/config.yml
framework:
exception_controller: SensioHelloBundleControllerErrorController
• Votre contrôleur doit implémenter une méthode showAction
<?php
namespace SensioHelloBundleController;
class ErrorController extends ContainerAware
{
public function showAction(FlattenException $exception)
{
// do whatever you want here
return new Response(/* ... */);
}
}
35. Surcharge des pages d'erreurs
• Si vous voulez complètement surcharger le mécanisme
d'exception de symfony, vous pouvez utiliser un service
• Ce service doit écouter l'évènement core.exception
36. Surcharge des pages d'erreurs
Déclaration du service
<service id="sensio.error_handle" class="SensioErrorExceptionHandler">
<tag name="kernel.listener"
event="core.exception"
method="handleException"
priority="-128"
/>
</service>
Implémentation du service
<?php
namespace SensioError;
class ExceptionHandler
{
public function handleException(EventInterface $event)
{
$exception = $event->get('exception');
// do whatever you want here
return new Response(/* ... */);
}
}
38. Contrôleurs
Les contrôleurs ne doivent pas hériter de la classe Controller du
FrameworkBundle.
<?php
namespace HelloBundleController;
use SymfonyBundleFrameworkBundleControllerController;
class BadController extends Controller
{
// your code here
}
39. Contrôleurs
Pourquoi ce n'est pas conseillé:
• Les méthodes fournies par cette classe ne sont que des
raccourcis
• Surtout utile pour débuter avec le framework
• Cette dépendance n'est pas obligatoire
• L'overhead ajouté n'apporte aucun bénéfice
40. Contrôleurs
Ce contrôleur est correct:
<?php
# Sensio/HelloBundle/Controller/Controller.php
namespace SensioHelloBundle;
class SimplestController
{
/**
* @extra:Route("/hello")
*/
public function hello()
{
return new Response('Hello World');
}
}
41. Contrôleurs
Oui, les contrôleurs peuvent être de simples objets PHP
Avantages: Inconvénients:
• Aucune dépendance • Aucun moyen d'accéder aux différentes
fonctionnalités du framework: request,
• Pas d'overhead entity_manager, etc.
• Très facile à comprendre
42. Contrôleurs
Solution 1: Hériter de ContainerAware
<?php
namespace HelloBundleController;
use SymfonyComponentDependencyInjectionContainerAware
class GoodController extends ContainerAware
{
public function indexAction()
{
$em = $this->container->get('doctrine.orm.entity_manager');
}
}
Avantages:
• Plus de dépendances vers Controller
• Les mêmes fonctionnalités sont disponibles
• Pas d'overhead
43. Contrôleurs
Solution 2: utiliser des services en tant que controlleurs
Avantages:
• Vous contrôlez vos dépendances via l'injecteur de dépendances
• Vous pouvez tester unitairement vos contrôleurs
44. Contrôleurs
Définition d'un contrôleur via l'injecteur de dépendances
• Définition du service
<!-- HelloBundle/Resources/controllers.xml -->
<service id="better_controller" class="HelloBundleControllerServiceController" />
• Configuration du routing
my_route:
defaults: { _controller: better_controller:index }
• Votre contrôleur est toujours un objet PHP classique
<?php
namespace HelloBundleController;
class ServiceController
{
public function indexAction()
{
}
}
45. Contrôleurs
Exemple: un contrôleur ayant accès aux services suivant:
• Le service de templating
• L'entity manager
Configuration du service:
# HelloBundle/Resources/controllers.xml
<service id="product_controller" class="HelloBundleControllerProductController">
<argument type="service" id="templating" />
<argument type="doctrine.orm.entity_manager" />
</service>
46. Contrôleurs
Implémentation du contrôleur:
<?php
namespace HelloBundleController;
class ProductController
{
public function __construct(EngineInterface $templating, EntityManager $em)
{
$this->templating = $templating;
$this->em = $em;
}
public function indexAction()
{
$products = $this->em->getRepository('HelloBundle:Product')->findAll();
return $this->templating->renderResponse(
'HelloBundle:Product:list.html.twig',
array('products' => $products)
);
}
}
48. Inclusions des assets
Assets avec Symfony2
• Avec Symfony2, il n'y a plus de gestionnaire d'assets permettant d'ajouter les styles css à
utiliser
• Utilisez plutôt les blocs twig pour gérer vos assets.
Dans votre layout de base:
{# app/views/base.html.twig #}
<html>
<head>
{%block stylesheets %}{% endblock %}
</head>
<body>
{# ... #}
{%block javascripts %}{% endblock %}
</body>
</html>
49. Inclusions des assets
Choisissez les assets à utiliser directement dans vos templates:
{# HelloBundle/Resources/views/Default/index.html.twig #}
{% block stylesheets %}
<link href="{{ assets("bundles/hello/css/styles.css") }}" rel="stylesheet" />
{% endblock %}
{% block javascripts %}
<script src="{{ assets("bundles/hello/js/script.js") }}" type="text/javascript"></scr
{% endblock %}
51. Twig: Utilisez les macros
Cas d'utilisation classique: des boutons html personnalisés
Le code HTML correspondant pourrait être le suivant:
<a href="#" class="button">
<span>
<span>
<span>
Nice Button
</span>
</span>
</span>
</a>
52. Twig: Utilisez les macros
Réalisez un macro permettant de réutiliser facilement ce code
HTML
{# HelloBundle/Resources/views/macro.html.twig #}
{% macro button(url, text) %}
<a href="{{ url }}" class="button">
<span>
<span>
<span>
{{ text }}
</span>
</span>
</span>
</a>
{% endmacro %}
Réutilisez cette macro dans vos templates:
{# HelloBundle/Resources/views/Default/index.html.twig #}
{% from "HelloBundle::macro.html.twig" import button %}
{{ button("Nice Button!") }}
54. Internationalisation
Internationalisez vos projets
• Parce que vous ne savez pas comment votre projet va évoluer
• Parce que l'impact en terme de performances est négligeable
• Parce que implémenter l'internationalisation après coup vous prendra beaucoup de temps
57. L'injecteur de dépendance est à la base du framework.
Domptez-le, et vous aurez le pouvoir de Symfony2 entre vos
mains!
58. Apprenez à utiliser l'injecteur de
dépendances
Ressources sur ce sujet:
• http://www.slideshare.net/fabpot
• http://fabien.potencier.org/article/13/introduction-to-the-symfony-service-container
• http://components.symfony-project.org/dependency-injection/
60. Règles générales:
• Les classes doivent être utilisables sans le conteneur
• Seul le conteneur connait les dépendances, et pas l'inverse
• Ce n'est pas LA solution à tous vos problèmes
62. Définir vos services
Utilisez le format xml pour décrire vos services:
• Un peu plus verbeux
• Mais beaucoup plus simple à appréhender et à comprendre
• Autocomplétion dans les éditeurs XML qui le supporte
64. Injecteur de dépendances
Quand l'utiliser?
L'injecteur de dépendances doit être utilisés pour les objets
métiers qui ont une portée globale:
• request
• http kernel
• entity manager
• caching driver (memcache, apc, ...)
66. Injecteur de dépendances
Quand ne pas l'utiliser ?
L'injecteur de dépendances ne doit pas être utilisés dans les
cas suivants:
• Retrouver une instance d'un objet métier (i.e. un produit
dans une base de données)
• Pour un objet n'ayant pas une portée globle: un objet métier
n'étant utilisés que dans un controleur, par exemple
68. Ne pas injecter le container
Il ne faut pas injecter le container dans les objets:
• Cela crée une dépendance forte avec le conteneur alors que vous avez rarement la nécessité
• Vous ne pourrez plus utiliser vos classes sans le conteneur
<?php
namespace SensioProduct
class Manager
{
public function __construct($container)
{
$this->dbh = $container->get('doctrine.dbal.default_connection');
}
}
69. Injecteur de dépendances
Injecter directement le service concerné:
<?php
namespace SensioProduct
class Manager
{
public function __construct($dbh)
{
$this->dbh = $dbh;
}
}
71. Sécurité
Le module de sécurité est une part très spécifique de la
configuration de votre projet
Vous y définissez:
• Comment retrouver vos utilisateurs
• A quelles ressources il peuvent accéder
• Comment il peuvent accéder à ces resources
La bonne pratique est de définir ces informations dans un fichier spécifique
75. Profiling:
Surveillez également vos redirections:
• Les actions réalisant des redirections font très souvent des dizaines de requêtes
• En environnement de développement, Symfony2 intercepte ces redirections pour vous permettre
d'analyser l'exécution
77. Profiling:
Il arrive parfois qu'un problème survienne en production sans que
vous soyez capable de comprendre le problème.
• Avec symfony 1, une des solutions est d'activer le debug le
temps de comprendre ce qu'il se passe.
• Avec Symfony2, vous pouvez activer le profiler en production
sans activer l'affichage des erreurs.
Activer le profiling en production:
# app/config/config_prod.yml
framework:
profiler: { only_exceptions: true }
80. Utilisez les annotations
Les annotations permettent de définir des comportements, des éléments de configuration, etc...
<?php
/**
* @orm:Entity
*/
class User
{
}
Ce format de configuration est très pratique:
• Il permet de définir des comportements directement dans les classes concernés
• Tout est centralisé: vous n'avez plus à vous rappeler dans quel fichier tel ou tel comportement est
défini
82. FrameworkExtraBundle
Le bundle FrameworkExtraBundle vous donne accès à d'avantages
d'annotations pour configurer:
• Le routing
• La ou les méthodes HTTP possible pour une règle de routing
(GET, POST, ...)
• les templates à utiliser
• Le cache HTTP
• Convertir des paramètres de requêtes (en entité Doctrine, par
ex.)
83. FrameworkExtraBundle
Exemple de contrôleur:
<?php
class AwesomeController extends ContainerAware
{
/**
* @extra:Route("/awesome/controller")
* @extra:Method("GET")
* @extra:Template("SensioHelloBundle:Default:index.html.twig")
* @extra:Cache(maxage=600)
*/
public function indexAction()
{
}
}
86. Autoloading
• L'un des goulot d'étranglement classique en PHP est l'autoloading.
• Les performances exceptionnelles de Symfony2 s'expliquent en partie par des solutions visant à
optimiser le chargement des classes du framework
• Vous pouvez également profiter de ces améliorations pour vos projets, grâce aux extensions de
l'injecteur de dépendance.
<?php
namespace SensioUserBundleDependencyInjection;
class UserExtension extends Extension
{
public function load(array $config, ContainerBuilder $container)
{
/* ... */
$this->addClassesToCompile(array(
'SensioUserBundleModelUser'
));
}
}
87. Autoloading
Vos classes sont "compilées" dans un fichier unique:
<?php
# app/cache/prod/classes.php
/* ... */
namespace SensioUserBundleModel {
class User {
/* your code */
}
}
Avantages:
• Plus besoin de passer par l'autoloader: vos classes sont forcéments chargées à chaque requête
HTTP
• Moins d'accès disque pour charger les classes
• Ce fichier est mis en cache par les gestionnaire d'opcode (APC, EAccelerator, XCache)
88. Autoloading
L'arme secrète de Symfony2 est à votre portée!
• Attention : cette fonctionnalité peut avoir l'effet inverse si elle
est trop utilisée
90. Cache Warmer
La commande cache:warmup permet de pré-compiler tous les fichiers nécessaire en cache:
• Templates
• Injecteur de dépendance
• Routing
• Autoloading
$> php symfony cache:warmup
92. Doctrine: vérifier la configuration
Une commande dédiée vous permet de vérifier la bonne
configuration de Doctrine2 dans Symfony2:
$> php app/console doctrine:ensure-production-settings