Présentation de Symfony
Lors de la création d'applications, utiliser un framework (cadre de développement) améliore le développement en automatisant certaines tâches récurrentes . En apportant une structure, un framework guide le développeur lors de l'écriture. Il l'aide à produire un code plus propre, plus efficace et plus facile à maintenir. De plus, les opérations complexes s'y retrouvent découpées en processus simples et organisés. Le développement s'en trouve facilité.
Symfony est un framework complet, configuré pour accélérer le développement d'applications web grâce à plusieurs fonctionnalités décisives. La première est sa structure même, qui guide les débutants en séparant distinctement les traitements liés au modèle fonctionnel, de ceux qui sont du ressort de la présentation ou de la logique serveur (cette structure est basée sur le Design Pattern MVC). Ensuite, il propose au développeur de nombreuses classes et de nombreux outils qui assistent et accélèrent la création d'une application web complexe. Il automatise ainsi les tâches les plus courantes, permettant au développeur de se concentrer sur les spécificités de l'application. Au final, le bénéfice apporté est tout simplement qu'on ne réinvente plus la roue à chaque nouvelle application développée !
Symfony a été entièrement codé en PHP5. Il a été intensivement testé sur de nombreux sites en production comme des sites d'e-commerce à très fort trafic. Symfony est compatible avec la majorité des moteurs de base de données comme MySQL, PostgreSQL, Oracle ou Microsoft SQL Server. Il fonctionne aussi bien sur les plates-formes Windows que *nix. Voyons de plus près quelles sont ses fonctionnalités.
Les fonctionnalités de Symfony
Symfony a été conçu pour répondre aux besoins suivants :
- Facilité d'installation et de configuration sur la plupart des plates-formes (et fonctionnement garanti sur les plates-formes standards *nix et Windows) notammenet à l'aide des canaux PEAR
- Indépendance vis-à-vis des moteurs de base de données, c'est à dire qu'il intègre une couche d'abstraction pour les bases de données
- Simplicité dans l'utilisation pour la plupart des cas, mais également suffisamment de flexibilité pour s'adapter aux cas complexes
- Une utilisation basée sur le principe de la convention plutôt que sur la configuration : les développeurs ne s'occupent que de ce qui sort de l'ordinaire. Le reste est géré par Symfony
- Compatibilité avec la plupart des motifs de conceptions et les bonnes méthodes de développement (en particulier avec le Design pattern MVC)
- Paré pour l'entreprise : adaptabilité avec les standards et les architectures existants (IT), et une stabilité satisfaisante pour des projets à long terme
- Un code très lisible et commenté à l'aide de phpDocumentor, pour une maintenance facile
- Facilité d'extension permettant l'intégration avec d'autres bibliothèques commerciales
Génération automatique des fonctionnalités de vos projets Web
La plupart des fonctionnalités communes aux projets web sont automatisées avec Symfony, comme par exemple :
- L'internationalisation est prise enn charge
- le système de template permet d'intégrer le travail de l'infographiste et du web designer. les templates peuvent être réutilisés par inclusion.
- Les formulaires s'occupent automatiquement de la validation et du réaffichage des données saisies.
- L'affichage est échappé, protégeant les applications des attaques par données corrompues (ex: XSS, cross script).
- Les fonctions de gestion de cache réduisent l'utilisation de bande passante et la charge serveur.
- L'authentification et la gestion de droits facilitent la gestion de la sécurité et la création de sections à accès restreint.
- Le routing et les URLs intelligentes font de l'adresse de la page un élément à part entière de l'interface compréhensible par un moteur de recherche.
- La fonction intégrée d'email et la composante de gestion de l'API permettent à vos applications d'êtres plus complètes qu'une simple page web.
- Les affichages de données rendus ergonomiques grâce à la pagination automatique, aux possibilités de tri et de filtrage des données.
- Les plugins, les extensions et les classes abstraites fournissent un haut degré d'extensibilité.
- Les actions Ajax sont simples à utiliser et ce grâce aux helpers encapsulant les effets Javascript.
Environnement de développement et Outils
Pour répondre aux besoins des entreprises ayant leurs propres normes de codage et leur propres règles de gestion de projet, Symfony peut être entièrement configuré. Il fournit, par défaut, plusieurs environnements de développement et est livré avec de multiples outils permettant d'automatiser les tâches classiques en développement logiciel :
- Les outils de génération de code sont capables de générer une interface d'administration en seulement un clic.
- Les composantes intégrées de tests unitaires et fonctionnels facilitent la phase de recette du développement.
- Lorsqu'un développeur travaille sur une page, le panneau de débug facilite la correction des erreurs en lui affichant toutes les informations dont il a besoin.
- L'interface en ligne de commande automatise le déploiement d'applications entre deux serveurs.
- Les modifications de configuration à la volée sont possibles et efficaces.
- Les outils de logs fournissent aux administrateurs tous les détails de l'activité d'une application.
Qui a créé Symfony et Pourquoi ?
La première version de Symfony a été publiée en octobre 2005 par le fondateur du projet Fabien Potencier, le co-auteur de ce livre. Fabien est le PDG de Sensio (http://www.sensio.com), une agence web française bien connue pour sa vision innovante en matière de développement web.
En 2003, Fabien a passé du temps à étudier les outils de développement PHP open-source permettant la création d'application web. Il n'en a trouvé aucun répondant aux besoins décrits plus haut. Lorsque PHP 5 est sorti, il a alors décidé que les outils disponibles étaient devenus suffisamment matures pour être intégrés au sein d'un framework. Il a passé une année à écrire le cœur de Symfony, basant son travail sur le cœur du framework Mojavi (MVC), sur le moteur de correspondance objet-relation Propel (ORM) et sur le système de helpers des gabarits de Ruby on Rails.
À l'origine, Symfony fut créé par Fabien pour les projets de Sensio car disposer d'un framework efficace est la meilleure méthode pour développer des applications rapidement et efficacement. Cela rend également le développement web plus intuitif et les applications produites plus robustes et plus faciles à maintenir. Le cadre de développement ayant fait ses preuves lors du développement d'un site e-commerce d'un vendeur de lingerie, il fut ensuite réutilisé pour d'autres projets.
Après avoir utilisé Symfony avec succès sur plusieurs projets, Fabien a décidé de le publier sous une licence open source. Il l'a fait pour livrer son travail à la communauté, pour bénéficier des retours des utilisateurs, pour démontrer le savoir-faire de Sensio, mais aussi pour le fun.
Note Pourquoi « Symfony » et non pas « !FooBarFramework » ? Parce que Fabien voulait un nom court contenant un s (comme Sensio) et un f (comme framework), facile à retenir et qui ne soit pas associé à un autre outil de développement. Ajouté à celle qu'il n'aime pas les majuscules, Symfony correspondait alors bien (même si c'est du mauvais français) et était disponible comme nom de projet. L'autre alternative étant «baguette ».
Pour que Symfony soit un projet open-source à succès, il avait besoin d'une documentation complète, en anglais, facilitant son adoption. Fabien a demandé à François Zaninotto - employé de Sensio et co-auteur de ce livre - de se pencher sur le code du projet et d'en tirer un livre en ligne. Cela ne s'est pas fait en un jour, mais lorsque le projet fut rendu public, il était suffisamment documenté pour attirer de nombreux développeurs. La suite c'est vous qui l'écrirez.
netographie
- site officiel du projet : http://www.symfony-project.org/
- la documentation : http://www.symfony-project.org/book/1_0/
- tous les plugins officiels : http://www.symfony-project.org/plugins/
- le tutoriel askeet : http://www.symfony-project.org/askeet/1_0/en/
- ressources en français : http://trac.symfony-project.org/wiki/Resources/fr_FR
Concepts fondamentaux
Avant de débuter vous devez être familier avec quelques concepts de bases. Passez cette partie si les termes OOP, ORM, RAD, DRY, KISS, TDD, YAML, et PEAR ne vous sont pas étrangers.
PHP 5
Symfony est développé en PHP5 (http://www.php.net/) et est prévu pour développer des applications grâce à ce langage. Cependant, une solide connaissance de PHP5 est nécessaire pour tirer le meilleur parti du framework.
Les développeurs qui connaissent déjà PHP4 mais pas PHP5 devraient principalement se pencher sur la partie objet de celui-ci.
PHP Extension and Application Repository (PEAR)
http://pear.php.net/
PEAR est « un framework et un système de distribution pour composant PHP réutilisable » PEAR vous permet de télécharger, installer, mettre à jour et désinstaller des scripts PHP. Lorsque vous utilisez un paquet PEAR, vous n’avez pas besoin de vous soucier de l’emplacement des scripts, de la façon de les rendre accessibles, ou de la façon d’étendre l’interface en ligne de commande (CLI)
PEAR est un projet communautaire écrit en PHP et embarqué en standard dans les distributions PHP
PEAR est la solution la plus professionnelle pour l’installation des librairies PHP. Symfony recommande l’utilisation de PEAR afin de centraliser l’installation au travers de multiples projets. Les plug-in Symfony et le framework lui-même sont des paquets PEAR.
Vous n’avez pas besoin de connaître toute la syntaxe PEAR pour utiliser Symfony, vous devez simplement l’installer et comprendre ce qu’il fait. Pour vérifiez la présence de PEAR sur votre machine, exécuter la commande suivante sur une ligne de commande :
> pear info pear
En réponse vous devriez avoir le numéro de version de l’installation de PEAR
Le projet Symfony possède son propre dépôt PEAR ou canal. Attention, ce canal n’est disponible que depuis la version 1.4.0 de PEAR. Par conséquent, vous devrez mettre à jour votre installation si elle est antérieure à cette version. Pour ce faire, exécuter la commande suivante :
> pear upgrade PEAR
L’Object-Relational Mapping (ORM)
Les bases de données sont relationnelles, PHP5 et Symfony sont orientés objets. Pour faire communiquer les deux logiques, il est nécessaire d’employer une interface pouvant faire la passerelle entre les deux. Cette interface est appelée mappage objet-relationel (Object-Relational Mapping ou ORM)
Un ORM est composé d’objets donnant accès aux données tout en conservant la logique de métier.
A l’heure actuelle le meilleur ORM disponible pour PHP5 est Propel. Symfony intègre parfaitement ce projet open source et c’est pourquoi la manipulation de données décrite dans cette ouvrage suit la syntaxe Propel. Ce livre va vous expliquer comment utiliser les objets Propel, mais pour de plus amples informations, visitez le site web de du projet (http://propel.phpdb.org/trac/).
Rapid Application Development (RAD)
La programmation d’applications web a longtemps été lente et fastidieuse. En suivant le cycle de développement traditionnel (comme le RUP : Rational Unified Process par exemple), le développement d’applications web ne pouvait pas commencer avant qu’un ensemble de préliminaires soient établis, qu’un nombre conséquent de diagrammes UML (Unified Modeling Language) soient dessinés, qu’une tonnes de documentations soient écrites. C'était dû à la vitesse générale du développement, au manque de polyvalence des langages de programmation (vous deviez écrire, compiler, redémarrer et dieu sait quoi encore avant de voir votre programmer tourner) et surtout, au fait que les clients étaient assez raisonnables et ne changeaient pas d’idées constamment.
L’usage des langages script comme Perl et PHP rend plus facile la mise en place de nouvelles stratégies de développement comme le RAD (Rapid Application Developpement) ou les méthodes agiles de développement.
Une des idées directrices de ces méthodes est de pouvoir débuter le développement aussi vite que possible afin que le client puisse donner de nouvelles indications en s’appuyant sur un prototype fonctionnel. L’application se construit alors sur un mode itératif, créant des versions de plus en plus riches dans un cycle de développement court.
Les avantages pour le développeurs sont nombreux. Il n’a plus besoin de se soucier de l’avenir lorsqu’il implémente une nouvelle fonctionnalité. La méthode employée devra être la plus simple possible. Cette idée peut-être illustrée par l’acronyme anglais KISS (Keep It Simple, Stupid) que l’on peut traduit par : Fait le simple, idiot. (NdT : évidemment FLSI c’est moins parlant)
Lorsque les besoin évoluent ou lorsqu’une nouvelle fonctionnalité est ajouté, le code existant doit généralement être partiellement ré écrit. Cela est appelé le refactoring et est très fréquent dans le développement d’une application web. Le code est déplacé ailleurs en fonction de sa nature. Des parties similaires de codes sont fusionnées en un seul emplacement. Ce principe correspond à un autre acronyme anglais : DRY (Don’t Repeat Yourself) traduisible par : ne te répètes pas toi-même
Pour s’assurer que l’application fonctionne toujours malgré les changements incessant, il est nécessaire d’avoir un jeu de test complet afin d’automatiser les tests unitaires. S’il est correctement défini, il devient alors une manière sûre de vérifier l’intégrité du développement après un ajout de code ou un refactoring. Il existe même certaines méthodes de développement qui nécessitent l’écriture du jeu de test avant le codage. Ce principe est le développement piloté par les tests connu via l’acronyme anglais TDD (test-driven development)
Symfony est parfait pour le RAD. En fait, il a été construit sur ce principe par une web agency appliquant le RAD pour ses propres projets. Apprendre Symfony ne consiste donc pas à apprendre un nouveau langage mais plus employé les bons usages et faire les bons choix dans l’idée de réaliser des applications de façon plus efficace.
Le site du projet Symfony propose un tutoriel pour comprendre le développement basé sur une méthode agile . Il s’agit d’askeet (http://www.symfony-project.org/askeet), et nous vous recommandons de vous pencher dessus si vous souhaitez en savoir plus sur ce type de développement.
YAML
Selon le site officiel du YAML(http://www.yaml.org/), YAML est un langage de sérialisation de données simple pensé pour être aisément compréhensible et renforcer l’interaction avec des langages script. Autrement dit, YAML est un langage simplifié de description de données en XML. C’est particulièrement utile pour décrire des données pouvant être représentées par une combinaison de listes, tableaux (de hachage) et données scalaires, comme ce qui suit :
[php]
$house = array(
'family' => array(
'name' => 'Doe',
'parents' => array('John', 'Jane'),
'children' => array('Paul', 'Mark', 'Simone')
),
'address' => array(
'number' => 34,
'street' => 'Main Street',
'city' => 'Nowheretown',
'zipcode' => '12345'
)
);
Ce tableau PHP peut automatiquement être créé par une analyse de la structure YAML suivante :
house:
family:
name: Doe
parents:
- John
- Jane
children:
- Paul
- Mark
- Simone
address:
number: 34
street: Main Street
city: Nowheretown
zipcode: "12345"
YAML est représenté par un indentation de texte où les éléments d’une liste sont identifiés pas un tiret (-), la paire clé/valeur est séparée par deux points ( :). De plus, YAML possède une syntaxe raccourcie pour décrire la même structure en moins de lignes. Les tableaux simple sont alors représentés par [] et les tableau associatif (Clé/valeur) sont représenter par {}. Par conséquent la précédente définition YAML peut s’écrire comme suit :
house:
family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] }
address: { number: 34, street: Main Street, city: Nowheretown, zipcode: "12345" }
YAML est l’acronyme de "YAML Ain't Markup Language" et doit se prononcer « yamel ». Le format date de 2001 et une multitude de parsers existe pour une grande variété de langages
Comme vous pouvez le constater, YAML est bien plus rapide que XML et bien puissant que les fichiers ini. C’est pourquoi YAML est le langage de prédilection de Symfony pour le stockage de configuration.





