Conférence PHP Tour 2012
FuelPHP : A framework, yes – Automagic, no!




                                            Julian Espérat
                                        Sébastien Drouyer

                                                 Nantes
                                        30 novembre 2012




                                                  1/25
Sommaire
 Introduction

 Pourquoi nous aimons FuelPHP

 Oil : la ligne de commande

 Les Packages et l'ORM

 Le futur de FuelPHP

 Questions




                                2/25
Conférenciers




      Sébastien Drouyer
           @sdrdis




       Julian Espérat
       @savageman86


                          3/25
À propos de Novius
  Créée en 1996, basée à Lyon et
  Paris, 40 personnes dont 18
  développeurs.

  Deux métiers : agence web,
  édition logicielle.

  Nos clients : Les Échos,
  Cinémathèque Française, FIS...

  Nos technos : web et libres
  uniquement (LAMP, HTML,
  CSS, JS).


                                   4/25
À propos de Novius OS
  8 ans d'expérience dans le
  CMS.

  CMS open-source nouvelle
  génération, conçu pour
  l'Internet multi-canal.

  Entre le CMS et le web OS.

  Basé sur les dernières
  technologies web : HTML5,
  jQuery UI, Wijmo et FuelPHP.



                                 5/25
Genèse de FuelPHP
 « FuelPHP est né de la frustration des développeurs avec les
 frameworks actuels. »


 1185 watchers et 184 forks sur Github
 2640 followers sur Twitter


 Création fin 2010
 1.0 – 31 juillet 2011
 1.1 – 13 décembre 2011
 1.2 – 3 juin 2012
 1.3 – 5 septembre 2012
 1.4 – 9 novembre 2012


                                                                6/25
Core Team de FuelPHP

    Harro Verton / @WanWizard


    Jelmer Schreuder / @jschreuder


    Frank de Jonge / @frankdejonge




    Dan Horrigan                     Phil Sturgeon
    Fondateur




                                                     7/25
Philosophie de FuelPHP
  S’inspire des meilleures idées des autres frameworks


  Nouveau départ avec PHP 5.3


  Simple, flexible et léger


  "community-driven"


  Configuration over convention – no automagic!




                                                         8/25
Inspiration des autres frameworks




     Simplicité


     Léger et rapide


     Facile à apprendre


     Peu de dépendances serveur




                                    9/25
Inspiration des autres frameworks




     Flexibilité dans la structure des fichiers


     Hiérarchie des répertoires


     Excellent Query Builder




                                                  10/25
Inspiration des autres frameworks




     Ligne de commande


     Migrations


     Scaffolding


     ORM (Active Record)




                                    11/25
Inspiration des autres frameworks




     HMVC / REST


     Templates


     Authentification / ACL


     Envoi de mail




                                    12/25
Sommaire
 Introduction

 Pourquoi nous aimons FuelPHP

 Oil : la ligne de commande

 Les Packages et l'ORM

 Le futur de FuelPHP

 Questions




                                13/25
Syntaxe sexy et concise
// ~/classes/controller/auth.php
class Controller_Admin extends Controller
{
    public function before()
    {
        if ( ! $this->user_is_logged() )
        {
            Response::redirect('login/form');
        }
    }
}

// ~/classes/controller/login.php
class Controller_Login extends Controller
{
    public function action_form()
    {
        return Response::forge(View::forge('login/form'));
    }
}



                                                             14/25
Fichier de configuration
// Stockage : ~/config/date.php
return array(
    'pattern' => array(
        'short' => '%d/%m/%Y',
        'full' => '%d/%m/%Y %H:%M',
        'mysql' => '%Y-%m-%d %H:%M:%S',
        'mysql_date' => '%Y-%m-%d',
    ),
);
// Usage
$config = include 'config/date.php';

// Exemple
function strftime_pattern($date, $pattern = 'short')
{
    Config::load('date');
    $pattern = Config::get("date.format.$pattern", '%d/%m/%Y');
    return strftime($pattern, $date);
}



                                                             15/25
Exemples de drivers
natifs
  Config : php, yml, json, ini
  Session : cookie, file,
  memcached, db, redis
  Cache : file, memcached,
  apc, redis
  Image : gd, imagick,
  imagemagick
  View : php
  Parser : twig, mustache,
  markdown, smarty, dwoo,
  haml, phptal



                                 16/25
Appels statiques et instances
// Configuration : ~/config/session.php
return array(
    'driver' => 'file',
    // ...
    'file' => array(
        'path' => '/tmp',
        // ...
    ),
    'memcached' => array(...),
    'db' => array(...),
    'redis' => array(...),
);
--------------------------------------------------------------
// Exemple avec un appel statique
$user = Session::get('user');


// Exemple identique avec un appel dynamique
$session = Session::forge('file'); // 'file' est le driver
$user = $session->get('user');



                                                             17/25
Sommaire
 Introduction

 Pourquoi nous aimons FuelPHP

 Oil : la ligne de commande

 Les Packages et l'ORM

 Le futur de FuelPHP

 Questions




                                18/25
Oil : la ligne de commande FuelPHP


  Package et utilitaire de FuelPHP




  Inspiré de Ruby on Rails




  Philosophie : optionel, ligne de commande pour simplifier le
  développement




                                                                 19/25
Sommaire
 Introduction

 Pourquoi nous aimons FuelPHP

 Oil : la ligne de commande

 Les Packages et l'ORM

 Le futur de FuelPHP

 Questions




                                20/25
Les Packages et l'ORM
  Possibilité d'ajouter des
  packages
  ●   Tous dans fuel/packages/
  ●   Simple modification dans le
      fichier de configuration


  Packages installés de base
  ●   Auth
  ●   Email
  ●   Oil
  ●   Orm
  ●   Parser

                                    21/25
Les Packages et l'ORM
  Orm
  ●   Très largement inspiré d'Active Record
  ●   Gère les relations entre objets
         ●   has_one
         ●   belongs_to
         ●   has_many
         ●   many_to_many

  ●   Gère les observers
         ●   Comportement sur les colonnes
         ●   CreatedAt : date de création
         ●   UpdatedAt : date de mise à jour




                                               22/25
Sommaire
 Introduction

 Pourquoi nous aimons FuelPHP

 Oil : la ligne de commande

 Les Packages et l'ORM

 Le futur de FuelPHP

 Questions




                                23/25
Futur de FuelPHP
  FuelPHP 2.0 : nouvelle architecture
  ●   Changement progressif dans les versions 1.*


  Composer et PSR−1


  Séparation des fonctionnalités dans des packages spécialisé


  Conditionné par sa communauté, dans un domaine concurrentiel




                                                                24/25
Merci pour votre attention. Des questions ?

http://www.fuelphp.com
http://www.novius-os.org




                            Sébastien Drouyer : @sdrdis
                                Julian Espérat : @savageman86

                                                     Nantes
                                            30 novembre 2012




                                                     25/25

Fuel php nantes 2012

  • 1.
    Conférence PHP Tour2012 FuelPHP : A framework, yes – Automagic, no! Julian Espérat Sébastien Drouyer Nantes 30 novembre 2012 1/25
  • 2.
    Sommaire Introduction Pourquoinous aimons FuelPHP Oil : la ligne de commande Les Packages et l'ORM Le futur de FuelPHP Questions 2/25
  • 3.
    Conférenciers Sébastien Drouyer @sdrdis Julian Espérat @savageman86 3/25
  • 4.
    À propos deNovius Créée en 1996, basée à Lyon et Paris, 40 personnes dont 18 développeurs. Deux métiers : agence web, édition logicielle. Nos clients : Les Échos, Cinémathèque Française, FIS... Nos technos : web et libres uniquement (LAMP, HTML, CSS, JS). 4/25
  • 5.
    À propos deNovius OS 8 ans d'expérience dans le CMS. CMS open-source nouvelle génération, conçu pour l'Internet multi-canal. Entre le CMS et le web OS. Basé sur les dernières technologies web : HTML5, jQuery UI, Wijmo et FuelPHP. 5/25
  • 6.
    Genèse de FuelPHP « FuelPHP est né de la frustration des développeurs avec les frameworks actuels. » 1185 watchers et 184 forks sur Github 2640 followers sur Twitter Création fin 2010 1.0 – 31 juillet 2011 1.1 – 13 décembre 2011 1.2 – 3 juin 2012 1.3 – 5 septembre 2012 1.4 – 9 novembre 2012 6/25
  • 7.
    Core Team deFuelPHP Harro Verton / @WanWizard Jelmer Schreuder / @jschreuder Frank de Jonge / @frankdejonge Dan Horrigan Phil Sturgeon Fondateur 7/25
  • 8.
    Philosophie de FuelPHP S’inspire des meilleures idées des autres frameworks Nouveau départ avec PHP 5.3 Simple, flexible et léger "community-driven" Configuration over convention – no automagic! 8/25
  • 9.
    Inspiration des autresframeworks Simplicité Léger et rapide Facile à apprendre Peu de dépendances serveur 9/25
  • 10.
    Inspiration des autresframeworks Flexibilité dans la structure des fichiers Hiérarchie des répertoires Excellent Query Builder 10/25
  • 11.
    Inspiration des autresframeworks Ligne de commande Migrations Scaffolding ORM (Active Record) 11/25
  • 12.
    Inspiration des autresframeworks HMVC / REST Templates Authentification / ACL Envoi de mail 12/25
  • 13.
    Sommaire Introduction Pourquoinous aimons FuelPHP Oil : la ligne de commande Les Packages et l'ORM Le futur de FuelPHP Questions 13/25
  • 14.
    Syntaxe sexy etconcise // ~/classes/controller/auth.php class Controller_Admin extends Controller { public function before() { if ( ! $this->user_is_logged() ) { Response::redirect('login/form'); } } } // ~/classes/controller/login.php class Controller_Login extends Controller { public function action_form() { return Response::forge(View::forge('login/form')); } } 14/25
  • 15.
    Fichier de configuration //Stockage : ~/config/date.php return array( 'pattern' => array( 'short' => '%d/%m/%Y', 'full' => '%d/%m/%Y %H:%M', 'mysql' => '%Y-%m-%d %H:%M:%S', 'mysql_date' => '%Y-%m-%d', ), ); // Usage $config = include 'config/date.php'; // Exemple function strftime_pattern($date, $pattern = 'short') { Config::load('date'); $pattern = Config::get("date.format.$pattern", '%d/%m/%Y'); return strftime($pattern, $date); } 15/25
  • 16.
    Exemples de drivers natifs Config : php, yml, json, ini Session : cookie, file, memcached, db, redis Cache : file, memcached, apc, redis Image : gd, imagick, imagemagick View : php Parser : twig, mustache, markdown, smarty, dwoo, haml, phptal 16/25
  • 17.
    Appels statiques etinstances // Configuration : ~/config/session.php return array( 'driver' => 'file', // ... 'file' => array( 'path' => '/tmp', // ... ), 'memcached' => array(...), 'db' => array(...), 'redis' => array(...), ); -------------------------------------------------------------- // Exemple avec un appel statique $user = Session::get('user'); // Exemple identique avec un appel dynamique $session = Session::forge('file'); // 'file' est le driver $user = $session->get('user'); 17/25
  • 18.
    Sommaire Introduction Pourquoinous aimons FuelPHP Oil : la ligne de commande Les Packages et l'ORM Le futur de FuelPHP Questions 18/25
  • 19.
    Oil : laligne de commande FuelPHP Package et utilitaire de FuelPHP Inspiré de Ruby on Rails Philosophie : optionel, ligne de commande pour simplifier le développement 19/25
  • 20.
    Sommaire Introduction Pourquoinous aimons FuelPHP Oil : la ligne de commande Les Packages et l'ORM Le futur de FuelPHP Questions 20/25
  • 21.
    Les Packages etl'ORM Possibilité d'ajouter des packages ● Tous dans fuel/packages/ ● Simple modification dans le fichier de configuration Packages installés de base ● Auth ● Email ● Oil ● Orm ● Parser 21/25
  • 22.
    Les Packages etl'ORM Orm ● Très largement inspiré d'Active Record ● Gère les relations entre objets ● has_one ● belongs_to ● has_many ● many_to_many ● Gère les observers ● Comportement sur les colonnes ● CreatedAt : date de création ● UpdatedAt : date de mise à jour 22/25
  • 23.
    Sommaire Introduction Pourquoinous aimons FuelPHP Oil : la ligne de commande Les Packages et l'ORM Le futur de FuelPHP Questions 23/25
  • 24.
    Futur de FuelPHP FuelPHP 2.0 : nouvelle architecture ● Changement progressif dans les versions 1.* Composer et PSR−1 Séparation des fonctionnalités dans des packages spécialisé Conditionné par sa communauté, dans un domaine concurrentiel 24/25
  • 25.
    Merci pour votreattention. Des questions ? http://www.fuelphp.com http://www.novius-os.org Sébastien Drouyer : @sdrdis Julian Espérat : @savageman86 Nantes 30 novembre 2012 25/25