Zend Framework è un framework open source per PHP. Zend Framework separa la logica e le azioni usando il pattern MVC (Model View Controller).
Cosa è lo Zend Framework?
- Framework per la costruzione di siti web più veloci e robusti.
- Creato dalla casa madre PHP e da sostenitori Zend.
- Supporta il web 2.0 e la tecnologia cloud computing.
Perché Zend Framework?
- Framework gratuito e open source
- Semplicità estrema
- Alta produttività
- Architettura flessibile
- Supportato da oltre 300 collaboratori, comprendono anche grandi aziende IBM e altri
Dove si può ottenere?
- È possibile scaricarlo all’indirizzo: http://framework.zend.com/
- Ci riceverà anche la loro comunità degli utenti
Quando si ha bisogno di Zend Framework?
- Quando si costruisce il web con una complessità sufficiente
MVC: Model View Controller
È una applicazione costituita da tre componenti:
- Model – Questa è la parte dell’applicazione che definisce le funzionalità di base con un insieme di astrazioni. L’accesso ai dati e le routine relatibe possono essere definite nel Model.
- View – Le view definiscono esattamente quello che viene presentato all’utente. Di solito i controller passano dati a ciascuna view per essere visualizzati in un dato formato, Le view ricevono anche dati dagli utenti. La marcatura HTML viene di solito inserita nelle view.
- Controller – I controller tengono insieme l’intero pattern MVC. Manipolano i model, decidono quale view visualizzare in base alle richieste degli utenti e ad altri fattori, forniscono dati alle view o passano il controllo ad un altro controller. Molti sviluppatori consigliano di mantenere i controller il più semplici possibile.
Il nostro obiettivo è di creare un’applicazione semplice come questa:

Per prima cosa, creare la struttura come questa nella vostra cartella del server web (io l’ho creata sotto www/test/zend. È possibile crearla sotto www/test o semplicemente sotto www).

Quindi, scaricare Zend Framework da qui. Estrarre file compressi. Si ottiene una struttura come questa::

Copiare la libreria (cartella denominata “zend” sotto la cartella library) nella libreria di ciaoMondo/library. Quindi, l’applicazione diventerebbe come questa:
Nell’articolo successivo, spiegherò il significato delle cartelle.
Ci sono 4 cartelle di livello superiore all’interno della cartella dell’applicazione:
- application
- library
- test
- web_root
La cartella application
La cartella dell’applicazione contiene tutto il codice necessario per eseguire l’applicazione. L’utente non può accedere direttamente. Questa è la separazione tra il display, il business e il controllo logico del modelo. In questa applicazione, ci sono modelli, visualizzazioni e cartelle controllori. Queste cartelle contengono il modello, la vista e file di controllo. Altre cartelle possono essere create, per esempio per i files di configurazione.
La cartella library
Tutte le applicazioni utilizza la libreria Zend. Abbiamo posto Zend Framework qui, ma, sostanzialmente, possiamo memorizzare biblioteca ovunque. Ma assicuriamoci che l’applicazione riesca a trovarla. È possibile memorizzarla in una directory globale includono accessibile per l’applicazione php sul server, come /usr/php_include o c:\code\php_include. Assicurarsi di configurare il file di php.ini (o è possibile utilizzare la funzione set_include_path()).
La cartella test
Questa cartella viene utilizzata per memorizzare tutti gli unit test che sono state scritte. Se ancora non conoscete lo unit testing, è possibile leggere qualche informazione da qui. Molti programmatori PHP non danno importanza allo unit test come passo speciale. E voi?
La cartella web_root
Tutte le richieste web fatte dagli utenti vengono convogliati attraverso un unico file, di solito chiamato index.php. Questo file è l’unico file php che deve essere accessibile da web server. Questo file si trova nella web_root. Altri file comuni che è possibile accedere direttamente sono i file per le immagini, i file CSS e i file JavaScript. Ognuno di loro ha una sotto-directory all’interno della directory web_root.
Successivamente, sarà scritto il codice per la semplice applicazione chiamata ciaoMondo.
web_root. Questo file è usato per tutte le richieste nella pagina. Viene utilizzato per la configurazione dell’ambiente (environtment) dell’applicazione, il sistema di controllo di Zend Framework, quindi esegue l’applicazione stessa. Questo è il modello Front Controller.Creare un file denominato “index.php” all’interno di
ciaoMondo/web_root e inserire il seguente codice:
<?php
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', true);
date_default_timezone_set('Europe/Berlin');
$rootDir = dirname(dirname(__FILE__));
set_include_path($rootDir . '/library' . PATH_SEPARATOR . get_include_path());
require_once 'Zend/Controller/Front.php';
Zend_Controller_Front::run('../application/controllers');
?>
Le line3 2-3-4 sono utilizzate per l’environtment installazione.
Linea 3 per garantire che tutti gli errori o avvisi vengano visualizzati.
Linea 4 per il fuso orario di default l’installazione.
include_path() specifica una lista di cartelle in cui le funzioni require(), include() e fopen_with_path() hanno il percorso per cercare i files. È possibile impostarlo nel file php.ini. Ma, se non possiamo farlo, possiamo usare set_include_path(). Si può vedere alla linea 7.Questo è il file di bootstrap. Bootstrap è il termine usato per descrivere l’avvio dell’applicazione. Il nucleo di questo codice si trova alle righe 9-10. Questo istanzierà e spedirà il front controller. E sarà indirizzata la richiesta ai action controllers.
Creare un file chiamato “
.htaccess” all’interno di web_root. Quindi, scrivete al suo interno il codice seguente:
RewriteEngine On
RewriteRule .* index.php
index.php. Codice semplice, non è vero?Un’altra opzione: è possibile configurare la cartella direttamente nel file
httpd.conf di Apache. Si sa’ che non è così facile se non abbiamo proprio server. Così, configurare in una locale configurazione di Apache un file chiamato .htaccess è migliore opzione.{nomeAzione}Action() all’interno della classe {nomeControllore}Controller. Questa classe deve esistere all’interno di un file chiamato {nomeControllore}.php Se non si fornisce, verrà utilizzato index. Ancora confuso? Date un’occhiata a questo esempio:Creare un file denominato “
IndexController.php” all’interno di application/controller. Inserire il seguente codice:
<?php
require_once 'Zend/Controller/Action.php';
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
$this->view->assign('title', 'Ciao, Mondo!');
}
}
?>
IndexController.php all’interno della cartella applicazione/controller. Questo file deve contenere una classe chiamata IndexController e, come minimo, contenere un metodo chiamato indexAction().index.phtml per questo scopo. Questo file dodrà essere memorizzato all’interno della cartella views/scripts/index. Il modello di view, richiede una cartella separata per ogni controller.Creare quindi un file denominato “
index.phtml” all’interno della cartella views/scripts/index. Inserire il seguente codice:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><? echo $this->escape($this->title); ?></title>
</head>
<body>
<h1><? echo $this->escape($this->title); ?></h1>
</body>
</html>
$this è disponibile all’interno del modello del file che diventa il gateway per le funzionalità di Zend_View. Tutte le variabili che sono state valorizzate nella view all’interno del controller sono disponibili direttamente come proprietà di $this. Si può vedere di sopra come viene usata la variabile $this->title.In primo luogo, ricordiamoci semplicemente di passare dal valore del controller per la visualizzazione. Abbiamo scritto un codice come questo:
<?php
require_once 'Zend/Controller/Action.php';
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
$this->view->assign('title', 'Ciao, Mondo!');
}
}
?>
<? echo $this->escape($this->title); ?>
Ok, ora, aggiungiamo uno o più parametri quali:
<?php
require_once 'Zend/Controller/Action.php';
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
$this->view->assign('title', 'Ciao, Mondo!');
$this->view->assign('wellcome','Benvenuti nel mio sito. Questo sito è realizzato con Zend Framework. Buon divertimento!');
$this->view->assign('webmaster','Manager');
}
}
?>
index.phtml” sotto la cartella application/views/scripts/index.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><? echo $this->escape($this->title); ?></title>
</head>
<body>
<h1><? echo $this->escape($this->title); ?></h1>
<?=$this->escape($this->wellcome);?>
<?=$this->escape($this->webmaster);?>
</body>
</html>
http://localhost/test/zend/ciaoMondo/web_root/, o dove l’avete creata l’applicazione web. Si potrebbe recuperare qualcosa come il seguente output:
Zend Framework rompe l’URL in mille pezzi. I pezzi sono disposti come segue:
http://hostname/controller/action/parametri. Guardate i nostri url che abbiamo usato per accedere alla ciao pagina: http://localhost/test/zend/ciaoMondo/web_root/. Assumere che http://hostname sia lo stesso che http://localhost/test/zend/ciaoMondo/web_root/. Percorso successivo è il controller. Provate a puntare il browser a http://localhost/test/zend/ciaoMondo/web_root/index. Otteniamo lo stesso con http://localhost/test/zend/ciaoMondo/web_root/. Perché? di default, http://localhost/test/zend/ciaoMondo/web_root/ accederà al controller index. S’inizia a prendere l’idea?Lo so, non sei paziente e testare subito con un altro controller. Che ne dici di usare altro controller chiamato “user”? Non importa. Dalla teoria di cui sopra, si accederà con
http://localhost/test/zend/ciaoMondo/web_root/user. Facciamolo.In primo luogo, creare il nome del controller “
UserController“. Creare un file denominato “UserController” all’interno application/controller. Inserire il seguente codice:
<?php
require_once 'Zend/Controller/Action.php';
class UserController extends Zend_Controller_Action
{
public function indexAction()
{
$this->view->assign('name', 'Manager');
$this->view->assign('title', 'Ciao');
}
}
?>
user” sotto la cartella ciaoMondo\application\views\scripts. Creare un file denominato “index.phtml” all’interno della cartella user. Inserire il seguente codice:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><? echo $this->escape($this->title); ?></title>
</head>
<body>
<h1><?=$this->escape($this->title);?>, <?=$this->escape($this->name);?></h1>
</body>
</html>
http://localhost/test/zend/ciaoMondo/web_root/user.http://hostname/controller/action/parametri.Per semplicità,
action è il metodo che si trova nella nostra classe sotto la cartella controller. Guardate il nostro codice:
<?php
require_once 'Zend/Controller/Action.php';
class UserController extends Zend_Controller_Action
{
public function indexAction()
{
$this->view->assign('name', 'Manager');
$this->view->assign('title', 'Ciao');
}
}
?>
action come “index“. Denominazione in Zend Framework, per aggiungere l’azione. Così, abbiamo un’azione “indexAction“. Quando si chiama questo controller (come user) e non si specifica azione, sarà chiamato indexAction di default.Ora, aggiungiamo un’altro metodo alla ckasse, ad esempio “
nameAction” come segue:
public function nameAction()
{
$this->view->assign('name', 'Manager');
$this->view->assign('title', 'User Name');
}
UserController completo:
<?php
require_once 'Zend/Controller/Action.php';
class UserController extends Zend_Controller_Action
{
public function indexAction()
{
$this->view->assign('name', 'Manager');
$this->view->assign('title', 'Ciao');
}
public function nameAction()
{
$this->view->assign('name', 'Manager');
$this->view->assign('title', 'Nome Utente');
}
}
?>
name.phtml” all’interno della cartella views/scrips/user . Inserire il seguente codice:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><? echo $this->escape($this->title); ?></title>
</head>
<body>
<h1><?=$this->escape($this->title);?>, <?=$this->escape($this->name);?></h1>
</body>
</html>
http://localhost/test/zend/ciaoMondo/web_root/user/name
http://hostname/user/name/username/Manager/gender/man
- Controller = user
- Action = name
- username = Manager
- gender = man
Qual è la vostra conclusione? Sì, che abbiamo formula generale come questa:
http://hostname/controller/action/var1/value1/var2/value2/...
UserController.php all’interno della cartella application/controller. Aggiornando il file diventa in questo modo:
<?php
require_once 'Zend/Controller/Action.php';
class UserController extends Zend_Controller_Action
{
public function indexAction()
{
$this->view->assign('name', 'Manager');
$this->view->assign('title', 'Ciao');
}
public function nameAction()
{
$request = $this->getRequest();
$this->view->assign('name', $request->getParam('username'));
$this->view->assign('gender', $request->getParam('gender'));
$this->view->assign('title', 'Nome Utente');
}
}
?>
Per ultimo aggiornare la view: “
name.phtml“:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><? echo $this->escape($this->title); ?></title>
</head>
<body>
<h1><?=$this->escape($this->title);?>, <?=$this->escape($this->name);?></h1>
<h2>Gender: <?=$this->escape($this->gender);?></h2>
</body>
</html>
header e il footer. Lo so, questo non ha alcun rapporto con l’Action dello Zend Framework, ma questa conoscenza può diventare utile per voi per costruire un sito web.Creare un file denominato “
header.phtml” sotto la cartella views/scripts/user. Inserire il seguente codice:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><? echo $this->escape($this->title); ?></title>
</head>
<body>
<div id="header">
Mio Zend Framework
</div>
footer.phtml” sotto la cartella views/scripts/user. Inserire il seguente codice:
<div id="footer">
By miosito.net
</div>
</body>
</html>
name.phtml” sotto la cartella views/scripts/user con il seguente codice:
<? include "header.phtml"; ?>
<h1><?=$this->escape($this->title);?>, <?=$this->escape($this->name);?></h1>
<h2>Gender: <?=$this->escape($this->gender);?></h2>
<? include "footer.phtml"; ?>
http://localhost/test/zend/ciaoMondo/web_root/user/name/username/Manager/gender/manSe parliamo di database in Zend Framework, possiamo parlare di ciò che è Zend_Db_Adapter. Questa è classe di base da utilizzare per connettere l’applicazione PHP e il RDBMS. Come sappiamo, c’è una classe diversa di adattatori per ogni tipo di RDBMS. Lo Zend_Db_Adapters è un ponte da parte del fornitore estensioni specifiche di PHP per un interfaccia comune. Con questa classe, è possibile scrivere applicazioni PHP per per molti RDBMS (con il minimo sforzo).
Si può ricordate ci sono dell’estensioni in PHP che hanno come delle funzioni similare a Zend_Db_Adapter, PHP Data Object (PDO). PDO fornire un’interfaccia per database multipli in PHP 5. In PHP 4, c’è una libreria, ADOdb.
Nel seguente esercizio, useremo PDO per mysql (pdo_mysql). Prima fare una prova per verificare se pdo_mysql è disponibile nel vostro sistema. Controllare il file
php.ini. Decommentare extension = php_pdo.dll, extension = php_pdo_mysql.dll e riavviare il server Apache.Ok, basta ricordare gli esercizi di base sui nostri post precedenti nei capitoli Zend Framework Intro e Struttura URL e Action. Quindi, assicuratevi di aver capito tali capitoli.
Per questo esempio, creare un database denominato “
zend“. Quindi creare una tabella denominata “user“. È possibile utilizzare la seguente query:
CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`first_name` varchar(50) NOT NULL,
`last_name` varchar(50) NOT NULL,
`user_name` varchar(50) NOT NULL,
`password` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_name` (`user_name`)
);
registerAction” come azione per questo controller.Aprire “
UserController.php” sotto la cartella application/controllers. Aggiungere il seguente metodo:
public function registerAction()
{
$request = $this->getRequest();
$this->view->assign('action',"process");
$this->view->assign('title','Registrazione Membri');
$this->view->assign('label_fname','Nome');
$this->view->assign('label_lname','Cognome');
$this->view->assign('label_uname','Nome Utente');
$this->view->assign('label_pass','Password');
$this->view->assign('label_submit','Registra');
$this->view->assign('description','Compilare questo modulo completamente:');
}
registerAction“, dobbiamo creare una vista con il nome “register.phtml“. Ok, allora creare un file denominato “register.phtml” sotto la cartella application/views/scripts/user. Inserire il seguente codice:
<? include "header.phtml"; ?>
<h1><?=$this->escape($this->title);?></h1>
<div id="description">
<?=$this->escape($this->description);?>
</div>
<form name="register" method="post" action="<?=$this->escape($this->action)?>">
<table>
<tr>
<td><?=$this->escape($this->label_fname)?></td>
<td><input type="text" name="first_name"></td>
</tr>
<tr>
<td><?=$this->escape($this->label_lname)?></td>
<td><input type="text" name="last_name"></td>
</tr>
<tr>
<td><?=$this->escape($this->label_uname)?></td>
<td><input type="text" name="user_name"></td>
</tr>
<tr>
<td><?=$this->escape($this->label_pass)?></td>
<td><input type="password" name="password"></td>
</tr>
</table>
<input type="submit" name="submit" value="<?=$this->escape($this->label_submit);?>">
</form>
<? include "footer.phtml"; ?>
http://localhost/test/zend/ciaoMondo/web_root/user/register
UserController.php” sotto la cartella application/controllers. Aggiungere un metodo denominato “processAction“, come nel seguente codice:
public function processAction()
{
$params = array('host' =>'localhost',
'username' =>'root',
'password' =>'password',
'dbname' =>'zend'
);
$DB = new Zend_Db_Adapter_Pdo_Mysql($params);
$request = $this->getRequest();
$sql = "INSERT INTO `user`
(`first_name` , `last_name` ,`user_name` ,`password`)
VALUES
('".$request->getParam('first_name')."', '".$request->getParam('last_name')."', '".$request->getParam('user_name')."', MD5('".$request->getParam('password')."'))";
$DB->query($sql);
$this->view->assign('title','Processo di registrazione');
$this->view->assign('description','Registrazione avvenuta');
}
Successivamente, creare la vista per questo processAction. creare un file denominato “process.phtml” sotto la cartella application/views/scripts/user. Inserire il seguente codice:
<? include "header.phtml"; ?>
<h1><?=$this->escape($this->title);?></h1>
<h2><?=$this->escape($this->description);?></h2>
<a href="list">Member List</a>
<? include "footer.phtml"; ?>
http://localhost/test/zend/ciaoMondo/web_root/user/register. Quindi, immettere un informazioni utente, quali:Now, point your browser to http://localhost:8050/test/zend/ciaoMondo/web_root/user/register. Quindi, immettere un informazioni utente, quali:
Fare clic sul pulsante di registrazione. Otterrete questo risultato:

Si può usare la query in questo modo:
$data = array('first_name' => $request->getParam('first_name'),
'last_name' => $request->getParam('last_name'),
'user_name' => $request->getParam('user_name'),
'password' => md5($request->getParam('password'))
);
$DB->insert('user', $data);
$sql = "INSERT INTO `user`
(`first_name` , `last_name` ,`user_name` ,`password`)
VALUES (
'".$request->getParam('first_name')."',
'".$request->getParam('last_name')."',
'".$request->getParam('user_name')."',
MD5('".$request->getParam('password')."'))";
$DB->query($sql);
processAction per farlo diventare come questo:
public function processAction()
{
$params = array('host' =>'localhost',
'username' =>'root',
'password' =>'password',
'dbname' =>'zend'
);
$DB = new Zend_Db_Adapter_Pdo_Mysql($params);
$request = $this->getRequest();
$data = array('first_name' => $request->getParam('first_name'),
'last_name' => $request->getParam('last_name'),
'user_name' => $request->getParam('user_name'),
'password' => md5($request->getParam('password'))
);
$DB->insert('user', $data);
$this->view->assign('title','Processo di registrazione');
$this->view->assign('description','Registrazione avventa');
}
listAction” all’interno del controller. Quindi, creiamo una vista per questa lista.Aprire “
UserController.php” sotto la cartella application/controllers. Aggiungere il seguente metodo:
public function listAction()
{
$params = array('host' =>'localhost',
'username' =>'root',
'password' =>'password',
'dbname' =>'zend'
);
$DB = new Zend_Db_Adapter_Pdo_Mysql($params);
$DB->setFetchMode(Zend_Db::FETCH_OBJ);
$sql = "SELECT * FROM `user` ORDER BY user_name ASC";
$result = $DB->fetchAssoc($sql);
$this->view->assign('title','Lista membri');
$this->view->assign('description','Sotto, nostri membri:');
$this->view->assign('datas',$result);
}
list.phtml” sotto la cartella application/views/scripts/user. Inserire il seguente codice:
<? include "header.phtml"; ?>
<h1><?=$this->escape($this->title);?></h1>
<h2><?=$this->escape($this->description);?></h2>
<a href="register">Registrazione</a>
<table border="1">
<tr>
<th>ID</th>
<th>Nome Utente</th>
<th>Nome</th>
<th>Cognome</th>
<th>Azione</th>
</tr>
<? $datas = $this->datas;
for($i = 1; $i<= count($datas);$i++){ ?>
<tr>
<td><?=$datas[$i]['id']?></td>
<td><?=$datas[$i]['user_name']?></td>
<td><?=$datas[$i]['first_name']?></td>
<td><?=$datas[$i]['last_name']?></td>
<td>
<a href="edit/id/<?=$datas[$i]['id']?>">Edita</a> |
<a href="del/id/<?=$datas[$i]['id']?>">Elimina</a>
</td>
</tr>
<? } ?>
</table>
<? include "footer.phtml"; ?>
http://localhost/test/zend/ciaoMondo/web_root/user/list
editAction“. Questa azione mostrerà i dati individuali filtrati dal parametro GET nel protocollo HTTP.Aprire il file “
UserController.php” sotto la cartella application/controllers. Aggiungere il seguente metodo:
public function editAction()
{
$params = array('host' =>'localhost',
'username' =>'root',
'password' =>'password',
'dbname' =>'zend'
);
$DB = new Zend_Db_Adapter_Pdo_Mysql($params);
$request = $this->getRequest();
$id = $request->getParam("id");
$sql = "SELECT * FROM `user` WHERE id='".$id."'";
$result = $DB->fetchRow($sql);
$this->view->assign('data',$result);
$this->view->assign('action', $request->getBaseURL()."/user/processedit");
$this->view->assign('title','Modifica Membri');
$this->view->assign('label_fname','Nome');
$this->view->assign('label_lname','Cognome');
$this->view->assign('label_uname','Nome Utente');
$this->view->assign('label_pass','Password');
$this->view->assign('label_submit','Edita');
$this->view->assign('description','Compilare questo modulo completamente');
}
edit.phtml” sotto la cartella application/views/scripts/user. Inserire il seguente codice:
<? include "header.phtml"; ?>
<h1><?=$this->escape($this->title);?></h1>
<div id="description">
<?=$this->escape($this->description);?>
</div>
<form name="edit" method="post" action="<?=$this->escape($this->action)?>">
<input type="hidden" name="id" value="<?=$this->data['id']?>">
<table>
<tr>
<td><?=$this->escape($this->label_fname)?></td>
<td><input type="text" name="first_name" value="<?=$this->data['first_name']?>"></td>
</tr>
<tr>
<td><?=$this->escape($this->label_lname)?></td>
<td><input type="text" name="last_name" value="<?=$this->data['last_name']?>"></td>
</tr>
<tr>
<td><?=$this->escape($this->label_uname)?></td>
<td><input type="text" name="user_name" value="<?=$this->data['user_name']?>"></td>
</tr>
</table>
<input type="submit" name="submit" value="<?=$this->escape($this->label_submit);?>">
</form>
<? include "footer.phtml"; ?>
http://localhost/test/zend/ciaoMondo/web_root/user/list Clicca il link edit in una delle righe. La pagina aprirà il modulo per per la sua modifica come segue:
UserController.php” sotto la cartella application/controller. Inserisci la seguente nuova azione:
public function processeditAction()
{
$params = array('host' =>'localhost',
'username' =>'root',
'password' =>'password',
'dbname' =>'zend'
);
$DB = new Zend_Db_Adapter_Pdo_Mysql($params);
$request = $this->getRequest();
$sql = "UPDATE `user` SET `first_name` = '".$request->getParam('first_name')."',
`last_name` = '".$request->getParam('last_name')."',
`user_name` = '".$request->getParam('user_name')."'
WHERE id = '".$request->getParam('id')."'";
$DB->query($sql);
$this->view->assign('title','Processo di modifica');
$this->view->assign('description','Modifica eseguita');
}
processedit.phtml” sotto la cartella views/scripts/user. Inserire poi il seguente codice:
<? include "header.phtml"; ?>
<h1><?=$this->escape($this->title);?></h1>
<h2><?=$this->escape($this->description);?></h2>
<a href="list">Lista membri</a>
<? include "footer.phtml"; ?>
Così come le query di inserimento, Zend Framework ha un’altra possibilità per creare delle query di aggiornamento. È più semplice e ordinato. Si può usare in questo modo:
$data = array(
'first_name' => $request->getParam('first_name'),
'last_name' => $request->getParam('last_name'),
'user_name' => $request->getParam('user_name'),
'password' => md5($request->getParam('password'))
);
$DB->update('user', $data,'id = 1');
processeditAction:
public function processeditAction()
{
$params = array('host' =>'localhost',
'username' =>'root',
'password' =>'password',
'dbname' =>'zend'
);
$DB = new Zend_Db_Adapter_Pdo_Mysql($params);
$request = $this->getRequest();
$data = array(
'first_name' => $request->getParam('first_name'),
'last_name' => $request->getParam('last_name'),
'user_name' => $request->getParam('user_name'),
'password' => md5($request->getParam('password'))
);
$DB->update('user', $data,'id = '.$request->getParam('id'));
$this->view->assign('title','Processo di modifica');
$this->view->assign('description','Modifica eseguita');
}
controller.Apriree il file “
UserController.php” sotto la cartella application/controllers. Aggiungere un nuovo metodo per l’azione di eliminazione alla classe (io darei il nome “delAction“):
public function delAction()
{
$params = array('host' =>'localhost',
'username' =>'root',
'password' =>'password',
'dbname' =>'zend'
);
$DB = new Zend_Db_Adapter_Pdo_Mysql($params);
$request = $this->getRequest();
$sql = "DELETE FROM `user` WHERE id='".$request->getParam('id')."'";
$DB->query($sql);
$this->view->assign('title','Eliminazione Dati');
$this->view->assign('description','Eliminazione avvenuta');
$this->view->assign('list',$request->getBaseURL()."/user/list");
del.phtml” sotto la cartella application/views/scripts/user. Inserire poi il seguente codice:
<? include "header.phtml"; ?>
<h1><?=$this->escape($this->title);?></h1>
<h2><?=$this->escape($this->description);?></h2>
<a href="<?=$this->escape($this->list);?>">Member List</a>
<? include "footer.phtml"; ?>
>
$DB->delete('user', 'id = 3');
delAction per farlo diventare come questo:
public function delAction()
{
$params = array('host' =>'localhost',
'username' =>'root',
'password' =>'password',
'dbname' =>'zend'
);
$DB = new Zend_Db_Adapter_Pdo_Mysql($params);
$request = $this->getRequest();
$DB->delete('user', 'id = '.$request->getParam('id'));
$this->view->assign('title','Eliminazione Dati');
$this->view->assign('description','Eliminazione avvenuta');
$this->view->assign('list',$request->getBaseURL()."/user/list");
}
<?php
require_once 'Zend/Db/Adapter/Pdo/Mysql.php';
require_once 'Zend/Controller/Action.php';
class UserController extends Zend_Controller_Action
{
public function indexAction()
{
$this->view->assign('name', 'Manager');
$this->view->assign('title', 'Ciao');
}
public function nameAction()
{
$request = $this->getRequest();
$this->view->assign('name', $request->getParam('username'));
$this->view->assign('gender', $request->getParam('gender'));
$this->view->assign('title', 'Nome Utente');
}
public function registerAction()
{
$request = $this->getRequest();
$this->view->assign('action',"process");
$this->view->assign('title','Registrazione Membri');
$this->view->assign('label_fname','Nome');
$this->view->assign('label_lname','Cognome');
$this->view->assign('label_uname','Nome Utente');
$this->view->assign('label_pass','Password');
$this->view->assign('label_submit','Registra');
$this->view->assign('description','Compilare questo modulo completamente:');
}
public function editAction()
{
$params = array('host' =>'localhost',
'username' =>'root',
'password' =>'password',
'dbname' =>'zend'
);
$DB = new Zend_Db_Adapter_Pdo_Mysql($params);
$request = $this->getRequest();
$id = $request->getParam("id");
$sql = "SELECT * FROM `user` WHERE id='".$id."'";
$result = $DB->fetchRow($sql);
$this->view->assign('data',$result);
$this->view->assign('action', $request->getBaseURL()."/user/processedit");
$this->view->assign('title','Modifica Membri');
$this->view->assign('label_fname','Nome');
$this->view->assign('label_lname','Cognome');
$this->view->assign('label_uname','Nome Utente');
$this->view->assign('label_pass','Password');
$this->view->assign('label_submit','Edita');
$this->view->assign('description','Compilare questo modulo completamente:');
}
public function processAction()
{
$params = array('host' =>'localhost',
'username' =>'root',
'password' =>'password',
'dbname' =>'zend'
);
$DB = new Zend_Db_Adapter_Pdo_Mysql($params);
$request = $this->getRequest();
$data = array('first_name' => $request->getParam('first_name'),
'last_name' => $request->getParam('last_name'),
'user_name' => $request->getParam('user_name'),
'password' => md5($request->getParam('password'))
);
$DB->insert('user', $data);
$this->view->assign('title','Processo di registrazione');
$this->view->assign('description','Registrazione avventa');
}
public function listAction()
{
$params = array('host' =>'localhost',
'username' =>'root',
'password' =>'password',
'dbname' =>'zend'
);
$DB = new Zend_Db_Adapter_Pdo_Mysql($params);
$DB->setFetchMode(Zend_Db::FETCH_OBJ);
$sql = "SELECT * FROM `user` ORDER BY user_name ASC";
$result = $DB->fetchAssoc($sql);
$this->view->assign('title','Lista membri');
$this->view->assign('description','Sotto, nostri membri:');
$this->view->assign('datas',$result);
}
public function processeditAction()
{
$params = array('host' =>'localhost',
'username' =>'root',
'password' =>'password',
'dbname' =>'zend'
);
$DB = new Zend_Db_Adapter_Pdo_Mysql($params);
$request = $this->getRequest();
$data = array('first_name' => $request->getParam('first_name'),
'last_name' => $request->getParam('last_name'),
'user_name' => $request->getParam('user_name'),
'password' => md5($request->getParam('password'))
);
$DB->update('user', $data,'id = '.$request->getParam('id'));
$this->view->assign('title','Processo di modifica');
$this->view->assign('description','Modifica eseguita');
}
public function delAction()
{
$params = array('host' =>'localhost',
'username' =>'root',
'password' =>'password',
'dbname' =>'zend'
);
$DB = new Zend_Db_Adapter_Pdo_Mysql($params);
$request = $this->getRequest();
$DB->delete('user', 'id = '.$request->getParam('id'));
$this->view->assign('title','Eliminazione Dati');
$this->view->assign('description','Eliminazione avvenuta');
$this->view->assign('list',$request->getBaseURL()."/user/list");
}
}
?>
Per utilizzare il Registro, dobbiamo inserire il file
registry.php di Zend Framework nell’applicazione:
require_once 'Zend/Registry.php';
- Aprire quindi il file “
index.php” sotto “web_root“. Inserire le linee 09 – 12:
Abbiamo impostato nel registro un parametro denominato “Copia codice<?php error_reporting(E_ALL|E_STRICT); ini_set('display_errors', true); date_default_timezone_set('Europe/Berlin'); $rootDir = dirname(dirname(__FILE__)); set_include_path($rootDir . '/library' . PATH_SEPARATOR . get_include_path()); require_once 'Zend/Controller/Front.php'; require_once 'Zend/Registry.php'; Zend_Registry::set('title',"Mia prima applicazione"); Zend_Controller_Front::run('../application/controllers'); ?>title” e abbiamo messo un valore a questo parametro. - Quindi, proviamo a chiamare/leggere questo registro. Apri il tuo
UserController.phpsotto la cartellaapplication/controller. - Aggiornare il metodo
indexActioncome segue:
Copia codicepublic function indexAction() { $title = Zend_Registry::get('title'); $this->view->assign('name', 'Manager'); $this->view->assign('title', $title); }
Testare le modifiche puntando il browser a: http://localhost/test/zend/ciaoMondo/web_root/user/.
Quindi, Apriamo di nuovo il file
index.php sotto la cartella web_root.
<?php
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', true);
date_default_timezone_set('Europe/Berlin');
$rootDir = dirname(dirname(__FILE__));
set_include_path($rootDir . '/library' . PATH_SEPARATOR . get_include_path());
require_once 'Zend/Controller/Front.php';
require_once 'Zend/Registry.php';
Zend_Registry::set('title',"Mia prima applicazione");
$arrName = array('Mario Balducci', 'Federico Rossi',
'Sergio Parilli', 'Francesco Belli');
Zend_Registry::set('credits',$arrName);
Zend_Controller_Front::run('../application/controllers');
?>
credits” sulle righe riga 15-17. Come leggerlo?Ok, proviamo nuovamente ad aggiornare “
UserController.php“. Aggiornando indexAction diventa:
public function indexAction()
{
$registry = Zend_Registry::getInstance();
$title = $registry['title'];
$credits = $registry['credits'];
$strCredit = implode(", ",$credits);
$this->view->assign('name', 'Manager');
$this->view->assign('title', $title);
$this->view->assign('credits', $strCredit);
}
Ok, prima di provarlo aggiornare la vista in
index.phtml sotto la cartella application/views/scripts/user. Aggiorna con il seguente codice:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><? echo $this->escape($this->title); ?></title>
</head>
<body>
<h1><?=$this->escape($this->title);?>, <?=$this->escape($this->name);?></h1>
credits: <?=$this->escape($this->credits);?>
</body>
</html>
http://localhost/test/zend/ciaoMondo/web_root/user/.Per registrare la connessione al database, si può usare questo modo:
$params = array('host'=>'localhost',
'username'=>'root',
'password' =>'password',
'dbname'=>'zend'
);
$DB = new Zend_Db_Adapter_Pdo_Mysql($params);
$DB->setFetchMode(Zend_Db::FETCH_OBJ);
Zend_Registry::set('DB',$DB);
$registry = Zend_Registry::getInstance();
$DB = $registry['DB'];
index.php sotto la cartella web_root. Il suo aggiornamento diventerebbe come segue:
<?php
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', true);
date_default_timezone_set('Europe/Berlin');
$rootDir = dirname(dirname(__FILE__));
set_include_path($rootDir . '/library' . PATH_SEPARATOR . get_include_path());
require_once 'Zend/Controller/Front.php';
require_once 'Zend/Registry.php';
require_once 'Zend/Db/Adapter/Pdo/Mysql.php';
Zend_Registry::set('title',"Mia prima applicazione");
$arrName = array('Mario Balducci', 'Federico Rossi',
'Sergio Parilli', 'Francesco Belli');
Zend_Registry::set('credits',$arrName);
$params = array('host'=>'localhost',
'username'=>'root',
'password'=>'password',
'dbname'=>'zend'
);
$DB = new Zend_Db_Adapter_Pdo_Mysql($params);
$DB->setFetchMode(Zend_Db::FETCH_OBJ);
Zend_Registry::set('DB',$DB);
Zend_Controller_Front::run('../application/controllers');
?>
UserController.php” sotto la cartella application/controllers per farlo diventare come questo:
<?php
require_once 'Zend/Controller/Action.php';
class UserController extends Zend_Controller_Action
{
public function indexAction()
{
$registry = Zend_Registry::getInstance();
$title = $registry['title'];
$credits = $registry['credits'];
$strCredit = implode(", ",$credits);
$this->view->assign('name', 'Manager');
$this->view->assign('title', $title);
$this->view->assign('credits', $strCredit);
}
public function nameAction()
{
$request = $this->getRequest();
$this->view->assign('name', $request->getParam('username'));
$this->view->assign('gender', $request->getParam('gender'));
$this->view->assign('title', 'Nome Utente');
}
public function registerAction()
{
$request = $this->getRequest();
$this->view->assign('action',"process");
$this->view->assign('title','Registrazione Membri');
$this->view->assign('label_fname','Nome');
$this->view->assign('label_lname','Cognome');
$this->view->assign('label_uname','Nome Utente');
$this->view->assign('label_pass','Password');
$this->view->assign('label_submit','Registra');
$this->view->assign('description','Compilare questo modulo completamente:');
}
public function editAction()
{
$registry = Zend_Registry::getInstance();
$DB = $registry['DB'];
$request = $this->getRequest();
$id = $request->getParam("id");
$sql = "SELECT * FROM `user` WHERE id='".$id."'";
$result = $DB->fetchRow($sql);
$this->view->assign('data',$result);
$this->view->assign('action', $request->getBaseURL()."/user/processedit");
$this->view->assign('title','Modifica Membri');
$this->view->assign('label_fname','Nome');
$this->view->assign('label_lname','Cognome');
$this->view->assign('label_uname','Nome Utente');
$this->view->assign('label_pass','Password');
$this->view->assign('label_submit','Edita');
$this->view->assign('description','Compilare questo modulo completamente:');
}
public function processAction()
{
$registry = Zend_Registry::getInstance();
$DB = $registry['DB'];
$request = $this->getRequest();
$data = array('first_name' => $request->getParam('first_name'),
'last_name' => $request->getParam('last_name'),
'user_name' => $request->getParam('user_name'),
'password' => md5($request->getParam('password'))
);
$DB->insert('user', $data);
$this->view->assign('title','Processo di registrazione');
$this->view->assign('description','Registrazione avventa');
}
public function listAction()
{
$registry = Zend_Registry::getInstance();
$DB = $registry['DB'];
$sql = "SELECT * FROM `user` ORDER BY user_name ASC";
$result = $DB->fetchAssoc($sql);
$this->view->assign('title','Lista membri');
$this->view->assign('description','Sotto, nostri membri:');
$this->view->assign('datas',$result);
}
public function processeditAction()
{
$registry = Zend_Registry::getInstance();
$DB = $registry['DB'];
$request = $this->getRequest();
$data = array('first_name' => $request->getParam('first_name'),
'last_name' => $request->getParam('last_name'),
'user_name' => $request->getParam('user_name'),
'password' => md5($request->getParam('password'))
);
$DB->update('user', $data,'id = '.$request->getParam('id'));
$this->view->assign('title','Processo di modifica');
$this->view->assign('description','Modifica eseguita');
}
public function delAction()
{
$registry = Zend_Registry::getInstance();
$DB = $registry['DB'];
$request = $this->getRequest();
$DB->delete('user', 'id = '.$request->getParam('id'));
$this->view->assign('title','Eliminazione Dati');
$this->view->assign('description','Eliminazione avvenuta');
$this->view->assign('list',$request->getBaseURL()."/user/list");
}
}
?>
Zend_Config, ch’è stato progettato per semplificare l’accesso e l’utilizzo dei dati di configurazione all’interno delle applicazioni.In questo post, vediamo come implementare
Zend_Config usando un array. Per caso, vedetee il nostro codice nel tutorial precedente:
<?php
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', true);
date_default_timezone_set('Europe/Berlin');
$rootDir = dirname(dirname(__FILE__));
set_include_path($rootDir . '/library' . PATH_SEPARATOR . get_include_path());
require_once 'Zend/Controller/Front.php';
require_once 'Zend/Registry.php';
require_once 'Zend/Db/Adapter/Pdo/Mysql.php';
Zend_Registry::set('title',"Mia prima applicazione");
$arrName = array('Mario Balducci', 'Federico Rossi',
'Sergio Parilli', 'Francesco Belli');
Zend_Registry::set('credits',$arrName);
$params = array('host'=>'localhost',
'username' =>'root',
'password' =>'password',
'dbname' =>'zend'
);
$DB = new Zend_Db_Adapter_Pdo_Mysql($params);
$DB->setFetchMode(Zend_Db::FETCH_OBJ);
Zend_Registry::set('DB',$DB);
Zend_Controller_Front::run('../application/controllers');
?>
index.php posizionato sotto la cartella web_root. Le linee 15 e 20-25 sono utilizzati spesso lungo l’applicazione. Possiamo mettere la configurazione in un array in questo modo:
<?php
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', true);
date_default_timezone_set('Europe/Berlin');
$rootDir = dirname(dirname(__FILE__));
set_include_path($rootDir . '/library' . PATH_SEPARATOR . get_include_path());
require_once 'Zend/Controller/Front.php';
require_once 'Zend/Registry.php';
require_once 'Zend/Db/Adapter/Pdo/Mysql.php';
require_once 'Zend/Config.php';
$arrConfig = array(
'webhost'=>'localhost',
'appName'=>'Mia prima applicazione',
'database'=>array(
'dbhost'=>'localhost',
'dbname'=>'zend',
'dbuser'=>'root',
'dbpass'=>'password'
)
);
$config = new Zend_Config($arrConfig);
$title = $config->appName;
$params = array('host' =>$config->database->dbhost,
'username' =>$config->database->dbuser,
'password' =>$config->database->dbpass,
'dbname' =>$config->database->dbname
);
Zend_Registry::set('title',$title);
$arrName = array('Mario Balducci', 'Federico Rossi',
'Sergio Parilli', 'Francesco Belli');
Zend_Registry::set('credits',$arrName);
$DB = new Zend_Db_Adapter_Pdo_Mysql($params);
$DB->setFetchMode(Zend_Db::FETCH_OBJ);
Zend_Registry::set('DB',$DB);
Zend_Controller_Front::run('../application/controllers');
?>
Zend/Config.php (vedi linea 12). Quindi creare un array per contenere la configurazione (vedi linea 14-23). Successivamente, creare l’object-oriented wrapper sui dati di configurazione (vedi linea 28). Per ultimo, usiamo i dati di configurazione per l’accesso al database (vedi linea 28-32).config.php. Facciamolo.Creare un file chiamato “
config.php” all’interno dell’applicazione. Inserisci il seguente codice:
<?
return array(
'webhost'=>'localhost',
'appName'=>'Mia prima applicazione',
'database'=>array(
'host'=>'localhost',
'dbname'=>'zend',
'username'=>'root',
'password'=>'password'
)
);
?>
$config = new Zend_Config(require '../application/config.php');
<?php
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', true);
date_default_timezone_set('Europe/Berlin');
$rootDir = dirname(dirname(__FILE__));
set_include_path($rootDir . '/library' . PATH_SEPARATOR . get_include_path());
require_once 'Zend/Controller/Front.php';
require_once 'Zend/Registry.php';
require_once 'Zend/Db/Adapter/Pdo/Mysql.php';
require_once 'Zend/Config.php';
$config = new Zend_Config(require '../application/config.php');
$title = $config->appName;
$params = $config->database->toArray();
Zend_Registry::set('title',$title);
$arrName = array('Mario Balducci', 'Federico Rossi',
'Sergio Parilli', 'Francesco Belli');
Zend_Registry::set('credits',$arrName);
$DB = new Zend_Db_Adapter_Pdo_Mysql($params);
$DB->setFetchMode(Zend_Db::FETCH_OBJ);
Zend_Registry::set('DB',$DB);
Zend_Controller_Front::run('../application/controllers');
?>
Zend_Config al post precedente. Ora, cerchiamo di realizzarlo tramite un file ini.Creare un file chiamato “
config.ini” all’interno dell’applicazione. Inserisci il seguente esempio di configurazione:
; Sito in produzione. Dati di configurazione
[app]
webhost = www.esempio.com
title = Mia prima applicazione
database.host = localhost
database.username = root
database.password = password
database.dbname = zend
<?php
require_once 'Zend/Config/Ini.php';
$config = new Zend_Config_Ini('../application/config.ini','app');
$title = $config->appName;
$params = $config->database->toArray();
<?php
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', true);
date_default_timezone_set('Europe/Berlin');
$rootDir = dirname(dirname(__FILE__));
set_include_path($rootDir . '/library' . PATH_SEPARATOR . get_include_path());
require_once 'Zend/Controller/Front.php';
require_once 'Zend/Registry.php';
require_once 'Zend/Db/Adapter/Pdo/Mysql.php';
require_once 'Zend/Config/Ini.php';
$config = new Zend_Config_Ini('../application/config.ini','app');
$title = $config->appName;
$params = $config->database->toArray();
Zend_Registry::set('title',$title);
$arrName = array('Mario Balducci', 'Federico Rossi',
'Sergio Parilli', 'Francesco Belli');
Zend_Registry::set('credits',$arrName);
$DB = new Zend_Db_Adapter_Pdo_Mysql($params);
$DB->setFetchMode(Zend_Db::FETCH_OBJ);
Zend_Registry::set('DB',$DB);
Zend_Controller_Front::run('../application/controllers');
?>
Zend_Config_Xml().In primo luogo, creare un file XML denominato “
config.xml” all’interno dell’applicazione. Inserire il seguente codice:
<?xml version="1.0"?>
<configdata>
<app>
<webhost>www.esempio.com</webhost>
<title>Mia prima applicazione</title>
<database>
<host>localhost</host>
<username>root</username>
<password>password</password>
<dbname>zend</dbname>
</database>
</app>
</configdata>
require_once 'Zend/Config/Xml.php';
$config = new Zend_Config_Xml('../application/config.xml','app');
Useremo ancora lo stesso database dell’esercizio precedente. Il nome del database è “
zend“. Ora, creare la tabella per memorizzare le informazioni membri. Il nome della tabella è “users“. È possibile utilizzare la seguente query:
CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(50) NOT NULL,
`password` varchar(255) NOT NULL,
`real_name` varchar(50) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
);
INSERT INTO `users`
(`id`, `username`, `password`, `real_name`)
VALUES
(1, 'admin', '21232f297a57a5a743894a0e4a801fc3', 'Administrator');
MD5(), per questo motivo, la password che viene memorizzata nel database diventa 21232f297a57a5a743894a0e4a801fc3.
INSERT INTO `users` (`id` ,`username` ,`password` ,`real_name`)
VALUES (NULL , 'admin', MD5( 'admin' ) , 'Administrator');

In primo luogo, creare un file denominato “
loginform.phtml” sotto la cartella application/views/scripts/user. Inserire il seguente codice:
<? include "header.phtml"; ?>
<h1><?=$this->escape($this->title);?></h1>
<form method='post' action='<?=$this->escape($this->action);?>'>
<table>
<tr>
<td><?=$this->escape($this->username);?></td>
<td><input type='text' name='username'></td>
</tr>
<tr>
<td><?=$this->escape($this->password);?></td>
<td><input type='password' name='password'></td>
</tr>
</table>
<input type='submit' name='login' value='Login'>
</form>
<? include "footer.phtml"; ?>
loginformAction al controller. Aprire il file UserController.php sotto la cartella application/controllers. Aggiungi il metodo loginFormAction():
public function loginformAction()
{
$request = $this->getRequest();
$this->view->assign('action', $request->getBaseURL()."/user/auth");
$this->view->assign('title', 'Login Form');
$this->view->assign('username', 'Nome Utente');
$this->view->assign('password', 'Password');
}
user/auth.Ora, puntare il browser su
http://localhost/test/zend/ciaoMondo/web_root/user/loginform. Si ottiene qualcosa come questo:
Basta ricordare, che form di login invia due parametri: username e password. Essi vengono inviati alla pagina
user/auth. Quindi, dobbiamo costruire il metodo authAction() in UserController.authAction() serve per la convalida dei dati. I dati inviati dal modulo di login saranno verificate a authAction(). Aprite il file “UserController.php“. Prima, caricare Zend/Auth.php e Zend/Auth/Adapter/DbTable.php. Quindi includere all’inizio prima di ogni metodo():
<?php
require_once 'Zend/Auth.php';
require_once 'Zend/Auth/Adapter/DbTable.php';
...
?>
authAction() come segue:
<?php
public function authAction(){
$request = $this->getRequest();
$registry = Zend_Registry::getInstance();
$auth = Zend_Auth::getInstance();
$DB = $registry['DB'];
$authAdapter = new Zend_Auth_Adapter_DbTable($DB);
$authAdapter->setTableName('users')
->setIdentityColumn('username')
->setCredentialColumn('password');
// Impostare i valori di input delle credenziali
$uname = $request->getParam('username');
$paswd = $request->getParam('password');
$authAdapter->setIdentity($uname);
$authAdapter->setCredential(md5($paswd));
// Eseguire la query di autenticazione
// salvando il risultato
$result = $auth->authenticate($authAdapter);
if($result->isValid()){
$data = $authAdapter->getResultRowObject(null,'password');
$auth->getStorage()->write($data);
$this->_redirect('/user/userpage');
}else{
$this->_redirect('/user/loginform');
}
}
Poi, defininiamo l’adattatore per l’autenticazione:
$authAdapter = new Zend_Auth_Adapter_DbTable($DB);
$authAdapter->setTableName('users')
->setIdentityColumn('username')
->setCredentialColumn('password');
$uname = $request->getParam('username');
$paswd = $request->getParam('password');
$authAdapter->setIdentity($uname);
$authAdapter->setCredential(md5($paswd));
$result = $auth->authenticate($authAdapter);
if($result->isValid()){
$data = $authAdapter->getResultRowObject(null,'password');
$auth->getStorage()->write($data);
$this->_redirect('/user/userpage');
}else{
$this->_redirect('/user/loginform');
}
}
$data = $authAdapter->getResultRowObject(null,'password');
$auth->getStorage()->write($data);
Ok, questo è il nostro metodo
UserController completo:
<?php
require_once 'Zend/Controller/Action.php';
require_once 'Zend/Auth.php';
require_once 'Zend/Auth/Adapter/DbTable.php';
class UserController extends Zend_Controller_Action
{
public function loginFormAction()
{
$request = $this->getRequest();
$this->view->assign('action', $request->getBaseURL()."/user/auth");
$this->view->assign('title', 'Login Form');
$this->view->assign('username', 'Nome Utente');
$this->view->assign('password', 'Password');
}
public function authAction(){
$request = $this->getRequest();
$registry = Zend_Registry::getInstance();
$auth = Zend_Auth::getInstance();
$DB = $registry['DB'];
$authAdapter = new Zend_Auth_Adapter_DbTable($DB);
$authAdapter->setTableName('users')
->setIdentityColumn('username')
->setCredentialColumn('password');
// Impostare i valori di input delle credenziali
$uname = $request->getParam('username');
$paswd = $request->getParam('password');
$authAdapter->setIdentity($uname);
$authAdapter->setCredential(md5($paswd));
// Eseguire la query di autenticazione
// salvando il risultato
$result = $auth->authenticate($authAdapter);
if($result->isValid()){
//print_r($result);
$data = $authAdapter->getResultRowObject(null,'password');
$auth->getStorage()->write($data);
$this->_redirect('/user');
}else{
$this->_redirect('/user/loginform');
}
}
public function nameAction()
{
$request = $this->getRequest();
$this->view->assign('name', $request->getParam('username'));
$this->view->assign('gender', $request->getParam('gender'));
$this->view->assign('title', 'Nome Utente');
}
public function registerAction()
{
$request = $this->getRequest();
$this->view->assign('action',"process");
$this->view->assign('title','Registrazione Membri');
$this->view->assign('label_fname','Nome');
$this->view->assign('label_lname','Cognome');
$this->view->assign('label_uname','Nome Utente');
$this->view->assign('label_pass','Password');
$this->view->assign('label_submit','Registra');
$this->view->assign('description','Compilare questo modulo completamente:');
}
public function editAction()
{
$registry = Zend_Registry::getInstance();
$DB = $registry['DB'];
$request = $this->getRequest();
$id = $request->getParam("id");
$sql = "SELECT * FROM `user` WHERE id='".$id."'";
$result = $DB->fetchRow($sql);
$this->view->assign('data',$result);
$this->view->assign('action', $request->getBaseURL()."/user/processedit");
$this->view->assign('title','Modifica Membri');
$this->view->assign('label_fname','Nome');
$this->view->assign('label_lname','Cognome');
$this->view->assign('label_uname','Nome Utente');
$this->view->assign('label_pass','Password');
$this->view->assign('label_submit','Edita');
$this->view->assign('description','Compilare questo modulo completamente:');
}
public function processAction()
{
$registry = Zend_Registry::getInstance();
$DB = $registry['DB'];
$request = $this->getRequest();
$data = array('first_name' => $request->getParam('first_name'),
'last_name' => $request->getParam('last_name'),
'user_name' => $request->getParam('user_name'),
'password' => md5($request->getParam('password'))
);
$DB->insert('user', $data);
$this->view->assign('title','Processo di registrazione');
$this->view->assign('description','Registrazione avventa');
}
public function listAction()
{
$registry = Zend_Registry::getInstance();
$DB = $registry['DB'];
$sql = "SELECT * FROM `user` ORDER BY user_name ASC";
$result = $DB->fetchAssoc($sql);
$this->view->assign('title','Lista membri');
$this->view->assign('description','Sotto, nostri membri:');
$this->view->assign('datas',$result);
}
public function processeditAction()
{
$registry = Zend_Registry::getInstance();
$DB = $registry['DB'];
$request = $this->getRequest();
$data = array('first_name' => $request->getParam('first_name'),
'last_name' => $request->getParam('last_name'),
'user_name' => $request->getParam('user_name'),
'password' => md5($request->getParam('password'))
);
$DB->update('user', $data,'id = '.$request->getParam('id'));
$this->view->assign('title','Processo di modifica');
$this->view->assign('description','Modifica eseguita');
}
public function delAction()
{
$registry = Zend_Registry::getInstance();
$DB = $registry['DB'];
$request = $this->getRequest();
$DB->delete('user', 'id = '.$request->getParam('id'));
$this->view->assign('title','Eliminazione Dati');
$this->view->assign('description','Eliminazione avvenuta');
$this->view->assign('list',$request->getBaseURL()."/user/list");
}
}
?>
C:\AppServ5\www\test\zend\ciaoMondo\library\Zend\Auth\Adapter\DbTable.php on line 340 Se avete lo stesso messaggio di errore, cerchiamo di risolvere questo problema. Saltare questo capitolo se non avete lo stesso errore.Purtroppo, ancora non ho avuto molto tempo per sapere come risolvere questo errore quando stavo scrivendo questo post. Così, ho deciso di fissarlo al cuore della libreria Zend. Vi dirò dopo se trovo la correzione per questo errore.
Ok, Aprire il file
DbTable.php sotto la cartella library\Zend\Auth\Adapter\. Aggiornare la linea 340:Prima:
if ($resultIdentity['zend_auth_credential_match'] != '1') {
if ($resultIdentity->zend_auth_credential_match != '1') {
unset($resultIdentity['zend_auth_credential_match']);
unset($resultIdentity->zend_auth_credential_match);
Nota
Andando a cercare una soluzione semplice senza modificare lo Zend Framework ho trovato una funzione ricorsiva che garantisce il recupero dei dati come ci si aspetta
<?php
function objectToArray($d) {
if (is_object($d)) {
// Ottiene le proprietà dell'oggetto
// data con funzione get_object_vars()
$d = get_object_vars($d);
}
if (is_array($d)) {
/*
* Restituisce un'array convertito
* in oggetto usando
* __FUNCTION__ (costante magica)
* con la chiamata ricorsiva
*/
return array_map(__FUNCTION__, $d);
}
else {
// ritorna l'array
return $d;
}
}
?>
UserController.php” sotto la cartella application/controllers e utizzarlo come segue:
<?php
$data = $this->objectToArray($this->data);
?>
In primo luogo, creiamo la view. Creare un file denominato “
userpage.phtml” sotto la cartella application/views/scripts/user. Inserire il seguente codice:
<? include "header.phtml"; ?>
<h1>Ciao, <?=$this->escape($this->username);?></h1>
<a href='<?=$this->escape($this->urllogout);?>'>Logout</a>
<? include "footer.phtml"; ?>
Aprire il file “
UserController.php“. Aggiungere il seguente metodo:
public function userpageAction(){
$auth = Zend_Auth::getInstance();
if(!$auth->hasIdentity()){
$this->_redirect('/user/loginform');
}
$request = $this->getRequest();
$user = $auth->getIdentity();
$real_name = $user->real_name;
$username = $user->username;
$logoutUrl = $request->getBaseURL().'/user/logout';
$this->view->assign('username', $real_name);
$this->view->assign('urllogout',$logoutUrl);
}
Prova a effettuare il login. Puntare il browser su
http://localhost/test/zend/ciaoMondo/web_root/user/loginform. Effettuare il login.Innanzitutto, creare la view per il logout. Creare un file denominato “
logout.phtml” sotto la cartella application/views/scripts/user. Lascia in bianco (perché non vogliamo dimostrare nulla).Poi, creiamo un metodo per il controller denominato
LogoutAction(). Apri il file “UserController.php” sotto la cartella application/controllers. Aggiungere il seguente metodo:
public function logoutAction()
{
$auth = Zend_Auth::getInstance();
$auth->clearIdentity();
$this->_redirect('/user');
}
clearIdentity(). Poi farà redirect ad un’altra pagina (in questo esempio per l’utente).user/index). Quando i visitatori accederanno a questa pagina, saranno reindirizzati al form di login.Aprire il file “
UserController.php” sotto la cartella application/controllers. Aggiornare indexAction():
public function indexAction()
{
$request = $this->getRequest();
$auth = Zend_Auth::getInstance();
if(!$auth->hasIdentity()){
$this->_redirect('/user/loginform');
}else{
$this->_redirect('/user/userpage');
}
}
<?php
require_once 'Zend/Controller/Action.php';
require_once 'Zend/Auth.php';
require_once 'Zend/Auth/Adapter/DbTable.php';
class UserController extends Zend_Controller_Action
{
public function indexAction()
{
$request = $this->getRequest();
$auth = Zend_Auth::getInstance();
if(!$auth->hasIdentity()){
$this->_redirect('/user/loginform');
}else{
$this->_redirect('/user/userpage');
}
}
public function userpageAction(){
$auth = Zend_Auth::getInstance();
if(!$auth->hasIdentity()){
$this->_redirect('/user/loginform');
}
$request = $this->getRequest();
$user = $auth->getIdentity();
$real_name = $user->real_name;
$username = $user->username;
$logoutUrl = $request->getBaseURL().'/user/logout';
$this->view->assign('real_name', $real_name);
$this->view->assign('urllogout',$logoutUrl);
}
public function loginformAction()
{
$request = $this->getRequest();
$this->view->assign('action', $request->getBaseURL()."/user/auth");
$this->view->assign('title', 'Login Form');
$this->view->assign('username', 'Nome Utente');
$this->view->assign('password', 'Password');
}
public function authAction(){
$request = $this->getRequest();
$registry = Zend_Registry::getInstance();
$auth = Zend_Auth::getInstance();
$DB = $registry['DB'];
$authAdapter = new Zend_Auth_Adapter_DbTable($DB);
$authAdapter->setTableName('users')
->setIdentityColumn('username')
->setCredentialColumn('password');
// Impostare i valori di input delle credenziali
$uname = $request->getParam('username');
$paswd = $request->getParam('password');
$authAdapter->setIdentity($uname);
$authAdapter->setCredential(md5($paswd));
// Eseguire la query di autenticazione
// salvando il risultato
$result = $auth->authenticate($authAdapter);
if($result->isValid()){
//print_r($result);
$data = $authAdapter->getResultRowObject(null,'password');
$auth->getStorage()->write($data);
$this->_redirect('/user');
}else{
$this->_redirect('/user/loginform');
}
}
public function logoutAction()
{
$auth = Zend_Auth::getInstance();
if(!$auth->hasIdentity()){
$this->_redirect('/user/loginform');
}
$auth->clearIdentity();
$this->_redirect('/user');
}
public function nameAction()
{
$auth = Zend_Auth::getInstance();
if(!$auth->hasIdentity()){
$this->_redirect('/user/loginform');
}
$request = $this->getRequest();
$this->view->assign('name', $request->getParam('username'));
$this->view->assign('gender', $request->getParam('gender'));
$this->view->assign('title', 'Nome Utente');
}
public function registerAction()
{
$auth = Zend_Auth::getInstance();
if(!$auth->hasIdentity()){
$this->_redirect('/user/loginform');
}
$request = $this->getRequest();
$this->view->assign('action',"process");
$this->view->assign('title','Registrazione Membri');
$this->view->assign('label_fname','Nome');
$this->view->assign('label_lname','Cognome');
$this->view->assign('label_uname','Nome Utente');
$this->view->assign('label_pass','Password');
$this->view->assign('label_submit','Registra');
$this->view->assign('description','Compilare questo modulo completamente:');
}
public function editAction()
{
$auth = Zend_Auth::getInstance();
if(!$auth->hasIdentity()){
$this->_redirect('/user/loginform');
}
$registry = Zend_Registry::getInstance();
$DB = $registry['DB'];
$request = $this->getRequest();
$id = $request->getParam("id");
$sql = "SELECT * FROM `user` WHERE id='".$id."'";
$result = $DB->fetchRow($sql);
$this->view->assign('data',$result);
$this->view->assign('action', $request->getBaseURL()."/user/processedit");
$this->view->assign('title','Modifica Membri');
$this->view->assign('label_fname','Nome');
$this->view->assign('label_lname','Cognome');
$this->view->assign('label_uname','Nome Utente');
$this->view->assign('label_pass','Password');
$this->view->assign('label_submit','Edita');
$this->view->assign('description','Compilare questo modulo completamente:');
}
public function processAction()
{
$auth = Zend_Auth::getInstance();
if(!$auth->hasIdentity()){
$this->_redirect('/user/loginform');
}
$registry = Zend_Registry::getInstance();
$DB = $registry['DB'];
$request = $this->getRequest();
$data = array('first_name' => $request->getParam('first_name'),
'last_name' => $request->getParam('last_name'),
'user_name' => $request->getParam('user_name'),
'password' => md5($request->getParam('password'))
);
$DB->insert('user', $data);
$this->view->assign('title','Processo di registrazione');
$this->view->assign('description','Registrazione avventa');
}
public function listAction()
{
$auth = Zend_Auth::getInstance();
if(!$auth->hasIdentity()){
$this->_redirect('/user/loginform');
}
$registry = Zend_Registry::getInstance();
$DB = $registry['DB'];
$sql = "SELECT * FROM `user` ORDER BY user_name ASC";
$result = $DB->fetchAssoc($sql);
$this->view->assign('title','Lista membri');
$this->view->assign('description','Sotto, nostri membri:');
$this->view->assign('datas',$result);
}
public function processeditAction()
{
$auth = Zend_Auth::getInstance();
if(!$auth->hasIdentity()){
$this->_redirect('/user/loginform');
}
$registry = Zend_Registry::getInstance();
$DB = $registry['DB'];
$request = $this->getRequest();
$data = array('first_name' => $request->getParam('first_name'),
'last_name' => $request->getParam('last_name'),
'user_name' => $request->getParam('user_name'),
'password' => md5($request->getParam('password'))
);
$DB->update('user', $data,'id = '.$request->getParam('id'));
$this->view->assign('title','Processo di modifica');
$this->view->assign('description','Modifica eseguita');
}
public function delAction()
{
$auth = Zend_Auth::getInstance();
if(!$auth->hasIdentity()){
$this->_redirect('/user/loginform');
}
$registry = Zend_Registry::getInstance();
$DB = $registry['DB'];
$request = $this->getRequest();
$DB->delete('user', 'id = '.$request->getParam('id'));
$this->view->assign('title','Eliminazione Dati');
$this->view->assign('description','Eliminazione avvenuta');
$this->view->assign('list',$request->getBaseURL()."/user/list");
}
}
?>
A Zend Framework, possiamo usare
Zend_Session. Zend_Session gestisce, lato server, i dati memorizzati in $ _SESSION. E una importante classe che dobbiamo conoscere è Zend_Session_Namespace. LA sessione del Namespace fornisce l’accesso ai dati di sessione tramite i namespace classico implementato logicamente come nome di gruppi in array associativi, con chiave di stringhe (simile al normale array in PHP). Qui di seguito, cito dal manuale Zend Framework:Le istanze di
Zend_Session_Namespace sono oggetti che hanno metodi per accedere alle sezioni dello spazio dei nomi della variabile di sessione $_SESSION. Il componente Zend_Session avvolge l’esistente funzionalità di PHP per ext/session con un interfaccia di amministrazione e gestione, inoltre fornisce un’API per le Zend_Session_Namespace per farlo persistente nello spazio dei nomi della sessione. Zend_Session_Namespace fornisce una interfaccia standardizzata, object-oriented, per lavorare con lo spazio dei nomi in modo persistente all’interno meccanismo sessione standard di PHP. Esiste il supporto per entrambi (anonimi e autenticati – ad esempio, “login”) spazi dei nomi della sessione. Zend_Auth, il componente di autenticazione di Zend Framework, utilizza Zend_Session_Namespace per memorizzare alcune informazioni associate a utenti autenticati. Dal Zend_Session si utilizza le normali funzioni di PHP ext/session internamente, tutte le opzioni di configurazione familiare e impostazioni vengono applicate (vedi http://www.php.net/session), con i bonus come ad esempio la comodità di avere un’interfaccia object-oriented e un comportamento di default che fornisce le best practices e l’integrazione con lo Zend Framework. Quindi, uno standard identificativo di sessione in PHP, trasmessa dal cookie o all’interno degli URL, mantiene l’associazione tra un client e i suoi dati dello stato sessione.Ancora confUSIONE? Non preoccupatevi, Nel prossimo post cercheremo di fare un po’ di pratica con la sessione con
Zend Framework. Inizieremo con Zend_Session_Namespace.Semplicemente, è come il nome dei gruppi di array associativi, con chiavi rappresentate da stringhe. Per fare pratica, usiamo il nostro esercizio precedente.
Ok, vogliamo contare il numero vi volte che si fa’ una richiesta di pagina particolare di form di un visitatore. Vedere l’immagine:

Per fare questo, aprire il file
UserController.php sotto la cartella application/controller. Includere Zend/Session/Namespace.php in prima linea dopo il delimitatore.
require_once 'Zend/Session/Namespace.php';
loginformAction() per farlo diventare come segue:
public function loginFormAction()
{
$request = $this->getRequest();
$ns = new Zend_Session_Namespace('ciaoMondo');
if(!isset($ns->yourLoginRequest)){
$ns->yourLoginRequest = 1;
}else{
$ns->yourLoginRequest++;
}
$this->view->assign('request', $ns->yourLoginRequest);
$this->view->assign('action', $request->getBaseURL()."/user/auth");
$this->view->assign('title', 'Login Form');
$this->view->assign('username', 'Nome Utente');
$this->view->assign('password', 'Password');
}
$_SESSION['ciaoMondo']. Si può mettere il nome come MioNamespace, MiApplicazione, eccPoi, alla riga 7, si verifica il valore di $ns->yourLoginRequest. È come
$_SESSION['ciaoMondo']['yourLoginRequest']. Successivamente, modificare loginform.phtml sotto la cartella application/views/scripts/user. Aggiornandolo diventa come segue:
<? include "header.phtml"; ?>
<h1><?=$this->escape($this->title);?></h1>
Sei entrato in questa pagina: <?=$this->escape($this->request);?> volte.
<form method='post' action='<?=$this->escape($this->action);?>'>
<table>
<tr>
<td><?=$this->escape($this->username);?></td>
<td><input type='text' name='username'></td>
</tr>
<tr>
<td><?=$this->escape($this->password);?></td>
<td><input type='password' name='password'></td>
</tr>
</table>
<input type='submit' name='login' value='Login'>
</form>
<? include "footer.phtml"; ?>
http://localhost/test/zend/ciaoMondo/web_root/user/loginform. Si può ottenere le schermate come l’immagine di sopra.Ok, prova di nuovo con userPageAction() nelcontroller. L’aggiornamento apparirebbe come segue:
public function loginformAction()
{
$request = $this->getRequest();
$ns = new Zend_Session_Namespace('CiaoWorld');
if(!isset($ns->yourLoginRequest)){
$ns->yourLoginRequest = 1;
}else{
$ns->yourLoginRequest++;
}
$this->view->assign('request', $ns->yourLoginRequest);
$this->view->assign('action', $request->getBaseURL()."/user/auth");
$this->view->assign('title', 'Login Form');
$this->view->assign('username', 'Nome Utente');
$this->view->assign('password', 'Password');
}
application/views/scripts/user/userpage.phtml:
<? include "header.phtml"; ?>
<h1>Ciao, <?=$this->escape($this->real_name);?></h1>
Sei entrato in questa pagina: <?=$this->escape($this->request);?> volte.
<a href='<?=$this->escape($this->urllogout);?>'>Logout</a>
<? include "footer.phtml"; ?>
Si prega di prestare attenzione al codice del precedente capitolo:
$ns = new Zend_Session_Namespace('ciaoMondo');
if(!isset($ns->yourLoginRequest)){
$ns->yourLoginRequest = 1;
}else{
$ns->yourLoginRequest++;
}
$ns->yourLoginRequest = 1;
$ns->thisIsSession = "Oke";
$ns->nameOfSession = "MiaSession";
$ns->foo = 10;
echo $ns->yourLoginRequest;
echo $ns->thisIsSession;
echo $ns->nameOfSession;
echo $ns->foo;
$ns = new Zend_Session_Namespace('ciaoMondo');
foreach ($ns as $index => $value) {
echo "ns->$index = '$value';";
}
UserController.php” sotto la cartella application/controller. Aggiungere il seguente metodo:
public function statsAction()
{
$ns = new Zend_Session_Namespace('ciaoMondo');
foreach ($ns as $index => $value) {
echo "ns->$index = '$value';";
echo "<br />";
}
}
stats.phtml” sotto la cartella application/views/scripts/user. Lasciare la pagina vuota.Ok, prova ora a puntare il browser su
http://localhost/test/zend/ciaoMondo/web_root/user/stats. Si può ottenere come ad esempio:
ns->yourLoginRequest = '2';
ns->yourUserPageRequest = '7';
Possiamo usare
lock() per bloccare lo spazio dei nomi. Poi, se volete controllare se è bloccato o no, possiamo usare il booleano isLocked(). Guardate questo esempio:
public function loginFormAction()
{
$ns = new Zend_Session_Namespace('ciaoMondo');
$ns->lock();
if (!$ns->isLocked()) {
if(!isset($ns->yourLoginRequest)){
$ns->yourLoginRequest = 1;
}else{
$ns->yourLoginRequest++;
}
}
$request = $this->getRequest();
$this->view->assign('request', $ns->yourLoginRequest);
$this->view->assign('action', $request->getBaseURL()."/user/auth");
$this->view->assign('title', 'Login Form');
$this->view->assign('username', 'Nome Utente');
$this->view->assign('password', 'Password');
}
unLock().
$ns= new Zend_Session_Namespace('CiaoWorld');
// blocca la sessione e diventa di sola lettura
$ns->lock();
// sblocca la sessione di sola lettura
if ($ns->isLocked()) {
$ns->unLock();
}
Proviamo ad modificare il metodo loginform del file
UserController.php sotto la cartella application/controller. Aggiorniamo loginformAction():
public function loginformAction()
{
$ns = new Zend_Session_Namespace('ciaoMondo');
if(!isset($ns->yourLoginRequest)){
$ns->yourLoginRequest = 1;
}else{
$ns->yourLoginRequest++;
}
$ns->setExpirationSeconds(60);
$request = $this->getRequest();
$this->view->assign('request', $ns->yourLoginRequest);
$this->view->assign('action', $request->getBaseURL()."/user/auth");
$this->view->assign('title', 'Login Form');
$this->view->assign('username', 'Nome Utente');
$this->view->assign('password', 'Password');
}
yourLoginRequest):
$ns->setExpirationSeconds(60,'yourLoginRequest');

Ancora nessun commento