Zend Framework - passe variable à chaque contrôleur
-
05-07-2019 - |
Question
Je travaille sur une application multi-locataires dans Zend Framework qui tire son locataire du nom du sous-domaine (mod_rewrite - > index.php - > le compare à la base de données).
Ma question est la suivante: comment définir cette variable (identifiant du locataire) pour qu'elle soit disponible pour chaque contrôleur?
Leonti
La solution
Oui, Zend_Registry peut être utilisé pour cela. Une autre chose que vous pouvez faire est d’enregistrer un plug-in de contrôleur de pré-expédition, qui ajoutera le tenantID en tant que paramètre de demande avant que tout contrôleur ne le reçoive:
class YourApp_Plugin_IdWriter extends Zend_Controller_Plugin_Abstract {
public function preDispatch(Zend_Controller_Request_Abstract $request) {
$request->setParam('tenantID', ...);
}
}
Vous devez enregistrer le plug-in dans votre application.ini:
resources.frontController.plugins.access = "YourApp_Plugin_IdWriter"
Autres conseils
Je pense que Zend_Registry pourrait être la voie à suivre. http://framework.zend.com/manual/fr/zend.registry. html Est-ce la bonne façon de le faire?
Leonti
Je pense qu'un plug-in de contrôleur frontal qui définit uniquement une variable est trop onéreux.
Un moyen plus simple est de créer votre contrôleur d’action de base et d’en hériter tous les autres.
class MyCompany_Controller_Action extends Zend_Controller_Action
{
public function preDispatch()
{
parent::preDispatch();
$this->getRequest()->setParam('tenantId', 42);
}
}
Vous avez un autre avantage indirect que tous vos contrôleurs héritent de cette base. Il est donc plus facile d'ajouter une logique commune qui devrait être utilisée par tous.