Avrei un problema da risolvere. Il nuovo ZF2 suggerisce l'utilizzo del serviceLocator per configurare le classi che gestiranno i risultati delle tabelle del database. Solo che questa soluzione non mi permette di utilizzare un metodo anche "statico" nel LAYOUT del sito. Ora cerco di spiegarmi meglio con un esempio.
Il mio obiettivo è visualizzare una lista di categorie in tutte le pagine del sito. Quindi immagino di avere nel mio LAYOUT.PHTML un metodo statico che recuperi questa lista, ad esempio "CategoryEntity::listCategories()". Questa cosa non è fattibile con ZF2 in quanto il metodo "listCategories" deve a sua volta richiamare un altro metodo della classe che gestisce la tabella, quindi il metodo "getResult()" della classe "CategoriesTable". Solo che per richiamare la classe "CategoriesTable" occorre passare il "$tableGateway" che lo posso recuperare solo dai CONTROLLER. Quindi come posso fare se questo metodo mi occorre nel LAYOUT ? È impensabile passare una variabile al LAYOUT da ogni CONTROLLER, mi servirebbe qualcosa di più generale.
Di seguito il codice di esempio che mi "blocca"
Codice PHP:
Class CategoriesEntity
{
protected $_table;
function __construct($sm)
{
$this->_sm = $sm;
$tableGateway = $sm->get('CategoriesTableGateway');
$this->_table = new CategoriesTable($tableGateway);
}
static public function getInstance($sm)[/FONT][/COLOR]
{
if (!self::$instance)
{
self::$instance = new self($sm);
}
return self::$instance;
}
static public function listCategories()
{
$table = new CategoriesTable($tableGateway); //come faccio a recuperare il $tableGateway nel LAYOUT????
return $table->getCategories();
}
public function listCategoriesInController()
{
return $this->_table->getCategories(); //così funziona ma può essere utilizzato solo nei controller e non in LAYOUT
}
}