FuelPHP - Esempio di lavoro completo

In questo capitolo impareremo come creare un'applicazione BookStore basata su MVC completa in FuelPHP.

Passaggio 1: crea un progetto

Crea un nuovo progetto denominato "BookStore" in FuelPHP utilizzando il seguente comando.

oil create bookstore

Passaggio 2: crea un layout

Crea un nuovo layout per la nostra applicazione. Crea un file, layout.php nella posizione fuel / app / views / layout.php. Il codice è il seguente,

carburante / app / visualizzazioni / 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>

Qui stiamo usando il template bootstrap. FuelPHP ha un supporto di prima classe per i modelli di bootstrap. Abbiamo creato due variabili, titolo e contenuto. titolo viene utilizzato per specificare il titolo della pagina corrente e il contenuto viene utilizzato per specificare i dettagli della pagina corrente.

passaggio 3: creare un controller

Crea un nuovo controller, Controller_Book per mostrare, aggiungere, modificare ed eliminare il libro. Crea un nuovo file, fuel / app / classes / controller / book.php e inserisci il seguente codice.

carburante / 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; 
      } 
   }

Qui, abbiamo creato il controller del libro ereditando il controller del modello e impostato il modello predefinito come fuel / app / views / layout.php.

passaggio 4: creazione della vista indice

Crea una cartella, prenota nella directory delle viste nella cartella fuel / app / views. Quindi, crea un file index.php all'interno della cartella del libro e aggiungi il seguente codice,

carburante / app / visualizzazioni / index.php

<h3>index page</h3>

A partire da ora, abbiamo creato un controller di libri di base.

passaggio 5: modificare il percorso predefinito

Aggiorna il percorso predefinito per impostare la home page dell'applicazione per il controller del libro. Apri il file di configurazione del routing predefinito, fuel / app / config / routes.php e modificalo come segue.

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

Ora, richiedendo l'URL, http: // localhost: 8080 / restituirà la pagina di indice del controller del libro come segue,

passaggio 6: creazione del database

Crea un nuovo database nel server MySQL, utilizzando il seguente comando,

create database tutorialspoint_bookdb

Quindi, crea una tabella all'interno del database utilizzando il seguente comando,

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

Inserire un record di esempio nella tabella utilizzando la seguente istruzione SQL.

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 
)

passaggio 7: configurazione del database

Configurare il database utilizzando il file di configurazione del database, db.php situato in 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, 
      ), 
   );

passaggio 8: includere il pacchetto Orm

Aggiorna il file di configurazione principale per includere il pacchetto ORM. Si trova in "fuel / app / config /".

fuel / app / config / config.php

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

passaggio 9: creare un modello

Crea un modello di libro in book.php che si trova in "fuel / app / classes / model". È definito come segue:

carburante / app / classi / modello / 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') 
      )); 
   }

Qui abbiamo specificato i dettagli del database come proprietà del modello. Ha anche i dettagli di convalida.

passaggio 10: visualizzare i libri

Aggiorna l'azione index nel controller del libro per elencare i libri disponibili nel database.

carburante / 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; 
      } 
   }

Qui abbiamo usato il file orm per recuperare i dettagli del libro dal database e quindi passare i dettagli del libro alle visualizzazioni.

passaggio 11: Aggiorna visualizzazione indice

Aggiorna il file di visualizzazione index.php che si trova in "fuel / app / views / book". Il codice completo aggiornato è il seguente,

carburante / app / visualizzazioni / book / 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>

Ora, richiedendo l'URL, http: // localhost: 8080 / mostrerà la pagina come segue:

passaggio 12: creare un'azione per aggiungere il libro

Crea la funzionalità per aggiungere un nuovo libro nella libreria. Crea una nuova azione, action_add nel controller del libro come segue,

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; }

Qui vengono eseguiti i seguenti due processi,

  • Creazione del modulo del libro per aggiungere il libro utilizzando i metodi Fieldset e il modello del libro.

  • Elaborazione del modulo del libro, quando l'utente inserisce le informazioni sul libro e restituisce il modulo. Può essere trovato controllando il metodo Input :: param () per tutti i dati inviati. L'elaborazione del modulo prevede i seguenti passaggi:

    • Raccogli le informazioni sul libro.

    • Convalida le informazioni sul libro. Abbiamo già impostato la convalida da chiamare prima del metodo di salvataggio. Se la convalida non riesce, verrà generata l' eccezione Orm \ ValidationFailed.

    • Memorizza le informazioni sul libro nel database.

    • Reindirizza l'utente alla pagina di indice in caso di successo. Altrimenti, mostra di nuovo il modulo.

Stiamo facendo entrambe le cose, mostrando il modulo e elaborando il modulo nella stessa azione. Quando l'utente chiama l'azione per la prima volta, mostrerà il modulo. Quando l'utente inserisce le informazioni del libro e invia i dati, elaborerà il modulo.

passaggio 13: creare la vista per l'azione aggiungi libro

Crea la vista per l'azione Aggiungi libro. Crea un nuovo file, fuel / app / views / book / add.php e inserisci il seguente codice,

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

Qui, stiamo solo mostrando il modulo creato nel metodo di azione. Inoltre, stiamo mostrando gli eventuali errori.

passaggio 14: controllo dell'azione aggiungi libro

Richiedendo l'URL, http: // localhost: 8080 / book / add o facendo clic sul collegamento di navigazione Aggiungi libro, verrà visualizzato il modulo come segue,

Modulo

Forma con dati

Dopo aver inserito le informazioni sul libro e aver inviato la pagina, le informazioni sul libro verranno memorizzate nel database e la pagina verrà reindirizzata alla pagina dell'indice come segue.

Elenco dei libri con il libro appena aggiunto

fase 15: creazione dell'azione per modificare il libro

Crea la funzionalità per modificare e aggiornare le informazioni sul libro esistente. Crea una nuova azione, action_edit nel controller del libro come segue.

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; 
}

È simile all'azione di aggiunta, tranne per il fatto che cerca il libro richiesto per ID prima di elaborare la pagina. Se vengono trovate informazioni sul libro nel database, procederà e mostrerà le informazioni sul libro nel modulo. Altrimenti, lancerà un'eccezione di file non trovato ed uscirà.

passaggio 16: creare la vista per l'azione di modifica

Crea la vista per modificare l'azione del libro. Qui stiamo usando la stessa vista usata per l'aggiunta di azioni.

passaggio 17: controllo dell'azione di modifica del libro.

Fare clic sul collegamento di modifica di qualsiasi libro nella pagina di elenco del libro, verrà visualizzato il modulo del libro corrispondente come segue:

Modulo con i dettagli del libro

passaggio 18: creare un'azione per eliminare il libro

Crea la funzionalità per eliminare il libro dalla libreria. Crea una nuova azione, action_delete nel controller del libro come segue,

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

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

Qui, stiamo verificando l'esistenza del libro nel database utilizzando l'id del libro fornito. Se il libro viene trovato, viene eliminato e reindirizzato alla pagina dell'indice. In caso contrario, verrà visualizzata una pagina non trovata.

passaggio 19: controllo dell'azione di eliminazione

Controlla l'azione di eliminazione facendo clic sul link Elimina nella pagina dell'elenco dei libri. Eliminerà il libro richiesto e verrà reindirizzato nuovamente alla pagina dell'indice.

Infine, vengono create tutte le funzionalità per aggiungere, modificare, eliminare ed elencare le informazioni sul libro.

FuelPHP è semplice, flessibile, scalabile e facilmente configurabile rispetto ad altri framework PHP basati su MVC. Fornisce tutte le funzionalità del moderno framework MVC. Può essere utilizzato così com'è o può essere modificato completamente in base alle nostre esigenze. Soprattutto, è un'ottima scelta per lo sviluppo web.