Symfony Un projet français 1 ère version octobre 2005 Fabien Potencier PDG de sensio Lab développeur François Zanonitto écrit.

Slides:



Advertisements
Présentations similaires
Novembre 2005 – Michel Desconnets PHP : théorie Objectif : introduire les concepts globaux permettant d'aborder la programmation en PHP.
Advertisements

PHP5 its a kind of magic. Chargement automatique function __autoload( $nom_classe ) { require_once('obj/'.$nom_classe.'.class.php'); } si on exécute le.
Logiciels Libres Pour Le Web Concept express… En installer en 3mn …En personnaliser certains.
Découverte de SQL Server par la pratique pour les administrateurs expérimentés Module 4 : Stockage des données, Tables dans SQL Server Bertrand Audras.
« Les Mercredis du développement » Les Starter Kits Level 100 Présenté par Pierre Lagarde Relation technique développeur
ASP.NET v2 + Ajax = Atlas Pierre Lagarde DevDays 2006 Equipé aujourdhui, prêt pour demain !
« Les Mercredis du développement » Nouveau format de fichier Template Solution Présenté par Pierre Lagarde Relation Développeurs.
Tout commence par un modeste éditeur de texte issue dune PME à Redmond, WA-USA.
Cours de NETSILON Réalisé par: Hitcho introduction Netsilon est un logiciel qui permet de concevoir une application web avec PHP.
OTB Analog module: Input configuration with TSX PREMIUM (TSXCPP110)
Formation CCNA 07- La commutation LAN. Sommaire 1) Concepts et fonctionnement 2) Commutateurs a - Présentation b - Démarrage c - Configuration de base.
Status report SOLEIL April 2008
interface graphique permettant de faciliter la conception de topologies réseaux complexes Logiciel permettant de créer des machines virtuelles sur une.
Coopération/Distribution DEA Informatique Nancy. Content 4 Introduction - Overview 4 Coordination of virtual teams : –explicit interaction model –explicit.
Toolkit Web Framework Java pour les IHMs Cédric Dumas mars 2008 contrat Creative Commons Paternité-Pas d'Utilisation Commerciale- Partage.
TP2 ... MVC ? JList JLabel JSlider ImageLibrary Contrôleur Vue Modèle
Symfony generators. contexte Répétition de limplémentation des méthodes CRUD pour ls objets métier Commande symfony permettant dinitialiser un module.
Symfony en action I M V Controleur.
Symfony Liens & routing.
Symfony Formulaires.
Design Pattern MVC En PHP5.
PHP5 its a kind of magic. Chargement automatique function __autoload( $nom_classe ) { require_once('obj/'.$nom_classe.'.class.php'); } si on exécute le.
Symfony
SYMFONY :24:17 PWB L3 Mioage.
TP de mise en oeuvre d’une PKI avec Openssl
Windows XP Professionnel
My VMware Gestion simplifiée des licences produits et du support
Enesys RS Data Extension
La configuration Apache 2.2 Lhébergement virtuel.
Injection de dépendances
Intégrer son site dans sa « Stratégie Facebook ».
TM.
Electronic Portfolio/ Portfolio électronique QPAT
Les matières WALT: Talk about school subjects in French Give our opinion about subjects and say why.
Struts 1 & 2 Tlohi ibtissam Tabit boutaina Ilias bouras
Magnets fiche projet / project sheet IAFACTORY THE MAGNETIC FACTORY magnets. IAFACTORY | conseil en architecture de linformation | |
TortoiseSVN N°. Subversion : pour quoi faire ? Avoir un espace de stockage commun – Tous les étudiants du SIGLIS ont un espace svn commun Partager vos.
Historique de SystemC Regroupe 4 courants didées: SCENIC Project : Synopsys+UC Irvine Philips System-Level Data Types, VSIA SLD DWG IMEC, Hardware-Software.
IAFACTORY | conseil en architecture de linformation | | |
Laboratoire de Bioinformatique des Génomes et des Réseaux Université Libre de Bruxelles, Belgique Introduction Statistics.
Développement d’application web
Contribution du projet PARIS Christian Pérez Réunion LEGO LIP, ENS Lyon 10 février 2006.
Structures de données IFT-2000 Abder Alikacem La librairie STL du C++ Département dinformatique et de génie logiciel Édition Septembre 2009.
JUnit Présentation complète de JUnit et « guide d’utilisation » en 13 transparents.
Introduction au WebMapping
BBoard Fonctionne pas. BBoard Copier le répertoire dézippé dans le répertoire modules de post nuke Renommer ce répertoire en yabbse. Entrer le chemin.
CERN IT Department CH-1211 Genève 23 Switzerland t Get the most of Office 2007! Bruno Lenski, IT/OIS.
1 CSI 2532 Lab5 Installation de JDBC Février 13, 2012.
14 mai 2003TSTG Barcelona Meeting - Gilbert1 TSTG General Meeting: Configure and Makefile issues Gilbert Grosdidier LAL-Orsay/IN2P3/CNRS & LCG.
Cest mercredi le neuf octobre Le plan! 1.Révisions 2.Vocabulaire 3.Jouer 4.Ecouter 5.Parler Il fait beau! Le but! Les couleurs!
1 CSI 2532 Lab6 Application Web et DB Février 27, 2012.
Fabienne Boyer Laboratoire LIG (INRIA-UJF-INPG) Projet SARDES, INRIA Rhône-Alpes APACHE/VELOCITY.
Chapitre 3 Les bibliothèques de balises JSP et la JSTL
GWT - QuickStart V 1.0 / May. Mise en place de l’environnement Java : Version 1.4 minimum IDE Eclipse 3.3 Europa : lien (Eclipse J2EE recommandée)‏lien.
Première CTP le 4 décembre Nouvelle CTP depuis le 1 er février RTM milieu de cette année.
Applications web1 Cours Web Services ISIMA 3F3. Applications web2 JavaScript Inventé par Netscape... sans rapport avec Java. Standardisé par l’ECMA, spécification.
PHP & My SQL.
Branche Développement Le présent document contient des informations qui sont la propriété de France Télécom. L'acceptation de ce document par son destinataire.
JavaScript Nécessaire Web.
APC Cache PHP alternatif Présenté par : MASLINE-CAMERINI Antoine.
0 Objectifs de la session n°1  Revenir sur toutes les bases théoriques nécessaires pour devenir un développeur Web,  Découvrir l’ensemble des langages.
09/11/2006 CMS Content Management System Système de Gestion de Contenu.
AJAX Open Source Etat de l’art Baris Ulucinar, Octobre 2006 University of Fribourg, Suisse Sous la direction de Prof. O. Abou Khaled.
Struts.
420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1.
G.KEMBELLEC - UP81 Master 2 THYP Cas pratique d’utilisation De simpleXML Un lecteur de RSS Novembre 2009.
Initiation au JavaScript
Initiation au web dynamique Licence Professionnelle.
Introduction à PHP TOURNADRE Guillaume - Informatique Réseaux URL :
Transcription de la présentation:

Symfony

Un projet français 1 ère version octobre 2005 Fabien Potencier PDG de sensio Lab développeur François Zanonitto écrit la documentation Documentation complète Sous licence MIT (BSD compatible avec GNU/GPL) Tutoriel –Askeet pour symfony 1.0 –Jobeet pour symfony 1.2 –Calendrier de l'avent 2009 symfony 1.3 & 1.4 Documenté en anglais

Une communauté réactive Forum réactif Mise à dispo de cheatsheet exhaustives et conscises De nombreux plugins Multiple blogs consacrés à symfony Offres d'emploi pour les symfonistes

A propos de ce cours Concerne symfony 1.0 Non abordé –Le cache, Tests unitaires, Test fonctionnels

Un framework … Un framework améliore les conditions de développement –En automatisant certaines tâches récurrentes –En proposant une structure invitant à écrire du code « propre » et lisible –En implémentant des fonctionnalités complexes sous forme de package Structure MVC

…En PHP conçu pour Xamp Écrit en PHP5 =< Utilisation des canaux PEAR pour –Installation /maintenance du framework –Installation /maintenance des plugins BDD compatibles –MySQL –PostgreSQL –Oracle –Microsoft SQL Server Plateformes –*nix –Windows

Only the very best Installation facile (via les canaux PEAR) Indépendant du SGBD Utilisation simple souplesse pour des cas plus complexes Automatisation des parties du développement : on ne soccupe que de ce qui sort de lordinaire Code parlant et facile à lire

couche d'abstraction & ORM Abstraction de données –indépendance vis-à vis du SGBD –Géré par creole dans symfony 1.0 –Géré par l'extension PDO dans symfony 1.2 ORM –mapping objet/relationnel Produits des objets permettant l'accès aux données tout en isolant la logique métier –Deux possibilités propel : doctrine :

Fonctionnalités intégrées Internationalisation Principe de templates –(manipulables par les infographistes) Validateur de formulaire Protection anti-XSS Gestion de cache Authentification et gestion de permissions url rewriting Support AJAX (pour symfony 1.0 uniquement) Système de plugins

Outils & environnement Génération de code : interface dadministration en un clic Les tests unitaires et fonctionnels facilitent la phase de développement La barre doutil de débuggage affiche toutes les informations nécessaires La ligne de commande automatise le déploiement Les outils de logs fournissent des détails précis sur lactivité de lappli

Concepts de bases Basé sur le paradigme objet Soutenu par le nouveau modèle objet de PHP5 LObject-Relational Mapping (ORM) passerelle entre le modèle de base de données et les classes objet Rapid Application Development (RAD) / agil programming –KISS (Keep It Simple, Stupid) –DRY (Dont Repeat Yourself) –Refactoring –Réactivité quant aux évolutions du modèle RTFM

MVC web de base

MVC web Symfony

Architecture type dun blog Passé un blog PHP en MVC

Anatomie dun projet apps contient un répertoire par application (typiquement front et back) batch scripts PHP exécutable en ligne de commandes ou via cron Cache cache des configurations, actions, templates config configuration générale de lappli data les données du projet, un schéma de base de données, des commandes SQL doc Documentation de lappli lib toutes les classes et librairies partagées par toutes les applications log fichiers de log symfony (par applications et environnement) plugins les plugins utilisés par le projet test contient les tests unitaires et fonctionnels web la racine du serveur web. Tous les fichiers accessibles de lInternet sont stockés ici

Anatomie dune application myapp Contient tous les fichiers de lapplication, nommé avec le nom de lapplication config Un ensemble de fichier de configuration YAML concernant lapplication. i18n Les fichiers utilisés pour linternationalisation de lapplication (des fichiers de traduction en général). Si vous utilisez la base de données pour linternationalisation, vous pouvez oublier ce dossier lib Les classes et les librairies spécifiques à lapplication modules Tous les modules qui contiennent la logique de lapplication templates Les templates (gabarits) globaux de lapplication, partagés par tous les modules. Par défaut, il y a un fichier layout.php, dans lequel les templates du module seront insérés N.B. Les classes dune application ne peuvent pas accéder aux méthodes ou attributs dune tierce application dun même projet. Lorsque vous déciderez de la manière de diviser votre projet en plusieurs applications, vous devrez garder à lesprit que les liens hypertextes entre ces différentes applications devront être de forme absolue.

Anatomie dun module mymodule Contient tous les fichiers du module, nommé avec le nom du module actions Contient les actions du module dans actions.class.php et éventuellment des actions liés aux admin-generator dans components.class.php config Peut contenir des fichiers de configuration locaux propres au module lib Les classes et librairies spécifiques au module templates Contient les templates et partial (morceau de template). Un template par défaut indexSuccess.php est créé à linitialisation du module validate Dédié aux fichiers de configuration pour la validation des formulaires

racine du serveur css Toutes les feuilles de styles (*.css) images Toutes les images (*.gif, *.jpg, *.png) pour la mise en forme js Tous les fichiers javascript (*.js) uploads Tous les fichiers uploadés par les utilisateurs index.php Le controleur principal appelé par défaut (/) myapp_dev.ph p Un controleur par application et par environnement Mémo complet :

Installation standard Une plateforme *amp Une copie partagée du framework Installation de la version courante pear install symfony/symfony Solutions alternative –Sandbox –Repository SVN Le chemin de PHP CLI doit être ajouté au path pour que la commande symfony fonctionne la commande symfony en détail

Créer un projet symfony 1.Créer un répertoire pour le projet /path_to_web_dir/myproject 2.« Se mettre » dans ce répertoire cd /path_to_web_dir/myproject 3.Taper symfony init-project myproject 4.La structure du projet symfony est créé automatiquement N.B. le répertoire apps est vide

Créer une application dans le projet 1.« Se mettre » dans ce répertoire cd /path_to_web_dir/myproject/ 2.Taper symfony init-app myapp 3.Un répertoire /path_to_web_dir/myproject/myapp/ est créé 4.La strucutre dapplication est créé dans /path_to_web_dir/myproject/myapp/ 5.Deux fichiers sont également créés dans /path_to_web_dir/myproject/web/ –index.php –myapp_dev.php

Côté serveur (apache) Cest le dossier web qui est servi par apache Un alias doit être créé pour rendre les feuilles de styles, images et javascripts du framework (installé pans le répertoire PEAR) accessibles mode_rewrite doit être activé Noubliez pas de recharger la conf du serveur (avec classe ;-) ) apache2ctl graceful Tester myapp.example.com

Virtual host apache typique pour projet symfony ServerName myapp.example.com DocumentRoot"/path_to_web_dir/myproject/web" DirectoryIndex index.php Alias /sf //sf_symfony_data_dir/web/sf AllowOverride All Allow from All AllowOverride All Allow from All

Hébergement en mutualisé Changer le répertoire web –Dans config/config.php ou dans chaque apps/myApp/config/config.php $sf_root_dir = sfConfig::get('sf_root_dir'); sfConfig::add(array( 'sf_web_dir_name' => $sf_web_dir_name = 'www', 'sf_web_dir' => $sf_root_dir.DIRECTORY_SEPARATOR.$sf_web_dir_name, 'sf_upload_dir' => $sf_root_dir.DIRECTORY_SEPARATOR.$sf_web_dir_name.DIRECTORY_SEP ARATOR.sfConfig::get('sf_upload_dir_name'), ) ); Customiser le myproject/www/.htaccess

Ça marche!!

Création dun module 1.« Se mettre » dans ce répertoire cd /path_to_web_dir/myproject/ 2.Taper symfony init-module myapp mymodule 3.La structure est créée –myproject/apps/myapp/modules/mymodule/actions/actions.class.php –myproject/apps/myapp/modules/mymodule/templates/indexSuccess.php 4.Tester

Les conteneurs de paramètres … Utilisés par beaucoup de classes symfony –Par exemple $reponse un objet de classe sfReponse $response->getParameterHolder()->set('foo', 'bar'); $response->setParameter('foo', bar'); $response->getParameterHolder()->get('foo'); $response->getParameter('foo'); –Valeur par défaut $response->getParameter('foo', bar');

…supportent les espaces de nommage $response->setParameter('foo', 'bar1'); $response->setParameter('foo', 'bar2', 'my/name/space'); echo $response->getParameter('foo'); => 'bar1' echo $response->getParameter('foo', null, 'my/name/space'); => 'bar2'

Les constantes Très peu utilisées dans symfony –La classe sfConfig centralise la conf // Instead of PHP constants, define('SF_FOO', 'bar'); echo SF_FOO; // Symfony uses the sfConfig object sfConfig::set('sf_foo', 'bar'); echo sfConfig::get('sf_foo');

Auto-chargement des classes Plus besoin de Pour faire un recherche la définition de MyClass lib/*.php apps/myapp/module/lib/, apps/myapp/lib/, /lib/ Si elle est trouvée, elle est incluse automatiquement. Vous navez jamais à inclure une classe dans symfony!

Hello world en symfony Prérequis –Une install de symfony –Un projet et une appli myapp créée au préalable –Créer un module vide > cd ~/myproject > symfony init-module myapp mymodule

Fichiers Dossiers auto générés créé 5 dossiers … –actions/ –config/ –lib/ –templates/ –validate/ … et 3 fichiers –dans le dossier test/ pour les unités de tests –actions/actions.class.php, renvoit vers la page de félicitation du module par défaut. –templates/indexSuccess.php, est vide.

Contenu du contrôleur class mymoduleActions extends sfActions { public function executeIndex() { $this->forward('default', 'module'); } Le code par défaut reroute laction index vers laction default du module module Appel par convention de nommage le template templates/indexSuccess.php si laction nest pas reroutée Visible sur – –

Ajout de myAction class mymoduleActions extends sfActions { public function executeMyAction() { } Création dun template templates/myActionSuccess.php contenant Hello, world! Visible sur

Pseudo langage de templates Version PHP5 « pure » <?php if ($test) { echo " ".time()." "; } ?> Version template symfony « style » Valable pour if, foreach, while, etc … Pas de echo de balise!

Nourrir ses templates Symfony rend les attributs du contrôleur visible dans lespace de nommage global du template class mymoduleActions extends sfActions { public function executeMyAction() { $today = getdate(); $this->hour = $today['hours']; } Va pouvoir sutiliser dans un template comme suit = 18): ?> Or should I say good evening? It is already.

Les helpers Les helpers sont des fonctions PHP appelées par les templates Un helper génère du code HTML Un helper est en général plus rapide à écrire que le code HTML quil produit Symfony propose de nombreux helpers Symfony permet décrire ses propres helpers

Le cas des formulaires – en PHP What is your name?

Avec les helpers symfony Meilleur clareté du code, plus rapide, plus concis Customisable via des tableaux doptions

Les helpers de liens En PHP / XHTML I never say my name En symfony <?php echo link_to( 'I never say my name', 'mymodule/anotherAction?name=anonymous ) ?>

Exemple de tableau doptions pour un helper <?php echo link_to( 'I never say my name', 'mymodule/anotherAction?name=anonymous', array( 'class' => 'special_link', 'confirm' => 'Are you sure?', 'absolute' => true ) ) ?> <?php echo link_to( 'I never say my name', 'mymodule/anotherAction?name=anonymous', 'class=special_link confirm=Are you sure? absolute=true ) ?> I never say my name

Récupérer les variables de la requête Au niveau du contrôleur class mymoduleActions extends sfActions { public function executeAnotherAction() { $this->name = $this->getRequestParameter('name'); } Au niveau du template Hello, get('name') ?>! Plutôt que $_GET, $_POST ou $_REQUEST –Transparent pour lurl rewriting –Filtrage de code malicieux

Autre exemples has('name')): ?> Hello, get('name') ?>! Hello, John Doe! $this->hasRequestParameter('name') fonctionne également dans le contrôleur Ce qui a été vu précedemment pour les conteneurs de paramètres sapplique Hello, get('name', 'John Doe') ?>!

Bien se conduire en Symfony Nom de table, champs de table – ma_table, mon_attribut Nom de classe –$maTable = new MaTable(); Nom des getters, setters –echo $maTable->getMonAttribut(); –$maTable->setMonAttribut(foo); Nom de module associé à une table (objet) –maTable Nom daction –maTable/myAction dans lurl –executeMyAction() dans le contrôleur Nom de template associé –myActionSuccess.php, myActionError.php Camelize : passer de ma_table à maTable On aère le code

Recommandation symfony In the code examples given in this book, you probably noticed that the opening and closing curly braces ({ and }) occupy one line each. This standard makes the code easier to read. Among the other coding standards of the framework, indentation is always done by two blank spaces; tabs are not used. This is because tabs have a different space value according to the text editor you use, and because code with mixed tab and blank indentation is impossible to read. Core and generated symfony PHP files do not end with the usual ?> closing tag. This is because it is not really needed, and because it can create problems in the output if you ever have blanks after this tag. And if you really pay attention, you will see that a line never ends with a blank space in symfony. The reason, this time, is more prosaic: lines ending with blanks look ugly in Fabien's text editor.