La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Symfony Un projet français 1 ère version octobre 2005 Fabien Potencier PDG de sensio Lab développeur Documentation complète.

Présentations similaires


Présentation au sujet: "Symfony Un projet français 1 ère version octobre 2005 Fabien Potencier PDG de sensio Lab développeur Documentation complète."— Transcription de la présentation:

1 Symfony

2 Un projet français 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

3 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

4 A propos de ce cours Concerne symfony 1.2 à 1.4 Ni symfony 1.0 Ni symfony 2.0 Basé sur «A Gentle Introduction to symfony» Non abordé –Le cache, Tests unitaires, Test fonctionnels, Les mails

5 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

6 …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

7 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 soccupe que de ce qui sort de lordinaire Code parlant et facile à lire

8 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 : doctrine :

9 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

10 Outils & environnement 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 Les tests Le déploiement Les tâches dadministration (cache Le développement Maintenance de la BDD Génération de code modèles, formulaires, interface dadministration … Les outils de logs fournissent des détails précis sur lactivité de lappli

11 Concepts de bases Basé sur le paradigme objet Soutenu par le 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

12 MVC web de base

13 MVC web Symfony

14 Architecture type dun blog Passer un blog PHP en MVC Symfony-s-Code

15 Anatomie dun 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 nexiste plus en sf1.4) 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 (ce répertoire nexiste 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 lInternet sont stockés ici

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

17 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

18 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/ /sizes/l/

19 environnement symfony Pré requis Une plateforme *amp Choisir la version Le chemin de PHP CLI doit être ajouté au path pour que la commande symfony fonctionne Un éditeur de texte CORRECT! Suggestion : Ou mieux un IDE :

20 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

21 Installer symfony (2) Soit en téléchargeant larchive – Décompresser dans /dev/myproject/lib/vendor/symfony Soit à partir du svn – Positionné « dans » le projet $ svn propset svn:externals "symfony lib/vendor/

22 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 sexécute dans le répertoire du projet!

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

24 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é dans lib/vendor) accessibles mod_rewrite doit être activé Noubliez pas de recharger la conf du serveur (avec classe ;-) ) apache2ctl graceful

25 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

26 Ça marche!!

27 Création dun module $ 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

28 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');

29 …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'

30 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');

31 Auto-chargement des classes Plus besoin de Pour faire un 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 navez jamais à inclure une classe dans symfony!

32 Hello world en symfony Prérequis –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

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

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

35 Pseudo langage de templates Version PHP5 « pure » Version template symfony « style » Valable pour if, foreach, while, etc … Pas de echo de balise!

36 Nourrir ses templates Symfony rend les attributs du contrôleur visibles 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.

37 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

38 Les helpers de liens En PHP / XHTML I never say my name En symfony

39 Exemple de tableau doptions pour un helper 'special_link', 'confirm' => 'Are you sure?', 'absolute' => true ) ) ?> Produit I never say my name

40 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 Hello, get('name') ?>! Plutôt que $_GET, $_POST ou $_REQUEST –Transparent pour lurl rewriting –Filtrage de code malicieux

41 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') ?>!

42 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

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


Télécharger ppt "Symfony Un projet français 1 ère version octobre 2005 Fabien Potencier PDG de sensio Lab développeur Documentation complète."

Présentations similaires


Annonces Google