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;
}
}
}
1 commento:
Ciao e grazie dell'articolo!
Ho capito come settare un nuovo helper in zend.. ma ho ancora dei dubbi sull'utilizzo... Mi spiego con un esempio...
Ho necessità di inserire in più pagine del sito una tabella che prende i suoi dati dal db.
Allora, ecco i passaggi:
1) creo il mio helper che chiamerò MyHelper.php e al suo interno prendo i dati che mi servono accedendo al model MyModel.php.
2) Poi creo un mio layout myLayout.phtml dal quale chiamo $this->myHelper() che si occuperà di stampare la tabella e i suoi dati.
Ecco il problema. Ora vorrei, da un qualunque action o anche da una qualunque view del mio progetto, utilizzare questo layout+helper e visualizzare la tabella.
Io richiamo il layout da una mia view così, ma non stampa nulla:
echo $this->layout()->myLayout;
Come posso fare questa cosa, se è il modo migliore o se interpreto male qualcosa?
grazie :)
Posta un commento