Zend Framework Database
Indice
Introduzione
⤽
Zend Framework fornisce classi per il supporto del database. Il nome di tale classe è Zend_Db. Altri benefici utilizzando questa classe e le classi correlate sono le caratteristiche che offre un’interfaccia semplice per il database SQL.
Se 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
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 “
Creazione Modulo di inputSe 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:
Copia codice
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`)
);
⤽
Primo passo, creeremo un modulo per l’input dei dati. Creiamo questo modulo dentro de la classe User Controller. Dobbiamo solo aggiungere un metodo denominato “
Aprire “
Come sappiamo, se creiamo un’azione con il nome “
Ora, puntare il browser su
Inserendo i dati nel databaseregisterAction
” come azione per questo controller.Aprire “
UserController.php
” sotto la cartella application/controllers
. Aggiungere il seguente metodo:
Copia codice
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:
Copia 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
⤽
Dopo di aver creato il modulo, ora, creiamo l’azione per inserire i dati nel database. Per questo lavoro, aprire il file “
È semplice da capire, non è vero?
Ora, puntare il browser su
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:
Inserendo espressioni a una tabellaUserController.php
” sotto la cartella application/controllers
. Aggiungere un metodo denominato “processAction
“, come nel seguente codice:
Copia 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:
Copia 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:
⤽
Al post precedente, abbiamo usato um’ordinaria query per i dati di input. Zend Framework ha un modo molto semplice per le query di inserimento. È una buona alternativa, perché è semplice e più pulito.
Si può usare la query in questo modo:
LA vecchia query è come questa:
Ok, sostituiamo il nostro
Creazione Lista dei datiSi può usare la query in questo modo:
Copia codice
$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);
Copia codice
$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:
Copia 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();
$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');
}
⤽
Ora, creiamo una lista per visualizzare i dati che abbiamo inseriti nella tabella. Per questo lavoro, creiamo un metodo chiamato “
Aprire “
Quindi, creare un file chiamato “
Ora, puntare il browser su
Creazione form di modificalistAction
” all’interno del controller. Quindi, creiamo una vista per questa lista.Aprire “
UserController.php
” sotto la cartella application/controllers
. Aggiungere il seguente metodo:
Copia codice
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:
Copia 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
⤽
Per creare un modulo per l’edizione, aggiungere un metodo al controller. In questo esercizio, si aggiunge una azione denominata “
Aprire il file “
Quindi, creare un file chiamato “
Ora, aprire un’altra volta la tabella puntando il browser su
Aggiornamento dei datieditAction
“. 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:
Copia codice
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:
Copia 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:⤽
In questo post, creeremo un’azione per l’aggiornamento dei dati. Aprite il vostro “
Quindi, creare un file chiamato “
Ok, tenta ora di aggiornare i dati dal modulo di modifica.
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:
Di seguito il codice completo per il metodo
Eliminazione di datiUserController.php
” sotto la cartella application/controller
. Inserisci la seguente nuova azione:
Copia codice
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:
Copia 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:
Copia codice
$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
:
Copia codice
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');
}
⤽
Ultima azione di questa serie è la cancellazione dei dati. Per questo lavoro, creare un nuovo metodo nel
Apriree il file “
Quindi, creare una nuova view per questa azione con un file chiamato “
Ora, provate a verificare dai dati della tabella. Clicca il link presso una delle righe.
Eliminazione di dati stile querycontroller
.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
“):
Copia codice
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:
Copia 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"; ?>
⤽
Come le query per l’inserimento e aggiornamento, Zend Framework ha un’altra opzione per le query di eliminazione. È possibile utilizzare questo stile, e sono sicuro che sarà come:
Ok, tenta di aggiornare il vostro
Ok, ora, siete pronti a documentarvi di più sullo stile di Zend Framework per le query consultando la guida a Zend Framework.
Riassumendo Action Controller
Copia codice
>
$DB->delete('user', 'id = 3');
delAction
per farlo diventare come questo:
Copia codice
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");
}
⤽
Questo è all’ultimo post del capitolo Zend Framework Database. In questo post, si può guardare l’azione completa che avevamo parlato.
Copia codice
<?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");
}
}
?>
Ancora nessun commento