Zend_Config + Zend_Registry + visibilité (scope)
Bonjour à tous,
j'utilise le Zend_Config_Ini pour lire un fichier de type .ini pour stocker mes configurations de site dans ma variable ou objet $config. Tout simplement WoW! On peut faire hériter les configurations de prod vs dev, etc....
En second lieu, pour avoir accès à ma variable $config partout, on dit d'utiliser le Zend_Registry qui est en réalité un singleton! Je fais de même avec $db qui contient en réalité l'espèce de handler que je voudrait utiliser partout. Voici le plus important de mon fichier index.php:
Code:
1 2 3 4 5 6 7 8
|
$config = new Zend_Config_Ini(dirname(__FILE__).'/../application/config/config.ini', 'staging');
$registry = Zend_Registry::getInstance();
$registry->set('config', $config);
...
$db = Zend_Db::factory($config->db->adapter, $config->db->config->toArray());
Zend_Db_Table::setDefaultAdapter($db);
$registry->set('db', $db); |
Ainsi, peu importe où le code sera, je pourrai avoir théoriquement accès à ces variables.... Ce que je trouve un peu irritant est d'accéder à ces deux variables ou objets dans mes controlleurs car je dois continuellement faire un Zend_Registry::get('config') et Zend_Registry::get('db')....
Devrais-je les stocker dans une variable privée de chaque classe controlleur lors de l'init() de celles-ci?
Ca arrange pas mon problème, car je veux tout autant que mes views scripts puissent accéder à une portion de ma $config. Par exemple, je veux que le $config->template->baseurl ou $config->global->sitename soient incluent dans mes scripts de vues......
Cela devient un peu «error prone» de faire dans toutes les actions de tous mes controlleurs le genre de chose suivante:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
public function indexAction()
{
$config = Zend_Registry::get('config');
$this->view->siteName = $config->global->siteName;
$this->view->pageName = "Users administration";
...
public function searchAction()
{
$config = Zend_Registry::get('config');
$this->view->siteName = $config->global->siteName;
$this->view->pageName = "Search users";
public function listAction()
{
$config = Zend_Registry::get('config');
$this->view->siteName = $config->global->siteName;
$this->view->pageName = "List users";
.... |
Il est évident que déclarer $config en global et hors de tout doute une mauvaise pratique, et vous me direz peut-etre que c'est ce que je semble chercher à faire!
Que dois-je faire? Meilleure pratique? Ce que je pense faire est d'initialiser le $config dans le init(), ce qui est commun à tout le controlleur, de faire
Code:
1 2 3 4 5 6
|
function init()
{
$config = Zend_Registry::get('config');
$this->view->siteName = $config->global->siteName;
} |
et déléguer $this->view->pagename dans chaque action...... encore la il faut le faire pour chaque controlleur... :S:S
ais-je ratté completement le principe? Je cherche la perfection peut etre trop.... mais je veux bien démarer le projet... c'est tout ;)
Merci