SlideShare une entreprise Scribd logo
1  sur  40
Télécharger pour lire hors ligne
Mehdi Guermazi


À la découverte de FLOW 3
Mehdi Guermazi


 À la découverte de FLOW 3

Mehdi 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
●   J'aime faire de la musique, de la radio et du snow trash
Mehdi Guermazi


    À la découverte de FLOW 3
Introduction FLOW3
●   Environnement de développement d'application 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, l'intégration continue...
Mehdi Guermazi


    À la découverte de FLOW 3
Historique

●   Au début l'objectif é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
Mehdi Guermazi


    À la découverte de FLOW 3
Exigences 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
Mehdi Guermazi


    À la découverte de FLOW 3
Installation de FLOW3
●   Décompressez le dossier téléchargé dans votre dossier htdocs
●   Configurer les droits d'accès aux fichiers
    º   ./flow3 core:setfilepermissions john www-data www-data
    º   Remplacer john par votre nom d'utilisateur
●   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
Mehdi Guermazi


 À la découverte de FLOW 3
Configuration 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>
Mehdi Guermazi


 À la découverte de FLOW 3
Configuration/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'
Mehdi Guermazi


 À la découverte de FLOW 3
Résultat
Mehdi Guermazi


    À la découverte de FLOW 3
Création d'un package (Application web)

●   Le code d'une 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 l'application.
●   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 qu'on peut afficher en
    visitant l'adresse suivante :
    dev.confooflow3.local/Infoglobe.Demo/
Mehdi Guermazi


    À la découverte de FLOW 3
Aperçu d'un 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 c'est grâce à
    cette fonction qu'on a obtenu le résultat d'affichage dans le
    navigateur
●   Créons l'action Hello ensemble : (Important!!! Les commentaires)
          /**
           * Hello action
           *
           * @param string $name Your name
           * @return string The hello
           */
          public function helloAction($name) {
               return 'Hello ' . $name . '!';
          }
Mehdi Guermazi


 À la découverte de FLOW 3
Focus 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 l'application (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 n'aurez pas à
    créer la structure de vos tables.
Mehdi Guermazi


    À la découverte de FLOW 3
Domain 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 d'applications complexes
    ●   Permet de se concentrer sur le domaine et la logique du
        domaine d'activité du client
●   FLOW3 est le premier environnement de développement accès
    sur la conception selon de le domaine de travail.
Mehdi Guermazi


    À la découverte de FLOW 3
Prenons 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
Mehdi Guermazi


    À la découverte de FLOW 3
Regardons de plus prêt
●   L'indexAction affiche une liste de films. Tout ce que ça fait c'est
    aller chercher l'information 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());
             }
Mehdi Guermazi


    À la découverte de FLOW 3
Regardons 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;
Mehdi Guermazi


    À la découverte de FLOW 3
Regardons de plus prêt
●   PHP ne supporte pas les annotations nativement
●   FLOW3 utilise les commentaires qui sont analysés par un parseur
●   Par exemple l'annotation Inject demande à appeler la classe
    FilmRepository tout juste après que la classe FilmController soit
    instanciée
        /**
        * @FLOW3Inject
        * @var InfoglobeDemoDomainRepositoryFilmRepository
        */

            protected $filmRepository;
Mehdi Guermazi


    À la découverte de FLOW 3
Regardons de plus prêt


●   Puisque FLOW3 repose sur un modèle MVC c'est la vue qui
    s'occupe de l'affichage
●   On retrouve la vue correspondante à une action d'un contrôleur de
    Film dans le dossier Resouces/Private/Templates/Film/
    Pour index c'est Resouces/Private/Templates/Film/Index.html
Mehdi Guermazi


    À la découverte de FLOW 3
Regardons de plus prêt
●   Les vues peuvent afficher le contenu qui a été affecté à des variables de gabarit
●   L'espace 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>
Mehdi Guermazi


    À la découverte de FLOW 3
Regardons 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 l'attribut argments qui contient {film:film}
    On renvoie dans les paramètres de l'url l'objet film qui a été
    assigné dans la varaible de gabarit film.
●   Dans l'attribut action on a choisit l'action « show » donc on appelle
    le contrôleur actuel Film et l'action showAction en lui renvoyant
    l'objet film.
●   Si on clique sur le lien la méthode showAction sera appelée.
Mehdi Guermazi


    À la découverte de FLOW 3
Regardons de plus prêt
●   newAction ne contient aucun code PHP elle ne fait qu'afficher 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 c'est 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 à l'utilisateur pour lui affirmer que
    son film a été créé
    $this->addFlashMessage('Created a new film.');
Mehdi Guermazi


  À la découverte de FLOW 3
Le 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 $post's 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;
}
Mehdi Guermazi


 À la découverte de FLOW 3
Le 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
Mehdi Guermazi


 À la découverte de FLOW 3
Doctrine 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
Mehdi Guermazi


 À la découverte de FLOW 3
La 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
   ●   l'accès aux objets, des structures de contrôle, boucles ...
   ●   designer-friendly
   ●   extensible (les aides de vue, les widgets)
Mehdi Guermazi


 À la découverte de FLOW 3
La 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>
Mehdi Guermazi


 À la découverte de FLOW 3
La 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>
Mehdi Guermazi


 À la découverte de FLOW 3
La 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>
Mehdi Guermazi


 À la découverte de FLOW 3
La 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>
Mehdi Guermazi


 À la découverte de FLOW 3
La 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>
Mehdi Guermazi


 À la découverte de FLOW 3
Templating – Formulaire (modèle)
   <?php
   namespace InfoglobeDemoDomainModel;

   use TYPO3FLOW3Annotations as FLOW3;

   /**
    * A Film
    *
    * @FLOW3Scope("prototype")
    * @FLOW3Entity
    */
   class Film {

      /**
       * The name
       * @var string
       */
      protected $name;
Mehdi Guermazi


 À la découverte de FLOW 3
Templating – 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>
Mehdi Guermazi


 À la découverte de FLOW 3
Validation

    ●   Validation pour la sécurité et validation pour l'intégrité
    ●   les données entrantes doit être validée pour des raisons de
        sécurité
         ●   Balisage malin dans le contenu soumis
         ●   Injection d'SQL
    ●   l'inté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
Mehdi Guermazi


 À la découverte de FLOW 3
Validation 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 })
Mehdi Guermazi


 À la découverte de FLOW 3
Les 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 »
Mehdi Guermazi


 À la découverte de FLOW 3
Mise à 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 l'environnement de production, vous devez gérer
        manuellement les modifications de structure
Mehdi Guermazi


 À la découverte de FLOW 3
Support par ligne de commande

   ●   Permettre aux administrateurs de l'application de la gérer
       facilement pour le déploiement et pour d'autres actions
       comme la création d'utilisateur par exemple.
   ●   Permettre de créer vos propres actions en ligne de
       commande.
Mehdi Guermazi


 À la découverte de FLOW 3
Sécurité
   ●   Sécurité accrue par défaut
   ●   la sécurité est centralisée (AOP)
   ●   calquée sur l'expérience du projet TYPO3 et Spring
       Security (framework Java)
   ●   assure l'authentification, l'autorisation, la validation, le
       filtrage ...
   ●   extensible pour une nouvelle authentification ou des
       mécanismes d'autorisation
Mehdi Guermazi


 À la découverte de FLOW 3
Programmation 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) d'utiliser l'AOP en
        PHP
Mehdi Guermazi


 À la découverte de FLOW 3
Merci

   ●   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

Contenu connexe

Tendances

Comment se charge WordPress ? Le loading du core.
Comment se charge WordPress ? Le loading du core.Comment se charge WordPress ? Le loading du core.
Comment se charge WordPress ? Le loading du core.Boiteaweb
 
Exposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
Exposer des services web SOAP et REST avec symfony 1.4 et Zend FrameworkExposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
Exposer des services web SOAP et REST avec symfony 1.4 et Zend FrameworkHugo Hamon
 
Symfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation GénéraleSymfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation GénéraleAbdelkader Rhouati
 
Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Ippon
 
Procédure de configuration et préparation de l’environnement sous windows
Procédure de configuration et préparation de l’environnement sous windowsProcédure de configuration et préparation de l’environnement sous windows
Procédure de configuration et préparation de l’environnement sous windowsAddi Ait-Mlouk
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en gokader15
 
Mise en place de Nagios3 pas à pas
Mise en place de Nagios3 pas à pas Mise en place de Nagios3 pas à pas
Mise en place de Nagios3 pas à pas yassine87
 
Présentation symfony epita
Présentation symfony epitaPrésentation symfony epita
Présentation symfony epitaNoel GUILBERT
 
Git : Deux écoles de pensées, merge vs rebase
Git : Deux écoles de pensées, merge vs rebaseGit : Deux écoles de pensées, merge vs rebase
Git : Deux écoles de pensées, merge vs rebasejcbaudier
 
Git pour les (pas si) nuls
Git pour les (pas si) nulsGit pour les (pas si) nuls
Git pour les (pas si) nulsMalk Zameth
 
Comment créer des hooks dans vos développements WordPress - WP Tech 2015
Comment créer des hooks dans vos développements WordPress - WP Tech 2015Comment créer des hooks dans vos développements WordPress - WP Tech 2015
Comment créer des hooks dans vos développements WordPress - WP Tech 2015Boiteaweb
 
Git ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de versionGit ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de versiongoldoraf
 
Symfony 2 : chapitre 2 - Les vues en Twig
Symfony 2 : chapitre 2 - Les vues en TwigSymfony 2 : chapitre 2 - Les vues en Twig
Symfony 2 : chapitre 2 - Les vues en TwigAbdelkader Rhouati
 
Drupal - La puissance de Drush
Drupal - La puissance de DrushDrupal - La puissance de Drush
Drupal - La puissance de DrushAlexandre Marie
 
Atelier WordPress: Création d&rsquo;extension WordPress
Atelier WordPress: Création d&rsquo;extension WordPressAtelier WordPress: Création d&rsquo;extension WordPress
Atelier WordPress: Création d&rsquo;extension WordPressIZZA Samir
 
Cours sur github part3 git
Cours sur github part3 gitCours sur github part3 git
Cours sur github part3 gitPape Diop
 

Tendances (20)

Comment se charge WordPress ? Le loading du core.
Comment se charge WordPress ? Le loading du core.Comment se charge WordPress ? Le loading du core.
Comment se charge WordPress ? Le loading du core.
 
Exposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
Exposer des services web SOAP et REST avec symfony 1.4 et Zend FrameworkExposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
Exposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
 
Client base de données en PHP5
Client base de données en PHP5Client base de données en PHP5
Client base de données en PHP5
 
Tutorial Git
Tutorial GitTutorial Git
Tutorial Git
 
Symfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation GénéraleSymfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation Générale
 
Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014
 
Procédure de configuration et préparation de l’environnement sous windows
Procédure de configuration et préparation de l’environnement sous windowsProcédure de configuration et préparation de l’environnement sous windows
Procédure de configuration et préparation de l’environnement sous windows
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en go
 
Mise en place de Nagios3 pas à pas
Mise en place de Nagios3 pas à pas Mise en place de Nagios3 pas à pas
Mise en place de Nagios3 pas à pas
 
Présentation symfony epita
Présentation symfony epitaPrésentation symfony epita
Présentation symfony epita
 
Git : Deux écoles de pensées, merge vs rebase
Git : Deux écoles de pensées, merge vs rebaseGit : Deux écoles de pensées, merge vs rebase
Git : Deux écoles de pensées, merge vs rebase
 
Git pour les (pas si) nuls
Git pour les (pas si) nulsGit pour les (pas si) nuls
Git pour les (pas si) nuls
 
Comment créer des hooks dans vos développements WordPress - WP Tech 2015
Comment créer des hooks dans vos développements WordPress - WP Tech 2015Comment créer des hooks dans vos développements WordPress - WP Tech 2015
Comment créer des hooks dans vos développements WordPress - WP Tech 2015
 
Git ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de versionGit ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de version
 
Symfony 2 : chapitre 2 - Les vues en Twig
Symfony 2 : chapitre 2 - Les vues en TwigSymfony 2 : chapitre 2 - Les vues en Twig
Symfony 2 : chapitre 2 - Les vues en Twig
 
Drupal - La puissance de Drush
Drupal - La puissance de DrushDrupal - La puissance de Drush
Drupal - La puissance de Drush
 
Atelier WordPress: Création d&rsquo;extension WordPress
Atelier WordPress: Création d&rsquo;extension WordPressAtelier WordPress: Création d&rsquo;extension WordPress
Atelier WordPress: Création d&rsquo;extension WordPress
 
Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?
 
Cours sur github part3 git
Cours sur github part3 gitCours sur github part3 git
Cours sur github part3 git
 
GitPourLaNulle
GitPourLaNulleGitPourLaNulle
GitPourLaNulle
 

En vedette

Conférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercier
Conférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercierConférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercier
Conférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercierNormandie Web Xperts
 
745. anecdotes celebrites
745. anecdotes celebrites745. anecdotes celebrites
745. anecdotes celebritesDominique Pongi
 
Chapter 11 lesson 4
Chapter 11 lesson 4Chapter 11 lesson 4
Chapter 11 lesson 4duhcentral22
 
Présentation 4. Accumulation du capital. Site: http://www.econ.msu.ru/departm...
Présentation 4. Accumulation du capital. Site: http://www.econ.msu.ru/departm...Présentation 4. Accumulation du capital. Site: http://www.econ.msu.ru/departm...
Présentation 4. Accumulation du capital. Site: http://www.econ.msu.ru/departm...Moscow State University
 
SENAT Rapport d'information sur le numérique, le renseignement et la vie priv...
SENAT Rapport d'information sur le numérique, le renseignement et la vie priv...SENAT Rapport d'information sur le numérique, le renseignement et la vie priv...
SENAT Rapport d'information sur le numérique, le renseignement et la vie priv...Daniel Dufourt
 
Typo ethicity greenflex
Typo ethicity greenflexTypo ethicity greenflex
Typo ethicity greenflexEric Espinosa
 

En vedette (20)

Chat chien de josette
Chat chien de josetteChat chien de josette
Chat chien de josette
 
S.v.p.
S.v.p.S.v.p.
S.v.p.
 
A l academie-francaise3
A l academie-francaise3A l academie-francaise3
A l academie-francaise3
 
Soleil de minuit t
Soleil de minuit tSoleil de minuit t
Soleil de minuit t
 
Magnifique a1
Magnifique  a1Magnifique  a1
Magnifique a1
 
Boite a outils
Boite a outilsBoite a outils
Boite a outils
 
23 presidents
23 presidents23 presidents
23 presidents
 
Conférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercier
Conférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercierConférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercier
Conférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercier
 
Les principales données géospatiales au Centre GéoStat - GMT-7009 Géomatique...
Les principales données géospatiales au  Centre GéoStat - GMT-7009 Géomatique...Les principales données géospatiales au  Centre GéoStat - GMT-7009 Géomatique...
Les principales données géospatiales au Centre GéoStat - GMT-7009 Géomatique...
 
745. anecdotes celebrites
745. anecdotes celebrites745. anecdotes celebrites
745. anecdotes celebrites
 
Toute l afrique her jpb
Toute l afrique her jpbToute l afrique her jpb
Toute l afrique her jpb
 
21 animaux inhabituels1
21 animaux inhabituels121 animaux inhabituels1
21 animaux inhabituels1
 
Chapter 11 lesson 4
Chapter 11 lesson 4Chapter 11 lesson 4
Chapter 11 lesson 4
 
Philatélistes.net
Philatélistes.netPhilatélistes.net
Philatélistes.net
 
Présentation 4. Accumulation du capital. Site: http://www.econ.msu.ru/departm...
Présentation 4. Accumulation du capital. Site: http://www.econ.msu.ru/departm...Présentation 4. Accumulation du capital. Site: http://www.econ.msu.ru/departm...
Présentation 4. Accumulation du capital. Site: http://www.econ.msu.ru/departm...
 
SENAT Rapport d'information sur le numérique, le renseignement et la vie priv...
SENAT Rapport d'information sur le numérique, le renseignement et la vie priv...SENAT Rapport d'information sur le numérique, le renseignement et la vie priv...
SENAT Rapport d'information sur le numérique, le renseignement et la vie priv...
 
Trabajogrupal01
Trabajogrupal01Trabajogrupal01
Trabajogrupal01
 
Typo ethicity greenflex
Typo ethicity greenflexTypo ethicity greenflex
Typo ethicity greenflex
 
Stage blogger
Stage bloggerStage blogger
Stage blogger
 
Laura2
Laura2Laura2
Laura2
 

Similaire à À La découverte de flow3 - t3con12

#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniterAtsé François-Xavier KOBON
 
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 WordCamp Lyon 2015 - WordPress, Git et l'intégration continue WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
WordCamp Lyon 2015 - WordPress, Git et l'intégration continueStéphane HULARD
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonyVincent Composieux
 
Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Xavier NOPRE
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsJulien Wittouck
 
Make (et make file) dans le cadre de wordpress
Make (et make file) dans le cadre de wordpressMake (et make file) dans le cadre de wordpress
Make (et make file) dans le cadre de wordpressGuillaume Richard
 
Atelier Symfony2- Introduction
Atelier Symfony2- IntroductionAtelier Symfony2- Introduction
Atelier Symfony2- IntroductionMarwa OUNALLI
 
Distribuer une librairie via maven
Distribuer une librairie via mavenDistribuer une librairie via maven
Distribuer une librairie via mavenFranck SIMON
 
Presentation Symfony2
Presentation Symfony2Presentation Symfony2
Presentation Symfony2Ahmed ABATAL
 
FusionDirectory : Industrialisation du déploiement
FusionDirectory : Industrialisation du déploiement FusionDirectory : Industrialisation du déploiement
FusionDirectory : Industrialisation du déploiement Anne Nicolas
 
Atelier symfony n 2
Atelier symfony n 2Atelier symfony n 2
Atelier symfony n 2Amir Souissi
 
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...Pierre Ternon
 
Installer et configurer NAGIOS sous linux
Installer et configurer NAGIOS sous linuxInstaller et configurer NAGIOS sous linux
Installer et configurer NAGIOS sous linuxZakariyaa AIT ELMOUDEN
 
Installation et configuration d'openbravo
Installation et configuration d'openbravoInstallation et configuration d'openbravo
Installation et configuration d'openbravoSoumia Brabije
 
Support : introduction à docker
Support : introduction à dockerSupport : introduction à docker
Support : introduction à dockerBoubker ABERWAG
 
Apache flink - prise en main rapide
Apache flink - prise en main rapideApache flink - prise en main rapide
Apache flink - prise en main rapideBilal Baltagi
 

Similaire à À La découverte de flow3 - t3con12 (20)

#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
 
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 WordCamp Lyon 2015 - WordPress, Git et l'intégration continue WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs Symfony
 
Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013
 
Introduction à Symfony
Introduction à SymfonyIntroduction à Symfony
Introduction à Symfony
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 
Make (et make file) dans le cadre de wordpress
Make (et make file) dans le cadre de wordpressMake (et make file) dans le cadre de wordpress
Make (et make file) dans le cadre de wordpress
 
Atelier Symfony2- Introduction
Atelier Symfony2- IntroductionAtelier Symfony2- Introduction
Atelier Symfony2- Introduction
 
Distribuer une librairie via maven
Distribuer une librairie via mavenDistribuer une librairie via maven
Distribuer une librairie via maven
 
Presentation Symfony2
Presentation Symfony2Presentation Symfony2
Presentation Symfony2
 
Vagrant - Concept
Vagrant - ConceptVagrant - Concept
Vagrant - Concept
 
Installation open erp
Installation open erpInstallation open erp
Installation open erp
 
FusionDirectory : Industrialisation du déploiement
FusionDirectory : Industrialisation du déploiement FusionDirectory : Industrialisation du déploiement
FusionDirectory : Industrialisation du déploiement
 
Atelier symfony n 2
Atelier symfony n 2Atelier symfony n 2
Atelier symfony n 2
 
Outils front-end
Outils front-endOutils front-end
Outils front-end
 
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
 
Installer et configurer NAGIOS sous linux
Installer et configurer NAGIOS sous linuxInstaller et configurer NAGIOS sous linux
Installer et configurer NAGIOS sous linux
 
Installation et configuration d'openbravo
Installation et configuration d'openbravoInstallation et configuration d'openbravo
Installation et configuration d'openbravo
 
Support : introduction à docker
Support : introduction à dockerSupport : introduction à docker
Support : introduction à docker
 
Apache flink - prise en main rapide
Apache flink - prise en main rapideApache flink - prise en main rapide
Apache flink - prise en main rapide
 

À La découverte de flow3 - t3con12

  • 1. Mehdi Guermazi À la découverte de FLOW 3
  • 2. Mehdi Guermazi À la découverte de FLOW 3 Mehdi 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 ● J'aime faire de la musique, de la radio et du snow trash
  • 3. Mehdi Guermazi À la découverte de FLOW 3 Introduction FLOW3 ● Environnement de développement d'application 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, l'intégration continue...
  • 4. Mehdi Guermazi À la découverte de FLOW 3 Historique ● Au début l'objectif é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. Mehdi Guermazi À la découverte de FLOW 3 Exigences 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. Mehdi Guermazi À la découverte de FLOW 3 Installation de FLOW3 ● Décompressez le dossier téléchargé dans votre dossier htdocs ● Configurer les droits d'accès aux fichiers º ./flow3 core:setfilepermissions john www-data www-data º Remplacer john par votre nom d'utilisateur ● 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. Mehdi Guermazi À la découverte de FLOW 3 Configuration 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. Mehdi Guermazi À la découverte de FLOW 3 Configuration/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. Mehdi Guermazi À la découverte de FLOW 3 Résultat
  • 10. Mehdi Guermazi À la découverte de FLOW 3 Création d'un package (Application web) ● Le code d'une 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 l'application. ● 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 qu'on peut afficher en visitant l'adresse suivante : dev.confooflow3.local/Infoglobe.Demo/
  • 11. Mehdi Guermazi À la découverte de FLOW 3 Aperçu d'un 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 c'est grâce à cette fonction qu'on a obtenu le résultat d'affichage dans le navigateur ● Créons l'action Hello ensemble : (Important!!! Les commentaires) /** * Hello action * * @param string $name Your name * @return string The hello */ public function helloAction($name) { return 'Hello ' . $name . '!'; }
  • 12. Mehdi Guermazi À la découverte de FLOW 3 Focus 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 l'application (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 n'aurez pas à créer la structure de vos tables.
  • 13. Mehdi Guermazi À la découverte de FLOW 3 Domain 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 d'applications complexes ● Permet de se concentrer sur le domaine et la logique du domaine d'activité du client ● FLOW3 est le premier environnement de développement accès sur la conception selon de le domaine de travail.
  • 14. Mehdi Guermazi À la découverte de FLOW 3 Prenons 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. Mehdi Guermazi À la découverte de FLOW 3 Regardons de plus prêt ● L'indexAction affiche une liste de films. Tout ce que ça fait c'est aller chercher l'information 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. Mehdi Guermazi À la découverte de FLOW 3 Regardons 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. Mehdi Guermazi À la découverte de FLOW 3 Regardons de plus prêt ● PHP ne supporte pas les annotations nativement ● FLOW3 utilise les commentaires qui sont analysés par un parseur ● Par exemple l'annotation Inject demande à appeler la classe FilmRepository tout juste après que la classe FilmController soit instanciée /** * @FLOW3Inject * @var InfoglobeDemoDomainRepositoryFilmRepository */ protected $filmRepository;
  • 18. Mehdi Guermazi À la découverte de FLOW 3 Regardons de plus prêt ● Puisque FLOW3 repose sur un modèle MVC c'est la vue qui s'occupe de l'affichage ● On retrouve la vue correspondante à une action d'un contrôleur de Film dans le dossier Resouces/Private/Templates/Film/ Pour index c'est Resouces/Private/Templates/Film/Index.html
  • 19. Mehdi Guermazi À la découverte de FLOW 3 Regardons de plus prêt ● Les vues peuvent afficher le contenu qui a été affecté à des variables de gabarit ● L'espace 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. Mehdi Guermazi À la découverte de FLOW 3 Regardons 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 l'attribut argments qui contient {film:film} On renvoie dans les paramètres de l'url l'objet film qui a été assigné dans la varaible de gabarit film. ● Dans l'attribut action on a choisit l'action « show » donc on appelle le contrôleur actuel Film et l'action showAction en lui renvoyant l'objet film. ● Si on clique sur le lien la méthode showAction sera appelée.
  • 21. Mehdi Guermazi À la découverte de FLOW 3 Regardons de plus prêt ● newAction ne contient aucun code PHP elle ne fait qu'afficher 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 c'est 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 à l'utilisateur pour lui affirmer que son film a été créé $this->addFlashMessage('Created a new film.');
  • 22. Mehdi Guermazi À la découverte de FLOW 3 Le 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 $post's 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. Mehdi Guermazi À la découverte de FLOW 3 Le 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. Mehdi Guermazi À la découverte de FLOW 3 Doctrine 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. Mehdi Guermazi À la découverte de FLOW 3 La 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 ● l'accès aux objets, des structures de contrôle, boucles ... ● designer-friendly ● extensible (les aides de vue, les widgets)
  • 26. Mehdi Guermazi À la découverte de FLOW 3 La 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. Mehdi Guermazi À la découverte de FLOW 3 La 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. Mehdi Guermazi À la découverte de FLOW 3 La 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. Mehdi Guermazi À la découverte de FLOW 3 La 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. Mehdi Guermazi À la découverte de FLOW 3 La 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. Mehdi Guermazi À la découverte de FLOW 3 Templating – Formulaire (modèle) <?php namespace InfoglobeDemoDomainModel; use TYPO3FLOW3Annotations as FLOW3; /** * A Film * * @FLOW3Scope("prototype") * @FLOW3Entity */ class Film { /** * The name * @var string */ protected $name;
  • 32. Mehdi Guermazi À la découverte de FLOW 3 Templating – 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. Mehdi Guermazi À la découverte de FLOW 3 Validation ● Validation pour la sécurité et validation pour l'intégrité ● les données entrantes doit être validée pour des raisons de sécurité ● Balisage malin dans le contenu soumis ● Injection d'SQL ● l'inté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. Mehdi Guermazi À la découverte de FLOW 3 Validation 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. Mehdi Guermazi À la découverte de FLOW 3 Les 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. Mehdi Guermazi À la découverte de FLOW 3 Mise à 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 l'environnement de production, vous devez gérer manuellement les modifications de structure
  • 37. Mehdi Guermazi À la découverte de FLOW 3 Support par ligne de commande ● Permettre aux administrateurs de l'application de la gérer facilement pour le déploiement et pour d'autres actions comme la création d'utilisateur par exemple. ● Permettre de créer vos propres actions en ligne de commande.
  • 38. Mehdi Guermazi À la découverte de FLOW 3 Sécurité ● Sécurité accrue par défaut ● la sécurité est centralisée (AOP) ● calquée sur l'expérience du projet TYPO3 et Spring Security (framework Java) ● assure l'authentification, l'autorisation, la validation, le filtrage ... ● extensible pour une nouvelle authentification ou des mécanismes d'autorisation
  • 39. Mehdi Guermazi À la découverte de FLOW 3 Programmation 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) d'utiliser l'AOP en PHP
  • 40. Mehdi Guermazi À la découverte de FLOW 3 Merci ● 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