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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top