FuelPHP - Exemple de travail complet

Dans ce chapitre, nous allons apprendre à créer une application BookStore complète basée sur MVC dans FuelPHP.

Étape 1: créer un projet

Créez un nouveau projet nommé «BookStore» dans FuelPHP à l'aide de la commande suivante.

oil create bookstore

Étape 2: créer une mise en page

Créez une nouvelle mise en page pour notre application. Créez un fichier, layout.php à l'emplacement fuel / app / views / layout.php. Le code est comme suit,

fuel / app / views / layout.php

<!DOCTYPE html> 
<html lang = "en"> 
   <head> 
      <meta charset = "utf-8"> 
      <meta http-equiv = "X-UA-Compatible" content = "IE = edge"> 
      <meta name = "viewport" content = "width = device-width, initial-scale = 1">  
      <title><?php echo $title; ?></title>  
      
      <!-- Bootstrap core CSS --> 
      <link href = "/assets/css/bootstrap.min.css" rel = "stylesheet">  
      <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
      </script> 
      <script src = "/assets/js/bootstrap.min.js"></script> 
   </head>  
   
   <body> 
      <nav class = "navbar navbar-inverse navbar-fixed-top"> 
         <div class = "container"> 
            <div class = "navbar-header">
               
               <button type = "button" class = "navbar-toggle collapsed" 
                  datatoggle = "collapse" data-target = "#navbar" 
                  aria-expanded = "false" ariacontrols = "navbar"> 
                  <span class=  "sr-only">Toggle navigation</span> 
                  <span class = "icon-bar"></span> 
                  <span class = "icon-bar"></span> 
                  <span class = "icon-bar"></span> 
               </button> 
               <a class = "navbar-brand" href = "#">FuelPHP Sample</a> 
            </div> 
            
            <div id = "navbar" class = "collapse navbar-collapse"> 
               <ul class = "nav navbar-nav"> 
                  <li class = "active"><a href = "/book/index">Home</a></li> 
                  <li><a href = "/book/add">Add book</a></li> 
               </ul> 
            </div><!--/.nav-collapse --> 
         </div> 
      </nav>  
      
      <div class = "container"> 
         <div class = "starter-template" style = "padding: 50px 0 0 0;"> 
            <?php echo $content; ?> 
         </div> 
      
      </div><!-- /.container --> 
   </body>
   
</html>

Ici, nous utilisons un modèle bootstrap. FuelPHP a un support de première classe pour les modèles d'amorçage. Nous avons créé deux variables, le titre et le contenu. title est utilisé pour spécifier le titre de la page actuelle et le contenu est utilisé pour spécifier les détails de la page actuelle.

étape 3: créer un contrôleur

Créez un nouveau contrôleur, Controller_Book pour afficher, ajouter, modifier et supprimer le livre. Créez un nouveau fichier, fuel / app / classes / controller / book.php et placez le code suivant.

fuel / app / classes / controller / book.php

<?php  
   class Controller_Book extends Controller_Template {
      public $template = 'layout'; 
      public function action_index() { 
         
         // Create the view object 
         $view = View::forge('book/index');  
         
         // set the template variables 
         $this->template->title = "Book index page"; 
         $this->template->content = $view; 
      } 
   }

Ici, nous avons créé le contrôleur de livre en héritant du contrôleur de modèle et en définissant le modèle par défaut sur fuel / app / views / layout.php.

étape 4: créer la vue d'index

Créez un dossier, réservez dans le répertoire views sous le dossier fuel / app / views. Ensuite, créez un fichier index.php dans le dossier du livre et ajoutez le code suivant,

fuel / app / views / index.php

<h3>index page</h3>

À partir de maintenant, nous avons créé un contrôleur de livre de base.

étape 5: modifier l'itinéraire par défaut

Mettez à jour l'itinéraire par défaut pour définir la page d'accueil de l'application pour réserver le contrôleur. Ouvrez le fichier de configuration de routage par défaut, fuel / app / config / routes.php et modifiez-le comme suit.

fuel / app / config / routes.php

<?php 
   return array ( 
      '_root_'  => 'book/index',  // The default route 
      '_404_'   => 'welcome/404', // The main 404 route 

      'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'), 
   );

Maintenant, en demandant l'URL, http: // localhost: 8080 / renverra la page d'index du contrôleur de livre comme suit,

étape 6: créer une base de données

Créez une nouvelle base de données sur le serveur MySQL, en utilisant la commande suivante,

create database tutorialspoint_bookdb

Ensuite, créez une table dans la base de données à l'aide de la commande suivante,

CREATE TABLE book ( 
   id INT PRIMARY KEY AUTO_INCREMENT, 
   title VARCHAR(80) NOT NULL, 
   author VARCHAR(80) NOT NULL, 
   price DECIMAL(10, 2) NOT NULL 
);

Insérez un exemple d'enregistrement dans la table à l'aide de l'instruction SQL suivante.

INSERT 
INTO 
   book(title, 
   author, 
   price) 
VALUES( 
   'The C Programming Language', 
   'Dennie Ritchie', 
   25.00 
),( 
   'The C++ Programming Language', 
   'Bjarne Stroustrup', 
   80.00
),( 
   'C Primer Plus (5th Edition)', 
   'Stephen Prata', 
   45.00 
),('Modern PHP', 'Josh Lockhart', 10.00),( 
   'Learning PHP, MySQL & JavaScript, 4th Edition', 
   'Robin Nixon', 
   30.00 
)

étape 7: configurer la base de données

Configurez la base de données à l'aide du fichier de configuration de la base de données, db.php situé dans fuel / app / config.

fuel / app / config / db.php

<?php  
   return array ( 
      'development' => array ( 
         'type'           => 'mysqli', 
         'connection'     => array ( 
            'hostname'       => 'localhost', 
            'port'           => '3306', 
            'database'       => 'tutorialspoint_bookdb', 
            'username'       => 'root', 
            'password'       => 'password', 
            'persistent'     => false, 
            'compress'       => false, 
         ), 
         'identifier'     => '`', 
         'table_prefix'   => '', 
         'charset'        => 'utf8', 
         'enable_cache'   => true, 
         'profiling'      => false, 
         'readonly'       => false, 
      ),
      'production' => array ( 
         'type'           => 'mysqli', 
         'connection'     => array ( 
            'hostname'       => 'localhost', 
            'port'           => '3306', 
            'database'       => 'tutorialspoint_bookdb', 
            'username'       => 'root', 
            'password'       => 'password', 
            'persistent'     => false, 
            'compress'       => false, 
         ), 
         'identifier'     => '`', 
         'table_prefix'   => '', 
         'charset'        => 'utf8', 
         'enable_cache'   => true, 
         'profiling'      => false, 
         'readonly'       => false, 
      ), 
   );

étape 8: inclure le package Orm

Mettez à jour le fichier de configuration principal pour inclure le package ORM. Il se trouve dans «fuel / app / config /».

fuel / app / config / config.php

'always_load' => array ( 
   'packages' => array ( 
      'orm' 
   ), 
),

étape 9: créer un modèle

Créez un modèle de livre dans book.php situé dans «fuel / app / classes / model». Il est défini comme suit -

fuel / app / classes / model / book.php

<?php  
   class Model_Book extends Orm\Model { 
      protected static $_connection = 'production'; 
      protected static $_table_name = 'book'; 
      protected static $_primary_key = array('id'); 
      
      protected static $_properties = array ( 
         'id',  
         'title' => array ( 
            'data_type' => 'varchar', 
            'label' => 'Book title', 
            'validation' => array ( 
               'required',  
               'min_length' => array(3),  
               'max_length' => array(80) 
            ), 
            
            'form' => array ( 
               'type' => 'text' 
            ), 
         ),  
         'author' => array ( 
            'data_type' => 'varchar', 
            'label' => 'Book author', 
            'validation' => array ( 
               'required', 
            ), 
            'form' => array ( 
               'type' => 'text' 
            ), 
         ),  
         'price' => array ( 
            'data_type' => 'decimal', 
            'label' => 'Book price', 
            'validation' => array ( 
               'required', 
            ), 
            'form' => array ( 
               'type' => 'text' 
            ), 
         ),  
      );  
      protected static $_observers = array('Orm\\Observer_Validation' => array ( 
         'events' => array('before_save') 
      )); 
   }

Ici, nous avons spécifié les détails de la base de données comme propriétés du modèle. Il a également des détails de validation.

étape 10: afficher des livres

Mettez à jour l'action d'index dans le contrôleur de livre pour répertorier les livres disponibles dans la base de données.

fuel / app / classes / controller / book.php

<?php  
   class Controller_Book extends Controller_Template { 
      public $template = 'layout'; 
      public function action_index() { 
         
         // Create the view object 
         $view = View::forge('book/index');  
         
         // fetch the book from database and set it to the view 
         $books = Model_Book::find('all'); 
         $view->set('books', $books);  
         
         // set the template variables
         $this->template->title = "Book index page"; 
         $this->template->content = $view; 
      } 
   }

Ici, nous avons utilisé le orm pour récupérer les détails du livre dans la base de données, puis les transmettre aux vues.

étape 11: mettre à jour la vue d'index

Mettez à jour le fichier de vue index.php situé dans «fuel / app / views / book». Le code complet mis à jour est le suivant,

carburant / app / vues / livre / index.php

<table class = "table"> 
   <thead> 
      <tr> 
         <th>#</th> 
         <th>Title</th> 
         <th>Author</th> 
         <th>Price</th> 
         <th></th> 
      </tr> 
   </thead> 
   
   <tbody> 
      <?php 
         foreach($books as $book) {  
      ?> 
      
      <tr> 
         <td><?php echo $book['id']; ?></td> 
         <td><?php echo $book['title']; ?></td> 
         <td><?php echo $book['author']; ?></td> 
         <td><?php echo $book['price']; ?></td> 
         <td> 
            <a href = "/book/edit/<?php echo $book['id']; ?>">Edit</a> 
            <a href = "/book/delete/<?php echo $book['id']; ?>">Delete</a> 
         </td>
      </tr> 
      
      <?php 
      } 
      ?> 
   </tbody> 
</table> 
<ul>
</ul>

Maintenant, en demandant l'URL, http: // localhost: 8080 / affichera la page comme suit -

étape 12: Créer une action pour ajouter un livre

Créez la fonctionnalité pour ajouter un nouveau livre dans la librairie. Créez une nouvelle action, action_add dans le contrôleur de livre comme suit,

public function action_add() { 
   
   // create a new fieldset and add book model 
   $fieldset = Fieldset::forge('book')->add_model('Model_Book');  
   
   // get form from fieldset 
   $form = $fieldset->form();  
   
   // add submit button to the form 
   $form->add('Submit', '', array('type' => 'submit', 'value' => 'Submit'));
   
   // build the form  and set the current page as action  
   $formHtml = $fieldset->build(Uri::create('book/add'));  
   $view = View::forge('book/add'); 
   $view->set('form', $formHtml, false);  
   
   if (Input::param() != array()) { 
      try { 
         $book = Model_Book::forge(); 
         $book->title = Input::param('title'); 
         $book->author = Input::param('author'); 
         $book->price = Input::param('price'); 
         $book->save();  
         Response::redirect('book'); 
      } catch (Orm\ValidationFailed $e) { 
         $view->set('errors', $e->getMessage(), false); 
      } 
   }  
   $this->template->title = "Book add page";  
   $this->template->content = $view; }

Ici, les deux processus suivants sont en cours d'exécution,

  • Création du formulaire de livre pour ajouter un livre à l'aide des méthodes Fieldset et du modèle de livre.

  • Traitement du formulaire de livre, lorsque l'utilisateur entre les informations du livre et renvoie le formulaire. Il peut être trouvé en vérifiant la méthode Input :: param () pour toutes les données soumises. Le traitement du formulaire implique les étapes suivantes -

    • Rassemblez les informations du livre.

    • Validez les informations du livre. Nous avons déjà défini la validation à appeler avant la méthode de sauvegarde. Si la validation échoue, elle lèvera l' exception Orm \ ValidationFailed.

    • Stockez les informations du livre dans la base de données.

    • Redirigez l'utilisateur vers la page d'index en cas de succès. Sinon, affichez à nouveau le formulaire.

Nous faisons les deux, montrant le formulaire ainsi que le traitement du formulaire dans la même action. Lorsque l'utilisateur appelle l'action pour la première fois, il affiche le formulaire. Lorsque l'utilisateur entre les informations du livre et soumet les données, il traite le formulaire.

étape 13: créer la vue pour l'action d'ajout de livre

Créez la vue pour l'action d'ajout de livre. Créez un nouveau fichier, fuel / app / views / book / add.php et entrez le code suivant,

<style>  
   #form table { 
      width: 90%; 
   }  
   #form table tr { 
      width: 90% 
   }  
   #form table tr td { 
      width: 50% 
   }  
   #form input[type = text], select { 
      width: 100%; 
      padding: 12px 20px; 
      margin: 8px 0; 
      display: inline-block; 
      border: 1px solid #ccc; 
      border-radius: 4px; 
      box-sizing: border-box; 
   }  
   #form input[type = submit] { 
      width: 100%;
      background-color: #3c3c3c; 
      color: white; 
      padding: 14px 20px; 
      margin: 8px 0; 
      border: none; 
      border-radius: 4px; 
      cursor: pointer; 
   }  
   #form div { 
      border-radius: 5px; 
      background-color: #f2f2f2; 
      padding: 20px; 
   }  
</style>  

<div id = "form">  
   <h2>Book form</h2> 
   
   <?php   
      if(isset($errors)) { 
         echo $errors; 
      } 
      echo $form;  
   ?> 
</div>

Ici, nous montrons simplement le formulaire créé dans la méthode d'action. De plus, nous montrons les erreurs, le cas échéant.

étape 14: vérification de l'action d'ajout de livre

Demander l'url, http: // localhost: 8080 / book / add ou cliquer sur le lien de navigation Ajouter un livre, affichera le formulaire comme suit,

Forme

Formulaire avec données

Après avoir saisi les informations du livre et soumis la page, les informations du livre seront stockées dans la base de données et la page sera redirigée vers la page d'index comme suit.

Liste de livres avec livre nouvellement ajouté

étape 15: Création d'une action pour modifier le livre

Créez la fonctionnalité pour modifier et mettre à jour les informations du livre existant. Créez une nouvelle action, action_edit dans le contrôleur de livre comme suit.

public function action_edit($id = false) { 
   if(!($book = Model_Book::find($id))) { 
      throw new HttpNotFoundException(); 
   }  
   
   // create a new fieldset and add book model 
   $fieldset = Fieldset::forge('book')->add_model('Model_Book'); 
   $fieldset->populate($book);  
   
   // get form from fieldset 
   $form = $fieldset->form();  
   
   // add submit button to the form
   $form->add('Submit', '', array('type' => 'submit', 'value' => 'Submit'));  
   
   // build the form  and set the current page as action  
   $formHtml = $fieldset->build(Uri::create('book/edit/' . $id));  
   $view = View::forge('book/add'); 
   $view->set('form', $formHtml, false);  
   
   if (Input::param() != array()) { 
      try { 
         $book->title = Input::param('title'); 
         $book->author = Input::param('author'); 
         $book->price = Input::param('price'); 
         $book->save(); 
         Response::redirect('book'); 
      } catch (Orm\ValidationFailed $e) { 
         $view->set('errors', $e->getMessage(), false); 
      } 
   }  
   $this->template->title = "Book edit page"; 
   $this->template->content = $view; 
}

Il est similaire à ajouter une action, sauf qu'il recherche le livre demandé par identifiant avant de traiter la page. Si des informations sur le livre sont trouvées dans la base de données, elle continuera et affichera les informations du livre dans le formulaire. Sinon, il lancera une exception de fichier introuvable et quittera.

étape 16: créer la vue pour l'action d'édition

Créez la vue pour l'action de modification du livre. Ici, nous utilisons la même vue que celle utilisée pour l'action d'ajout.

Étape 17: vérification de l'action d'édition du livre.

Cliquez sur le lien d'édition de n'importe quel livre dans la page de liste de livres, il affichera le formulaire de livre correspondant comme suit -

Formulaire avec détails du livre

étape 18: Créer une action pour supprimer le livre

Créez la fonctionnalité pour supprimer le livre de la librairie. Créez une nouvelle action, action_delete dans le contrôleur de livre comme suit,

public function action_delete($id = null) { 
   if ( ! ($book = Model_Book::find($id))) { 
      throw new HttpNotFoundException(); 

   } else { 
      $book->delete(); 
   } 
   Response::redirect('book'); 
}

Ici, nous vérifions l'existence du livre dans la base de données en utilisant l'ID de livre fourni. Si le livre est trouvé, il est supprimé et redirigé vers la page d'index. Sinon, une page non trouvée d'informations sera affichée.

étape 19: vérification de l'action de suppression

Vérifiez l'action de suppression en cliquant sur le lien de suppression dans la page de liste des livres. Il supprimera le livre demandé et sera à nouveau redirigé vers la page d'index.

Enfin, toutes les fonctionnalités pour ajouter, modifier, supprimer et répertorier les informations du livre sont créées.

FuelPHP est simple, flexible, évolutif et facilement configurable par rapport aux autres frameworks PHP basés sur MVC. Il fournit toutes les fonctionnalités du framework MVC moderne. Il peut être utilisé tel quel ou peut être complètement modifié pour répondre à nos besoins. Surtout, c'est un excellent choix pour le développement Web.