Your SlideShare is downloading. ×
0
Mehdi GuermaziÀ la découverte de FLOW 3
Mehdi Guermazi À la découverte de FLOW 3Mehdi Guermazi●   Diplômé en Administration des affaires SIO    (Université Laval)...
Mehdi Guermazi    À la découverte de FLOW 3Introduction FLOW3●   Environnement de développement dapplication web fait en P...
Mehdi Guermazi    À la découverte de FLOW 3Historique●   Au début lobjectif était de restructurer le code pour TYPO3 V5●  ...
Mehdi Guermazi    À la découverte de FLOW 3Exigences minimales●   Un serveur web (Apache est recommandé avec le module    ...
Mehdi Guermazi    À la découverte de FLOW 3Installation de FLOW3●   Décompressez le dossier téléchargé dans votre dossier ...
Mehdi Guermazi À la découverte de FLOW 3Configuration du virtual host<VirtualHost *:80>      DocumentRoot /var/www/FLOW3-1...
Mehdi Guermazi À la découverte de FLOW 3Configuration/Settings.yaml (Base de données)####################### Global Settin...
Mehdi Guermazi À la découverte de FLOW 3Résultat
Mehdi Guermazi    À la découverte de FLOW 3Création dun package (Application web)●   Le code dune application et ces resso...
Mehdi Guermazi    À la découverte de FLOW 3Aperçu dun contrôleur●   Le contrôleur « StandardController » créé par défaut p...
Mehdi Guermazi À la découverte de FLOW 3Focus sur le domaine de travail(Domain Driven Design)    Un objectif important lor...
Mehdi Guermazi    À la découverte de FLOW 3Domain Driven Design●   Une méthode de travail qui :    ●   Fournit un langage ...
Mehdi Guermazi    À la découverte de FLOW 3Prenons un petit raccourcis●   Au lieu de programmer notre propre contrôleur, n...
Mehdi Guermazi    À la découverte de FLOW 3Regardons de plus prêt●   LindexAction affiche une liste de films. Tout ce que ...
Mehdi Guermazi    À la découverte de FLOW 3Regardons de plus prêt●   Le repository prend soin de stocker ou de chercher le...
Mehdi Guermazi    À la découverte de FLOW 3Regardons de plus prêt●   PHP ne supporte pas les annotations nativement●   FLO...
Mehdi Guermazi    À la découverte de FLOW 3Regardons de plus prêt●   Puisque FLOW3 repose sur un modèle MVC cest la vue qu...
Mehdi Guermazi    À la découverte de FLOW 3Regardons de plus prêt●   Les vues peuvent afficher le contenu qui a été affect...
Mehdi Guermazi    À la découverte de FLOW 3Regardons de plus prêt●   Pour afficher un lien    <f:link.action action="show"...
Mehdi Guermazi    À la découverte de FLOW 3Regardons de plus prêt●   newAction ne contient aucun code PHP elle ne fait qua...
Mehdi Guermazi  À la découverte de FLOW 3Le repository/*** Finds most recent posts excluding the given post** @param F3Blo...
Mehdi Guermazi À la découverte de FLOW 3Le Modèle si on utilise doctrine 2 pure         <?php         namespace MyExample;...
Mehdi Guermazi À la découverte de FLOW 3Doctrine 2 dans FLOW3        <?php        namespace MyExample;        /**        *...
Mehdi Guermazi À la découverte de FLOW 3La vue   FLOW3 est livré avec un élégant, souple et sécurisé   moteur de gabarits:...
Mehdi Guermazi À la découverte de FLOW 3La vue   Exemple pour attribuer une chaîne à une variable fluid         // Dans le...
Mehdi Guermazi À la découverte de FLOW 3La vue   Les variables peuvent être des objets         // Dans le contrôleur   $th...
Mehdi Guermazi À la découverte de FLOW 3La vue - Conditions         // Dans le contrôleur   $this->view->assign(post, $blo...
Mehdi Guermazi À la découverte de FLOW 3La vue - Boucles           // Dans le contrôleur   $this->view->assign(ages, array...
Mehdi Guermazi À la découverte de FLOW 3La vue - Boucles          // Dans le contrôleur    $this->view->assign(post, $blog...
Mehdi Guermazi À la découverte de FLOW 3Templating – Formulaire (modèle)   <?php   namespace InfoglobeDemoDomainModel;   u...
Mehdi Guermazi À la découverte de FLOW 3Templating – Formulaire (Vue)   <f:layout name="Default" />   <f:section name="Tit...
Mehdi Guermazi À la découverte de FLOW 3Validation    ●   Validation pour la sécurité et validation pour lintégrité    ●  ...
Mehdi Guermazi À la découverte de FLOW 3Validation dans FLOW3   ●   vous ne voulez pas coder des validations dans vos     ...
Mehdi Guermazi À la découverte de FLOW 3Les validateurs    ●   Les validateurs fournis par FLOW3 peuvent être appelés par ...
Mehdi Guermazi À la découverte de FLOW 3Mise à jour automatique de la bd    ●   lors du premier démarrage de FLOW3 la stru...
Mehdi Guermazi À la découverte de FLOW 3Support par ligne de commande   ●   Permettre aux administrateurs de lapplication ...
Mehdi Guermazi À la découverte de FLOW 3Sécurité   ●   Sécurité accrue par défaut   ●   la sécurité est centralisée (AOP) ...
Mehdi Guermazi À la découverte de FLOW 3Programmation Orientée Aspect - AOP    ●   Paradigme de programmation    ●   POO p...
Mehdi Guermazi À la découverte de FLOW 3Merci   ●   Les diapositives http://tinyurl.com/brogs4w   ●   Me suivre sur twitte...
Upcoming SlideShare
Loading in...5
×

À La découverte de flow3 - t3con12

251

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
251
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "À La découverte de flow3 - t3con12"

  1. 1. Mehdi GuermaziÀ la découverte de FLOW 3
  2. 2. Mehdi Guermazi À la découverte de FLOW 3Mehdi Guermazi● Diplômé en Administration des affaires SIO (Université Laval)● Consultant web chez Infoglobe (2009)● Membre fondateur de « La voix du libre » sur CKIA FM 88,3● Habite à Québec● Jaime faire de la musique, de la radio et du snow trash
  3. 3. Mehdi Guermazi À la découverte de FLOW 3Introduction FLOW3● Environnement de développement dapplication web fait en PHP● Gratuit et opensource (LGPL v3)● Vient concurrencer Symfony, CakePHP, CodeIgniter etc...● Supporté par la communauté TYPO3 sous les ordres de Robert Lemke (6000+ contributeurs)● Regroupe la plupart des concepts en vogue : programmation orientée aspects, domain-driven design, développement piloté par les tests, lintégration continue...
  4. 4. Mehdi Guermazi À la découverte de FLOW 3Historique● Au début lobjectif était de restructurer le code pour TYPO3 V5● Essai de différents environnements de développement● Décision de créer FLOW3 qui englobe tous les bons points des autres environnements de développement
  5. 5. Mehdi Guermazi À la découverte de FLOW 3Exigences minimales● Un serveur web (Apache est recommandé avec le module mod_rewrite activé)● PHP 5.3.2 ou plus récent● Une base de données compatible PDO comme MySQL● Accès en ligne de commande http://flow3.typo3.org/download
  6. 6. Mehdi Guermazi À la découverte de FLOW 3Installation de FLOW3● Décompressez le dossier téléchargé dans votre dossier htdocs● Configurer les droits daccès aux fichiers º ./flow3 core:setfilepermissions john www-data www-data º Remplacer john par votre nom dutilisateur● Ajouter un nom de domaine dans fichier hosts● Modifier la configuration du virtual host /etc/apache2/sites-available/default● Modifier la configuration générale dans un fichier de format yaml
  7. 7. Mehdi Guermazi À la découverte de FLOW 3Configuration du virtual host<VirtualHost *:80> DocumentRoot /var/www/FLOW3-1.0.3/Web ServerName dev.confooflow3.local SetEnv FLOW3_CONTEXT Development <Directory /var/www/FLOW3-1.0.3/> AllowOverride All </Directory></VirtualHost><VirtualHost *:80> DocumentRoot /var/www/FLOW3-1.0.3/Web ServerName confooflow3.local SetEnv FLOW3_CONTEXT Production <Directory /var/www/FLOW3-1.0.3/> AllowOverride All </Directory></VirtualHost>
  8. 8. Mehdi Guermazi À la découverte de FLOW 3Configuration/Settings.yaml (Base de données)####################### Global Settings######################FLOW3: persistence: backendOptions: driver: pdo_mysql dbname: confooflow3 user: confooflow3 password: confooflow3 host: 127.0.0.1 path: 127.0.0.1 Port: 3306 doctrine: dbal: sessionInitialization: SET NAMES utf8 COLLATE utf8_unicode_ci
  9. 9. Mehdi Guermazi À la découverte de FLOW 3Résultat
  10. 10. Mehdi Guermazi À la découverte de FLOW 3Création dun package (Application web)● Le code dune application et ces ressources (comme les images, feuilles de style et gabarits) sont rassemblés dans un « Package »● Chaque application est définie par une clé unique globale qui se compose du nom de votre compagnie et du nom de lapplication.● Le script Kickstart nous permet de créer une structure de base pour notre nouvelle application ./flow3 kickstart:package Infoglobe.Demo● Le script crée aussi un contrôleur par défaut quon peut afficher en visitant ladresse suivante : dev.confooflow3.local/Infoglobe.Demo/
  11. 11. Mehdi Guermazi À la découverte de FLOW 3Aperçu dun contrôleur● Le contrôleur « StandardController » créé par défaut par le Kickstarter se retrouve dans Packages/Application/Infoglobe.Demo/Classes/Controller/● Une méthode (fonction) indexAction est déjà créée cest grâce à cette fonction quon a obtenu le résultat daffichage dans le navigateur● Créons laction Hello ensemble : (Important!!! Les commentaires) /** * Hello action * * @param string $name Your name * @return string The hello */ public function helloAction($name) { return Hello . $name . !; }
  12. 12. Mehdi Guermazi À la découverte de FLOW 3Focus sur le domaine de travail(Domain Driven Design) Un objectif important lors de la conception de FLOW3 était de laisser le développeur se concentrer sur la logique du domaine de lapplication (du domaine de travail de leur client) et de travailler dans un vrai environnement orienté- objet. Alors que vous développez une application FLOW3, vous ne vous rendrez pas compte que le contenu est vraiment stocké dans une base de données. Votre code ne contiendra aucune requête SQL et vous naurez pas à créer la structure de vos tables.
  13. 13. Mehdi Guermazi À la découverte de FLOW 3Domain Driven Design● Une méthode de travail qui : ● Fournit un langage commun à toute léquipe (les développeurs, les concepteurs, le client) ● Simplifie la conception dapplications complexes ● Permet de se concentrer sur le domaine et la logique du domaine dactivité du client● FLOW3 est le premier environnement de développement accès sur la conception selon de le domaine de travail.
  14. 14. Mehdi Guermazi À la découverte de FLOW 3Prenons un petit raccourcis● Au lieu de programmer notre propre contrôleur, notre propre modèle et notre propre vue, nous allons générer un exemple● Nous allons créer un objet Film : ./flow3 kickstart:actioncontroller --generate-actions --generate-related Infoglobe.Demo Film
  15. 15. Mehdi Guermazi À la découverte de FLOW 3Regardons de plus prêt● LindexAction affiche une liste de films. Tout ce que ça fait cest aller chercher linformation dans un dépôt (repository) et les donner à la vue (View) /** * Shows a list of films * * @return void */ public function indexAction() { $this->view->assign(films, $this->filmRepository->findAll()); }
  16. 16. Mehdi Guermazi À la découverte de FLOW 3Regardons de plus prêt● Le repository prend soin de stocker ou de chercher les films déjà stockés. La plus simple méthode utilisée est findAll() qui retourne une liste de tous les objets de type Film /** * @FLOW3Inject * @var InfoglobeDemoDomainRepositoryFilmRepository */ protected $filmRepository;
  17. 17. Mehdi Guermazi À la découverte de FLOW 3Regardons de plus prêt● PHP ne supporte pas les annotations nativement● FLOW3 utilise les commentaires qui sont analysés par un parseur● Par exemple lannotation Inject demande à appeler la classe FilmRepository tout juste après que la classe FilmController soit instanciée /** * @FLOW3Inject * @var InfoglobeDemoDomainRepositoryFilmRepository */ protected $filmRepository;
  18. 18. Mehdi Guermazi À la découverte de FLOW 3Regardons de plus prêt● Puisque FLOW3 repose sur un modèle MVC cest la vue qui soccupe de laffichage● On retrouve la vue correspondante à une action dun contrôleur de Film dans le dossier Resouces/Private/Templates/Film/ Pour index cest Resouces/Private/Templates/Film/Index.html
  19. 19. Mehdi Guermazi À la découverte de FLOW 3Regardons de plus prêt● Les vues peuvent afficher le contenu qui a été affecté à des variables de gabarit● Lespace réservé {Film.name} sera remplacé par la valeur réelle du nom de variable de gabarit une fois le modèle est rendu.● Les films pris dans le repository sont assignés à la variable de gabarit films. Le Gabarit utilise une boucle for each pour afficher la liste de films <ul> <f:for each="{films}" as="film"> <li> <f:link.action action="show" arguments="{film: film}">{film.name}</f:link.action> <f:link.action action="edit" arguments="{film: film}">Edit</f:link.action> <f:link.action action="delete" arguments="{film: film}">Delete</f:link.action> </li> </f:for> </ul>
  20. 20. Mehdi Guermazi À la découverte de FLOW 3Regardons de plus prêt● Pour afficher un lien <f:link.action action="show" arguments="{film: film}">{film.name}</f:link.action>● La partie intéressant est lattribut argments qui contient {film:film} On renvoie dans les paramètres de lurl lobjet film qui a été assigné dans la varaible de gabarit film.● Dans lattribut action on a choisit laction « show » donc on appelle le contrôleur actuel Film et laction showAction en lui renvoyant lobjet film.● Si on clique sur le lien la méthode showAction sera appelée.
  21. 21. Mehdi Guermazi À la découverte de FLOW 3Regardons de plus prêt● newAction ne contient aucun code PHP elle ne fait quafficher la vue qui contient seulement un formulaire.● CreateAction est appelé quand le formulaire affiché par newAction est soumis. Elle attend un objet de type film. Cette fois cest un nouveau et non un film existant.● Il faut donc le créer dans la repository $this->filmRepository->add($newFilm);● On affiche aussi un message à lutilisateur pour lui affirmer que son film a été créé $this->addFlashMessage(Created a new film.);
  22. 22. Mehdi Guermazi À la découverte de FLOW 3Le repository/*** Finds most recent posts excluding the given post** @param F3BlogDomainModelPost $post Post to exclude from result* @param integer $limit The number of posts to return at max* @return array All posts of the $posts blog except for $post*/public function findRecentExceptThis(F3BlogDomainModelPost $post, $limit = 20) { $query = $this->createQuery(); $posts = $query->matching($query->equals(blog, $post->getBlog())) ->setOrderings(array(date => F3FLOW3PersistenceQueryInterface::ORDER_DESCENDING)) ->setLimit($limit) ->execute() ->toArray(); unset($posts[array_search($post, $posts)]); return $posts;}
  23. 23. Mehdi Guermazi À la découverte de FLOW 3Le Modèle si on utilise doctrine 2 pure <?php namespace MyExample; /** * @Entity(repositoryClass="BugRepository") */ class Bug { /** * @var integer * @Id * @Column(type="integer") * @GeneratedValue */ public $id; /** * @var string * @Column(type="string") */ public $description
  24. 24. Mehdi Guermazi À la découverte de FLOW 3Doctrine 2 dans FLOW3 <?php namespace MyExample; /** * @Entity(repositoryClass="BugRepository") */ class Bug { /** * @var integer * @Id * @Column(type="integer") * @GeneratedValue */ public $id; /** * @var string * @Column(type="string") */ public $description
  25. 25. Mehdi Guermazi À la découverte de FLOW 3La vue FLOW3 est livré avec un élégant, souple et sécurisé moteur de gabarits: Fluid ● Les modèles sont valables HTML ● Les modèles ne contiennent pas de code PHP ● laccès aux objets, des structures de contrôle, boucles ... ● designer-friendly ● extensible (les aides de vue, les widgets)
  26. 26. Mehdi Guermazi À la découverte de FLOW 3La vue Exemple pour attribuer une chaîne à une variable fluid // Dans le contrôleur $this->view->assign(title, Welcome to Fluid); <!-- Dans un gabarit fluid: --> <head> <title>{title}</title> </head>
  27. 27. Mehdi Guermazi À la découverte de FLOW 3La vue Les variables peuvent être des objets // Dans le contrôleur $this->view->assign(conference, $conference); <!-- Dans un gabarit fluid: --> <div class="venue"> <p>Venue Street: {conference.venue.street}</p> </div>
  28. 28. Mehdi Guermazi À la découverte de FLOW 3La vue - Conditions // Dans le contrôleur $this->view->assign(post, $blogPost); <!-- Dans un gabarit fluid: --> <f:if condition="{post.comments}"> <f:then>There are some comments.</f:then> <f:else>There are no comments.</f:else> </f:if>
  29. 29. Mehdi Guermazi À la découverte de FLOW 3La vue - Boucles // Dans le contrôleur $this->view->assign(ages, array("Karsten" => 34, "Robert" => 35)); <!-- Dans un gabarit fluid: --> <ul> <f:for each="{ages}" as="age" key="name"> <li>{name} is {age} year old.</li> </f:for> </ul>
  30. 30. Mehdi Guermazi À la découverte de FLOW 3La vue - Boucles // Dans le contrôleur $this->view->assign(post, $blogPost); <!-- Dans un gabarit fluid: --> <f:if condition="{post.comments}"> <ul> <f:for each="{post.comments}" as="comment" > <li>{post.title}</li> </f:for> </ul> </f:if>
  31. 31. Mehdi Guermazi À la découverte de FLOW 3Templating – Formulaire (modèle) <?php namespace InfoglobeDemoDomainModel; use TYPO3FLOW3Annotations as FLOW3; /** * A Film * * @FLOW3Scope("prototype") * @FLOW3Entity */ class Film { /** * The name * @var string */ protected $name;
  32. 32. Mehdi Guermazi À la découverte de FLOW 3Templating – Formulaire (Vue) <f:layout name="Default" /> <f:section name="Title">New film</f:section> <f:section name="Content"> <p>Just fill out the following form to create a new film:</p> <f:form action="create" name="newFilm"> <ol> <li> <label for="name">Name</label> <f:form.textfield property="name" id="name" /> </li> <li> <f:form.submit value="Create" /> </li> </ol> </f:form> </f:section>
  33. 33. Mehdi Guermazi À la découverte de FLOW 3Validation ● Validation pour la sécurité et validation pour lintégrité ● les données entrantes doit être validée pour des raisons de sécurité ● Balisage malin dans le contenu soumis ● Injection dSQL ● lintégrité du modèle de domaine doit être assurée ● un courriel doit être (syntaxiquement) valide ● Les numéros de carte de crédit ne doit comporter que des chiffres
  34. 34. Mehdi Guermazi À la découverte de FLOW 3Validation dans FLOW3 ● vous ne voulez pas coder des validations dans vos contrôleurs ● FLOW3 sépare la validation des préoccupations de votre contrôleur ● pas de code PHP nécessaire pour la validation ● déclaré à travers les annotations ● Exemple @FLOW3Validate(type="StringLength", options={ "minimum"=1, "maximum"=5 })
  35. 35. Mehdi Guermazi À la découverte de FLOW 3Les validateurs ● Les validateurs fournis par FLOW3 peuvent être appelés par leur alias ● Count, Float, NotEmpty, RegularExpression, Uuid, DateTime, NumberRange, StringLength, Alphanumeric, Integer, Number, String, EmailAddress, Label, Raw, Text ● Les validateurs personnalisés doivent implémenter le « ValidatorInterface »
  36. 36. Mehdi Guermazi À la découverte de FLOW 3Mise à jour automatique de la bd ● lors du premier démarrage de FLOW3 la structure de la bd sera créé ● quand un modèle change, la structure est mise à jour ● Il faut être prudent avec les données existantes, les mise à jour peuvent effacer des données. ● pour lenvironnement de production, vous devez gérer manuellement les modifications de structure
  37. 37. Mehdi Guermazi À la découverte de FLOW 3Support par ligne de commande ● Permettre aux administrateurs de lapplication de la gérer facilement pour le déploiement et pour dautres actions comme la création dutilisateur par exemple. ● Permettre de créer vos propres actions en ligne de commande.
  38. 38. Mehdi Guermazi À la découverte de FLOW 3Sécurité ● Sécurité accrue par défaut ● la sécurité est centralisée (AOP) ● calquée sur lexpérience du projet TYPO3 et Spring Security (framework Java) ● assure lauthentification, lautorisation, la validation, le filtrage ... ● extensible pour une nouvelle authentification ou des mécanismes dautorisation
  39. 39. Mehdi Guermazi À la découverte de FLOW 3Programmation Orientée Aspect - AOP ● Paradigme de programmation ● POO pour conception par objets ● AOP conception transversale sur les aspects ● Avec FLOW3, il est facile (et possible) dutiliser lAOP en PHP
  40. 40. Mehdi Guermazi À la découverte de FLOW 3Merci ● Les diapositives http://tinyurl.com/brogs4w ● Me suivre sur twitter @DjBouZz ● Me contacter mguermazi@infoglobe.ca ● Joindre Robert Lemke robert@typo3.org ● Suivre Robert Lemke @t3rob
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×