Zend Framework Registry

Impostazione e lettura dei valori
Cosa sono i Registri? È come un memorizzare globale. Dobbiamo solo registrare valori e allora si possono utilizzare in tutta l’applicazione. Per esempio, possiamo memorizzare il nome dell’applicazione, così ogni volta che abbiamo bisogno di visualizzare il nome dell’applicazione, facciamo una chiamata al Registro.
Per utilizzare il Registro, dobbiamo inserire il file registry.php di Zend Framework nell’applicazione:
Copia codice

require_once 'Zend/Registry.php';
Ok, ora faremo un po’ di pratica utilizzando il Registro. Usiamo ancora il nostro precedente esercizio. Si prega di leggere che il post di prima. Poi, seguire la seguente procedura:

  1. Aprire quindi il file “index.php” sotto “web_root“. Inserire le linee 09 – 12:
    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');
    ?>
    
    Abbiamo impostato nel registro un parametro denominato “title” e abbiamo messo un valore a questo parametro.
  2. Quindi, proviamo a chiamare/leggere questo registro. Apri il tuo UserController.php sotto la cartella application/controller.
  3. Aggiornare il metodo indexAction come segue:
    Copia codice
    
    public 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/.

Memorizzare i valori in array
In questa parte si parla di come registrare un valore di array e come leggerli? Ogni valore conservarto nel registro può essere letto come array. Ok, per capire meglio seguire questa procedura.
Quindi, Apriamo di nuovo il file index.php sotto la cartella web_root.
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");
$arrName = array('Mario Balducci', 'Federico Rossi',
     'Sergio Parilli', 'Francesco Belli');
Zend_Registry::set('credits',$arrName);
Zend_Controller_Front::run('../application/controllers');
?>
Si registra un parametro di un array denominato “credits” sulle righe riga 15-17. Come leggerlo?
Ok, proviamo nuovamente ad aggiornare “UserController.php“. Aggiornando indexAction diventa:
Copia codice

  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);
  }
Questo è un altro modo di leggere il registro. Si può usare per leggere diversi valori dal registro.
Ok, prima di provarlo aggiornare la vista in index.phtml sotto la cartella application/views/scripts/user. Aggiorna con il seguente codice:
Copia 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>
Prova da puntare il browser su http://localhost/test/zend/ciaoMondo/web_root/user/.
Lavorare con gli oggetti
Siamo in grado di memorizzare oggetti nel Zend_Registry. Come applicarla? E per cosa? Ricordate, nel nostro esercizio nel capitolo Zend Framework Database stavamo sempre a scrivere i dati di configurazione del database e la sua connessione svariate più volte. Ogni volta che c’era la connessione al database, dovevamo scrivere la connessione. Siamo in grado di risparmiare (energia), scrivendola una sola volta e memorizzarla nel registro.
Per registrare la connessione al database, si può usare questo modo:
Copia codice

$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);
Poi, per leggerlo:
Copia codice

    $registry = Zend_Registry::getInstance();
    $DB = $registry['DB'];
Ok, per la pratica, apriamo il file index.php sotto la cartella web_root. Il suo aggiornamento diventerebbe come segue:
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';
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');
?>
Successivamente, aggiorniamo “UserController.php” sotto la cartella application/controllers per farlo diventare come questo:
Copia codice

<?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");
  }
}
?>
Riesci a vederlo? È semplice, non è vero?