Development

Documentation/fr_FR/book/1.0/01-Introducing-Symfony

You must first sign up to be able to contribute.

Version 5 (modified by Geoff, 10 years ago)
Mise à disposition du Ch1 (Relecture)

Cette partie de la documentation n'est pas encore traduite. Vous pouvez :

Chapitre 1 - Introduction à Symfony

En quoi Symfony peut-il vous aider dans vos projets ? De quoi a-t'il besoin pour fonctionner ? C'est ce que nous allons voir dans ce chapitre.

Symfony en bref

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. 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)
  • Indépendance vis-à-vis des moteurs de base 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
  • 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'interface d'internationalisation qui permet la traduction des données et des interfaces, ainsi que la localisation du contenu.
  • L'affichage utilise des gabarits et des mises en pages qui peuvent être construits par des graphistes ne connaissant pas le framework. Les raccourcis réduisent la quantité de code de présentation à écrire en en intégrant de grandes portions dans de simples appels de fonctions.
  • Les formulaires s'occupent automatiquement de la validation et du réaffichage des données saisies, assurant ainsi l'intégrité des informations stockées dans la base de données ainsi qu'un plus grand confort d'utilisation.
  • L'affichage est échappé, protégeant les applications des attaques par données corrompues (ex: XSS).
  • 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.

La communauté Symfony

Dès le lancement du site de Symfony (http://www.symfony-project.com), de nombreux développeurs du monde entier ont téléchargé et essayé le framework, ont lu la documentation en ligne, construit leurs premières applications web avec Symfony et le buzz a commencé.

Les framework ont gagné en popularité à ce moment-là et la demande en un framework PHP complet était importante. Symfony offrait une solution complète grâce à son code de grande qualité et à la documentation complète disponible : deux atouts majeurs par rapport aux autres acteurs de la scène des framework. Les contributeurs ont commencé à apparaître, proposant patchs et améliorations, validant la documentation, s'investissant dans toutes sortes de tâches nécessaires.

Le dépôts publiques des fichiers source du projet et le système de ticket offrent différentes manières de contribuer et tous les volontaires sont les bienvenue. Fabien reste le gestionnaire et décideur principal du code source du projet, garantissant ainsi la qualité du code.

Aujourd'hui, les forums Symfony, les listes mail et l'espace de discutions (IRC) offrent un support idéal aux utilisateurs, où l'on observe que chaque question reçoit une moyenne de quatre réponses. De nouveaux utilisateurs installent Symfony chaque jour, le wiki et les sections de dépôts de code hébergent un grand nombre de documentations rédigées par des volontaires. Chaque semaine, en moyenne cinq nouvelles applications déclarent utiliser Symfony et le décompte continue.

La communauté Symfony est la troisième force du projet et nous espérons que vous nous rejoindrez après avoir lu ce livre.

Ai-je besoin de Symfony ?

Que vous soyez un expert PHP5 ou un débutant, vous serez capable d’utiliser Symfony. Le facteur principal à prendre en compte est la taille de votre projet.

Si vous n’avez besoin que de créer un simple site web possédant moins de dix pages, très peu d’accès à une base de données et pas d’obligations de performances ou de documentations, alors vous devriez vous contenter simplement du PHP. L’utilisation d’un framework et des concepts objet ou d’un modèle MVC ne ferait qu’alourdir le processus de développement. De plus il est à noter que Symfony n’est pas optimisé pour une utilisation sur un hébergement mutualisé où les scripts PHP peuvent seulement fonctionner en mode CGI.

D’un autre coté, si vous développez des applications plus complexes avec une logique métier lourde, alors PHP seul n’est plus suffisant. Si vous prévoyez de maintenir ou améliorer votre application dans l’avenir, vous aurez besoin que votre code soit léger, compréhensible et optimisé. Si vous souhaitez profiter des dernières avancés technologiques (comme Ajax) simplement, sans écrire des centaines de lignes de JavaScript et enfin si vous souhaitez développer rapidement de façon ludique, alors PHP ne sera sûrement pas suffisant. C'est dans ces cas que Symfony devient indispensable.

Et, bien sûr, si vous êtes un professionnel du développement web, vous êtes déjà au fait des bénéfices tirés de l’utilisation de framework. Il vous le faut mature, très documenté et soutenu par une importante communauté. Ne cherchez plus, Symfony est votre solution

TIP Si vous ne croyez que vos yeux, rendez-vous sur le site de Symfony et profitez du screencast. Vous verrez à quel point il est facile et amusant de développer avec Symfony

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 partir objet de celui-ci.

Programmation orientée objet ( POO ou OOP)

La programmation orientée objet (POO) ne sera pas expliquée dans cet ouvrage. Il faut un livre rien que pour ça ! Mais parce que Symfony fait une utilisation intensive de ce concept disponible sous PHP5, sa connaissance est un pré-requis important pour l’apprentissage du framework

Wikipédia définit la POO comme suit :

L’idée derrière la programmation orientée objet est qu’un programme peut-être vu comme le comportement d’une collection de différentes unités, ou comme des objets qui interagissent les uns sur les autres. Par opposition, la programmation traditionnelle pourrait être vue comme un ensemble de fonctions ou plus simplement comme une suite d’instructions.

PHP5 met en œuvre les notions de classes, d’objets, de méthodes, d’héritage du concept d'orienté objet, et bien plus encore. Si vous n’êtes pas familiarisé avec ces notions, il est fortement conseillé d’en lire la partie dédiée de la documentation PHP, disponible à http://www.php.net/manual/en/language.oop5.basic.php.

Les méthodes magiques

Une des forces du comportement objet de PHP est l’utilisation des méthodes magiques. Ces méthodes peuvent être utilisées pour surclasser le comportement par défaut des classes sans en modifier le code. Elle rendent PHP moins bavard et plus extensible. Elles sont faciles à reconnaître puisque leur nom commence toujours avec un double caractère de soulignement (__). Par exemple, implicitement, lorsque vous affichez un objet PHP recherche la méthode __toString() pour voir si le développeur n’a pas défini un format particulier pour cet objet

[php]
$myObject = new myClass();
echo $myObject;
// Recherche d’une méthode magique
echo $myObject->__toString();

Les méthodes magiques sont décrites ici (http://www.php.net/manual/en/language.oop5.magic.php). Il est préférable d’en avoir une connaissance approfondie.

PHP Extension and Application Repository (PEAR)

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

TIP Le site de PEAR, http://pear.php.net/, fournit la documentation et les paquets groupés par catégories

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, si 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 et 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. [{An ORM is made up of objects that give access to data and keep business rules within themselves.}]

Un des avantages de cette couche d’abstraction est qu’elle évite l’emploi de syntaxe spécifique à une base de données. En effet, cette couche traduit automatiquement les appelles au modèle objet en requêtes SQL optimisées pour la base employée.

Cela veut dire qu’il devient aisé de changer de SGDB en plein milieu d’un projet. Imaginez que vous développiez un prototype pour un client qui n’aurait pas encore arrêté son choix sur telle ou telle base de données. Vous pourriez être amené à commencer ce prototype sur SQLite puis de passer sur MySql, PostgreSQL ou même Oracle au moment du choix du client. En une ligne de code et un fichier de configuration, cela devient possible.

Une couche d’abstraction encapsule la logique de donnée. Le reste de l’application n’a rien besoin de savoir à propos des requêtes SQL et le SQL utilisé pour l’accès au données est facile à trouver. Les développeurs spécialisés dans la programmation de base de données savent parfaitement qui faire.

Un autre avantage est la possibilité d’ajouter facilement n’importe quelle nouvelle classe d’accès à vos tables. On utilisera alors les objets à la place des enregistrement et les classes à la place des tables. Par exemple, si vous avez une table Clientcomportant deux champs , FirstNameet LastName, vous pourriez avoir envie d’accéder uniquement au nom. Dans une logique orienté objet cela se fait simplement par l’ajout d’une méthode d’accès à la classe Client comme suit :

[php]
public function getName()
{
  return $this->getFirstName().' '.$this->getLastName();
}

Tous les accès répétés aux données et la logique de métier peut-être stockée au sein de tels objets. Par exemple, considérons une classe Panier dans lequel vous conservez certains éléments (qui sont eux-mêmes des objets). Pour récupérer le total du panier, vous pouvez ajouter une méthode getTotal() comme celle-ci :

[php]
public function getTotal()
{
  $total = 0;
  foreach ($this->getItems() as $item)
  {
    $total += $item->getPrice() * $item->getQuantity();
  }
  return $total;
}

C'est tout ! Imaginez si vous aviez du écrire cela en autrement !.

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 de 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.

Aujourd’hui, le monde avance plus vite et les clients on tendances à changer d’avis régulièrement. Evidemment, ils attendent que les équipes de développement s’adaptent rapidement à leurs nouveaux desiderata et modifient rapidement une application. Heureusement, 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)

NOTE Les méthodes agiles possèdent beaucoup d’autres principes et usages, comme l’Extreme Programming (XP) Il s’agit d’une des méthodes de développement les plus efficace. Beaucoup d’ouvrages traitent de cette méthodes et vous permettront de vous familiariser avec elle. Nous vous recommandons de débuter par le livre de Ken Beck, créateur de la méthode, eXtreme Prgramming : La référence (éd. CampusPress)

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.com/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 sont alors représentés par [] [{et les fonctions de hachage par {}}]NDT (traduction incertaine). 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 ‘Yet Another 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.

TIP

Les spécifications de YAML sont disponibles sue le site http://www.yaml.org/.

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. Vous rencontrerez beaucoup de fichiers YAML dans ce livre, mais c’est tellement simple que vous n’aurez probablement pas besoin d’en apprendre plus sur le sujet.

Résumé

Symfony est un framework d’application écrit en PHP5. Il s’agit d’une couche supplémentaire au-dessus de PHP, fournissant des outils facilitant le développement d’applications web complexes. Ce livre vous expliquera comment. Vous n’avez besoin que d'être familiarisé avec les concepts de base de la programmation modernes que sont la POO (programmation orientée objet), l’ORM (object-relational mapping) et le RAD (rapid application developpement). La seule connaissance technique requise est la connaissance de PHP5.