Symfony http://symfony-project.org.

Slides:



Advertisements
Présentations similaires
Active Directory Windows 2003 Server
Advertisements

Novembre 2005 – Michel Desconnets PHP : théorie Objectif : introduire les concepts globaux permettant d'aborder la programmation en PHP.
CRÉER UNE APPLICATION INTERNET RELIEE A UNE BASE DE DONNEES
Projets Dossier de conception Logiciel
Logiciels Libres Pour Le Web Concept express… En installer en 3mn …En personnaliser certains.
Exposé de Système - Informatique et Réseau
Projet Webase. I. La définition du projet 1. Lexistant : Webase 4 2. Cahier des charges 3. La répartition des données 4. Le modèle de données 5. Le choix.
Symfony Un projet français 1 ère version octobre 2005 Fabien Potencier PDG de sensio Lab développeur François Zanonitto écrit.
Symfony Liens & routing.
Design Pattern MVC En PHP5.
SYMFONY :24:17 PWB L3 Mioage.
TP 3-4 BD21.
La configuration Apache 2.2 Lhébergement virtuel.
Présentation des frameworks pour Java EE
Projet JEE approfondi Stripes / Toplink
Développement dun simulateur dinterface graphique à distance Présenté par Michaël Delhaye Promoteur : Jean Vanderdonckt.
1 ARCHITECTURE DACCÈS la méthode générale modèle de données définitions module daccès / modules métiers construction des modèles les modules daccès, les.
Les outils d’intégration continue
Active Directory Windows 2003 Server
LOG 02 Bases de Données Avancées Rappels sur JSP / Servlet
Forum JEE: framework STRUTS 1 et iBATIS
Mars 2013 Grégory Petit
Struts 1 & 2 Tlohi ibtissam Tabit boutaina Ilias bouras
Père Stéphane-Paul BENTZ IUT de Colmar Séminaire de Paris
Tapestry - Eclipse Link
Développement Rapide dApplications Web avec.NET « Mon premier site »
Symfony2.
Les instructions PHP pour l'accès à une base de données MySql
28 novembre 2012 Grégory Petit
ASP.NET Par: Hugo St-Louis. C ARACTÉRISTIQUES A SP. NET Évolution, successeur plus flexible quASP (Active Server Pages). Pages web dynamiques permettant.
Des outils pour le développement logiciel
ISICIL SWEETDEKI Intégration du logiciel Mindtouch Core dans la plate-forme ISICIL Guillaume HUSSON.
Développement d’application web
Clients riches RIA (Rich Internet Application) / RDA
PhP-MySQL Pagora 2012/2013 CTD 1 - Presentation de moi ^^
MODEX WEB BAPTISTE DESPREZ Un peu de sécurité. Avant dentrer dans le vif du sujet JavaScript Langage de script (comme PHP) Exécuté par votre navigateur.
1 CSI 2532 Lab6 Application Web et DB Février 27, 2012.
JEE 5 F.Pfister 2 institut eerie JEE – Une plateforme serveur  Développement et exécution d'applications réparties.
‘‘Open Data base Connectivity‘‘
Hot Potatoes
Jquery.
PHP & My SQL.
Elabore par BELKADHI ABIR BEN HASSEN SALMA CHEBBI MARWA
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.
AngularJS.
09/11/2006 CMS Content Management System Système de Gestion de Contenu.
Créer des packages.
 Objet window, la fenêtre du navigateur
Quand l’agilité n’est pas une option
PHP & MySQL Master1 ICD Claire Jacquot Emilie Hot le 24/10/2006.
Plus simple à utiliser Une interface d’administration entièrement remaniée rend plus facile l'apprentissage de Drupal.
05/02/98WEB ESNIG Modèle logique de données Oracle Designer/2000 & Oracle Web Server.
S'initier au HTML et aux feuilles de style CSS Cours 5.
Xi HUA Wenyun DAI Morgane GIRONA
Présentation du framework JSF (Java Server Faces) dans le modèle événementiel MVCII
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.
Module : Pages Web Dynamiques (Production Électronique Avancée)
S'initier au HTML et aux feuilles de style CSS Cours 5.
 Formulaires HTML : traiter les entrées utilisateur
Initiation au JavaScript
Initiation au web dynamique Licence Professionnelle.
Introduction à PHP TOURNADRE Guillaume - Informatique Réseaux URL :
Veille Technologique Miwako MARTIN
Dreamweaver MX Jauneau Marie Claude-Antoine Zarate.
Les calques Les Template (modèles) Les Comportements Les scénarios Les formulaires Les CSS Le serveur Web de l’UTC Présentation.
APP-TSWD Apprentissage Par Problèmes Techniques des Sites Web Dynamiques Licence Professionnelle FNEPI Valérie Bellynck, Benjamin Brichet-Billet, Mazen.
Transcription de la présentation:

Symfony http://symfony-project.org

Un projet français Documenté en anglais 1ère version octobre 2005 Fabien Potencier PDG de sensio Lab développeur Documentation complète Sous licence MIT (BSD compatible avec GNU/GPL) Tutoriel Askeet pour symfony 1.0 Jobeet pour symfony 1.2 The more with symfony 1.3 & 1.4 Documenté en anglais

Une communauté réactive Forum réactif http://forum.symfony-project.org/ Mise à dispo de cheatsheet exhaustives et conscises De nombreux plugins Multiple blogs consacrés à symfony Offres d'emploi pour les symfonistes http://symfonians.net/

A propos de ce cours Concerne symfony 1.2 à 1.4 Non abordé Ni symfony 1.0 Ni symfony 2.0 Basé sur «A Gentle Introduction to symfony»  http://www.symfony-project.org/gentle-introduction/1_4/en/ Non abordé Le cache, Tests unitaires, Test fonctionnels, Les mails

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 composants Structure MVC

…En PHP conçu pour *amp Écrit en PHP5 (utilisation du paradigme objet) Utilisation des canaux PEAR pour Installation /maintenance du framework Installation /maintenance des plugins BDD compatibles (via une ORM) MySQL PostgreSQL Oracle Microsoft SQL Server … Plateformes Unix & unix-like Windows MacOSX

Only the very best Utilisation de la ligne de commande Indépendant du SGBD Utilisation simple souplesse pour des cas plus complexes Automatisation des parties du développement : on ne s’occupe que de ce qui sort de l’ordinaire 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 avec propel Géré par l'extension PDO pour les ORM utilisées par 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 : http://www.propelorm.org/ doctrine : http://www.doctrine-project.org/

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 Système de plugins

Outils & environnement Les tests unitaires et fonctionnels facilitent la phase de développement La barre d’outil de débuggage affiche toutes les informations nécessaires La ligne de commande automatise Les tests Le déploiement Les tâches d’administration (cache Le développement Maintenance de la BDD Génération de code modèles, formulaires, interface d’administration … Les outils de logs fournissent des détails précis sur l’activité de l’appli

Concepts de bases Basé sur le paradigme objet Soutenu par le modèle objet de PHP5 L’Object-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 (Don’t Repeat Yourself) Refactoring Réactivité quant aux évolutions du modèle RTFM

MVC web de base

MVC web Symfony

Architecture type d’un blog Passer un blog PHP en MVC http://www.symfony-project.org/gentle-introduction/1_4/en/02-Exploring- Symfony-s-Code

Anatomie d’un projet apps contient un répertoire par application (typiquement front et back) batch scripts PHP exécutables en ligne de commandes ou via cron (ce répertoire n’existe plus en sf1.4) Cache cache des configurations, actions, templates config configuration générale de l’appli data les données du projet, un schéma de base de données, des commandes SQL doc Documentation de l’appli (ce répertoire n’existe plus en sf1.4) 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 l’Internet sont stockés ici

Anatomie d’une application myapp Contient tous les fichiers de l’application, nommé avec le nom de l’application config Un ensemble de fichier de configuration YAML concernant l’application. i18n Les fichiers utilisés pour l’internationalisation de l’application (des fichiers de traduction en général). Si vous utilisez la base de données pour l’internationalisation, vous pouvez oublier ce dossier lib Les classes et les librairies spécifiques à l’application modules Tous les modules qui contiennent la logique de l’application templates Les templates (gabarits) globaux de l’application, 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 d’une application ne peuvent pas accéder aux méthodes ou attributs d’une tierce application d’un même projet. Lorsque vous déciderez de la manière de diviser votre projet en plusieurs applications, vous devrez garder à l’esprit que les liens hypertextes entre ces différentes applications devront être de forme absolue.

Anatomie d’un 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éé à l’initialisation du module

Mémo complet :http://www.flickr.com/photos/deia/402335716/sizes/l/ 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 :http://www.flickr.com/photos/deia/402335716/sizes/l/

environnement symfony Pré requis Une plateforme *amp Choisir la version http://www.symfony-project.org/installation Le chemin de PHP CLI doit être ajouté au path pour que la commande symfony fonctionne Un éditeur de texte CORRECT! Suggestion : http://www.pspad.com/fr/ Ou mieux un IDE : http://netbeans.org/

installer symfony (1) Créer un répertoire pour le projet mkdir -p /dev/myproject « Se mettre » dans ce répertoire cd /dev/myproject Créer un répertoire pour symfony mkdir lib/vendor Créer un répertoire pour le projet c:\> mkdir c:\dev\myproject « Se mettre » dans ce répertoire c:\> cd c:\dev\myproject Créer un répertoire pour symfony mkdir lib mkdir lib/vendor

Installer symfony (2) Soit en téléchargeant l’archive Décompresser dans /dev/myproject/lib/vendor/symfony Soit à partir du svn Positionné « dans » le projet $ svn propset svn:externals "symfony http://svn.symfony-project.com/trunk/" lib/vendor/

Créer un projet Positionné « dans » le répertoire du projet $ php lib/vendor/symfony/data/bin/symfony generate:project myproject Toutes les commandes symfony s’exécute dans le répertoire du projet!

Créer une application Un répertoire est créé $ php symfony generate:app myapp Un répertoire est créé /dev/myproject/apps/myapp/ Ce répertoire contient la strucutre de l’application Deux fichiers sont également créés /dev/myproject/index.php /dev/myproject/myapp_dev.php

Côté serveur (apache) C’est 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é dans lib/vendor) accessibles mod_rewrite doit être activé N’oubliez pas de recharger la conf du serveur (avec classe ;-) ) apache2ctl graceful

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 <Directory "/sf_symfony_data_dir/web/sf"> AllowOverride All Allow from All </Directory> <Directory "/path_to_web_dir/myproject/web"> </VirtualHost>

Ça marche!!

Création d’un module La structure est créée $ symfony generate:module myapp mymodule La structure est créée /dev/myproject/apps/myapp/modules/mymodule/actions/actions.class.php /dev/myproject/apps/myapp/modules/mymodule/templates/indexSuccess.php Tester http://localhost/myapp_dev.php/mymodule/index

Les conteneurs de paramètres … Utilisés par beaucoup de classes symfony Par exemple si $reponse est un objet de classe sfReponse $response->getParameter('foo');  $response->getParameterHolder()->get('foo'); $response->setParameter('foo', ‘bar');  $response->getParameterHolder()->set('foo', 'bar'); 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 Constantes PHP classiques 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 <?php include 'classes/MyClass.php'; ?> Pour faire un <?php $myObject = new MyClass(); ?> Sans l’include la classe est recherchée dans l’ordre dans: apps/myapp/module/lib/ apps/myapp/lib/ /lib/ La première classe trouvée, est incluse automatiquement. Vous n’avez jamais à inclure une classe dans symfony!

Hello world en symfony Prérequis Etape1 Créer un module vide Une install de symfony Un projet et une appli myapp créée au préalable Etape1 Créer un module vide $ cd ~/myproject $ symfony generate: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 tests fonctionnelles actions/actions.class.php, renvoie vers la page de félicitation du module par défaut. templates/indexSuccess.php, est vide.

Ajout d’une nouvelle action myAction class mymoduleActions extends sfActions { public function executeMyAction() } Création d’un template templates/myActionSuccess.php contenant <p>Hello, world!</p> Visible sur http://localhost/myapp.php/mymodule/myAction

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

Nourrir ses templates Symfony rend les attributs du contrôleur visibles dans l’espace de nommage global du template class mymoduleActions extends sfActions { public function executeMyAction() $today = getdate(); $this->hour = $today['hours']; } Va pouvoir s’utiliser dans un template comme suit <?php if ($hour >= 18): ?> <p> Or should I say good evening? It is already <?php echo $hour ?>. </p> <?php endif; ?>

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 qu’il produit Symfony propose de nombreux helpers Symfony permet d’écrire ses propres helpers

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

Exemple de tableau d’options pour un helper <?php echo link_to( 'I never say my name', 'mymodule/anAction?name=anonym', array( 'class' => 'special_link', 'confirm' => 'Are you sure?', 'absolute' => true ) ) ?> Produit <a class="special_link" onclick="return confirm('Are you sure?');" href="http://localhost/myapp.php/mymodule/anAction/name/anonym"> I never say my name</a>

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'); //ou $this->name = $this->getRequest()->getParameter('name'); } Au niveau du template <p>Hello, <?php echo $sf_params->get('name') ?>!</p> Plutôt que $_GET, $_POST ou $_REQUEST Transparent pour l’url rewriting Filtrage de code malicieux

Autre exemples <?php if ($sf_params->has('name')): ?> <p>Hello, <?php echo $sf_params->get('name') ?>!</p> <?php else: ?> <p>Hello, John Doe!</p> <?php endif; ?> $this->hasRequestParameter('name') fonctionne également dans le contrôleur Ce qui a été vu précedemment pour les conteneurs de paramètres s’applique <p>Hello, <?php echo $sf_params->get('name', 'John Doe') ?>!</p>

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 d’action maTable/myAction dans l’url 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.