mercoledì 16 gennaio 2008

Come usare gli helper in Zend Framework

Per prima cosa una cosetta semplice e utile: gli helper, ovvero dei piccoli pezzetti di codice che possono essere richiamati dalla view più volte e che possono mantenere un loro stato.

Ricetta semplice per creare l'helper 'showErrors' che in pratica incrementa una variabile e restituisce una stringa.

Creazione Helper
creare il file showErrors.php nella directory /application/views/helpers/
con il seguente contenuto


<?php
class Zend_View_Helper_ShowErrors
{
protected $_count = 0;
public function showErrors() {
$this->_count++;
$output = "I have seen 'The Jerk' {$this->_count} time(s).";
return htmlspecialchars($output);
}
}



Richiamare l'helper dalla view
nella view basta inserire

<?php echo $this->showErrors(); ?>

e il gioco è fatto.

Convenzioni da seguire:

  • il file che contiene la classe dell'helper si deve chiamare come l'helper con la lettera iniziale minuscola (showErrors.php)
  • la classe dell'helper deve iniziare con Zend_View_Helper_ seguita dal nome dell'helper con la lettera iniziale maiuscola (class Zend_View_Helper_ShowErrors)
  • deve esistere nella classe almeno un metodo che si chiama come l'helper con la lettera minuscola iniziale (public function showErrors())
  • se l'helper è salvato nella directory views/helpers/ viene caricato il tutto in modo automatico.


Non mi sembra difficile dopo tutto... o no?

Accedere dall'helper alle variabili della view
Visto che il mio helper deve mostrare i messaggi di errore, devo accedere alla variabile $messages che si trova nella view. Normalmente nella view accedo alla variabile semplicemente con $this->messages.
Nell'helper devo fare un passo in più: recuperare l'oggetto view:

Ricetta per gli impazienti:

Aggiungo un metodo nell'helper che si chiama setView che riceve l'oggetto view e lo salva in una variabile e poi è possibile utilizzarlo in tutti i metodi.


<?php
class Zend_View_Helper_ShowErrors
{
protected $_count = 0;
public $view;

public function setView(Zend_View_Interface $view) {
$this->view = $view;
}
public function showErrors() {
if (isset($this->view->messages)) {
$this->_count++;
$output = "I have seen 'The Jerk' {$this->_count} time(s).";
return htmlspecialchars($output);
}
}
}


in questo modo posso accedere ad ogni elemento della view semplicemente con
$this->view-> (ad esempio alle variabili impostate dal controller come nel mio caso)

versione definitiva
in ogni caso questo e' l'helper che utilizzo nel mio codice

<?php
class Zend_View_Helper_ShowErrors
{
public $view;

public function setView(Zend_View_Interface $view) {
$this->view = $view;
}
public function showErrors() {
if (isset($this->view->messages)) {
$output = "<div id=\"message\">";
foreach ($this->view->messages as $field => $messages) {
foreach ($messages as $message) {
$output .= $this->view->escape($message) . "<br />\n";
}
$output .= "<br />";
}
$output .= "</div>";
return $output;
}
}
}

0 commenti: