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.