FuelPHP - Ejemplo de trabajo completo

En este capítulo, aprenderemos cómo crear una aplicación de librería basada en MVC completa en FuelPHP.

Paso 1: crea un proyecto

Cree un nuevo proyecto llamado "BookStore" en FuelPHP usando el siguiente comando.

oil create bookstore

Paso 2: crea un diseño

Cree un nuevo diseño para nuestra aplicación. Cree un archivo, layout.php en la ubicación fuel / app / views / layout.php. El código es el siguiente,

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>

Aquí, estamos usando una plantilla de arranque. FuelPHP tiene soporte de primera clase para plantillas de arranque. Hemos creado dos variables, título y contenido. El título se usa para especificar el título de la página actual y el contenido se usa para especificar los detalles de la página actual.

paso 3: crea un controlador

Cree un nuevo controlador, Controller_Book para mostrar, agregar, editar y eliminar el libro. Cree un nuevo archivo, fuel / app / classes / controller / book.php y coloque el siguiente código.

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

Aquí, hemos creado el controlador de libros heredando el controlador de plantilla y configuramos la plantilla predeterminada como fuel / app / views / layout.php.

paso 4: crear la vista de índice

Cree una carpeta, reserve en el directorio de vistas en la carpeta fuel / app / views. Luego, cree un archivo index.php dentro de la carpeta del libro y agregue el siguiente código,

fuel / app / views / index.php

<h3>index page</h3>

A partir de ahora, hemos creado un controlador de libros básico.

paso 5: modificar la ruta predeterminada

Actualice la ruta predeterminada para configurar la página de inicio de la aplicación para reservar el controlador. Abra el archivo de configuración de enrutamiento predeterminado, fuel / app / config / route.php y cámbielo de la siguiente manera.

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

Ahora, al solicitar la URL, http: // localhost: 8080 / devolverá la página de índice del controlador del libro de la siguiente manera,

paso 6: crear una base de datos

Cree una nueva base de datos en el servidor MySQL, usando el siguiente comando,

create database tutorialspoint_bookdb

Luego, cree una tabla dentro de la base de datos usando el siguiente 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 
);

Inserte algún registro de muestra en la tabla usando la siguiente instrucción 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 
)

paso 7: configurar la base de datos

Configure la base de datos usando el archivo de configuración de la base de datos, db.php ubicado en 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, 
      ), 
   );

paso 8: incluye el paquete Orm

Actualice el archivo de configuración principal para incluir el paquete ORM. Se encuentra en "fuel / app / config /".

fuel / app / config / config.php

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

paso 9: crea un modelo

Cree un modelo de libro en book.php ubicado en "fuel / app / classes / model". Se define de la siguiente manera:

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

Aquí, hemos especificado los detalles de la base de datos como propiedades del modelo. También tiene detalles de validación.

paso 10: Mostrar libros

Actualice la acción de índice en el controlador de libros para enumerar los libros disponibles en la base de datos.

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

Aquí, hemos utilizado el orm para obtener los detalles del libro de la base de datos y luego pasar los detalles del libro a las vistas.

paso 11: actualizar la vista de índice

Actualice el archivo de vista index.php ubicado en "fuel / app / views / book". El código actualizado completo es el siguiente,

fuel / app / views / 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>

Ahora, al solicitar la URL, http: // localhost: 8080 / mostrará la página de la siguiente manera:

paso 12: crea una acción para agregar un libro

Cree la funcionalidad para agregar un libro nuevo a la librería. Cree una nueva acción, action_add en el controlador del libro de la siguiente manera,

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

Aquí se están realizando los siguientes dos procesos,

  • Construyendo el formulario de libro para agregar libro usando métodos de Fieldset y modelo de libro.

  • Procesando el formulario del libro, cuando el usuario ingresa la información del libro y devuelve el formulario. Se puede encontrar comprobando el método Input :: param () para cualquier dato enviado. El procesamiento del formulario implica los siguientes pasos:

    • Reúna la información del libro.

    • Valide la información del libro. Ya hemos configurado la validación para que se llame antes del método de guardar. Si la validación falla, lanzará la excepción Orm \ ValidationFailed.

    • Almacene la información del libro en la base de datos.

    • Redirigir al usuario a la página de índice en caso de éxito. De lo contrario, vuelva a mostrar el formulario.

Estamos haciendo ambas cosas, mostrando el formulario y procesando el formulario en la misma acción. Cuando el usuario llama a la acción por primera vez, mostrará el formulario. Cuando el usuario ingresa la información del libro y envía los datos, procesará el formulario.

paso 13: crea la vista para la acción de agregar libro

Cree la vista para la acción de agregar libro. Cree un nuevo archivo, fuel / app / views / book / add.php e ingrese el siguiente código,

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

Aquí, solo mostramos el formulario creado en el método de acción. Además, estamos mostrando los errores, si los hay.

paso 14: comprobar la acción de añadir libro

Al solicitar la URL, http: // localhost: 8080 / book / add o hacer clic en el enlace de navegación Agregar libro, se mostrará el formulario de la siguiente manera,

Formar

Formulario con datos

Después de ingresar la información del libro y enviar la página, la información del libro se almacenará en la base de datos y la página se redirigirá a la página de índice de la siguiente manera.

Lista de libros con el libro recién agregado

paso 15: Crear acción para editar libro

Cree la funcionalidad para editar y actualizar la información del libro existente. Cree una nueva acción, action_edit en el controlador del libro de la siguiente manera.

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

Es similar a agregar acción, excepto que busca el libro solicitado por id antes de procesar la página. Si se encuentra alguna información del libro en la base de datos, procederá y mostrará la información del libro en el formulario. De lo contrario, lanzará una excepción de archivo no encontrado y saldrá.

paso 16: crear la vista para editar la acción

Crea la vista para editar la acción del libro. Aquí, estamos usando la misma vista utilizada para agregar acción.

Paso 17: Verificar la acción de editar libro.

Haga clic en el enlace de edición de cualquier libro en la página de lista de libros, se mostrará el formulario de libro correspondiente de la siguiente manera:

Formulario con detalles del libro

paso 18: crea una acción para eliminar el libro

Crea la funcionalidad para eliminar un libro de la librería. Cree una nueva acción, action_delete en el controlador del libro de la siguiente manera,

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

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

Aquí, estamos verificando la existencia de un libro en la base de datos utilizando el ID de libro proporcionado. Si se encuentra el libro, se elimina y se redirige a la página de índice. De lo contrario, se mostrará la información de una página no encontrada.

paso 19: Comprobación de la acción de eliminación

Verifique la acción de eliminación haciendo clic en el enlace de eliminación en la página de lista de libros. Eliminará el libro solicitado y luego será redirigido nuevamente a la página de índice.

Finalmente, se crean todas las funcionalidades para agregar, editar, eliminar y listar la información del libro.

FuelPHP es simple, flexible, escalable y fácilmente configurable en comparación con otros marcos PHP basados ​​en MVC. Proporciona todas las características del marco MVC moderno. Se puede usar tal cual o se puede cambiar completamente para adaptarse a nuestras necesidades. Sobre todo, es una excelente opción para el desarrollo web.