Zend Framework - передать переменную каждому контроллеру - PullRequest
4 голосов
/ 27 ноября 2009

Я работаю над мультитенантным приложением в Zend Framework, которое получает его tenantID из имени субдомена (mod_rewrite -> index.php -> сопоставляет его с базой данных).

Мой вопрос - как мне установить эту переменную (идентификатор арендатора) доступной для каждого контроллера?

Леонтий

Ответы [ 3 ]

9 голосов
/ 27 ноября 2009

Да, Zend_Registry может использоваться для этого. Другая вещь, которую вы можете сделать, это зарегистрировать плагин контроллера предварительной отправки, который добавит tenantID в качестве параметра запроса до того, как его получит любой контроллер:

class YourApp_Plugin_IdWriter extends Zend_Controller_Plugin_Abstract {
    public function preDispatch(Zend_Controller_Request_Abstract $request) {
        $request->setParam('tenantID', ...);
    }
}

Вам необходимо зарегистрировать плагин в вашем application.ini:

resources.frontController.plugins.access = "YourApp_Plugin_IdWriter"
1 голос
/ 27 ноября 2009

Я думаю, что Zend_Registry может быть подходящим вариантом. http://framework.zend.com/manual/en/zend.registry.html Это правильный способ сделать это?

Леонтий

0 голосов
/ 01 декабря 2009

Я думаю, что плагин фронт-контроллера, который просто устанавливает переменную, слишком много накладных расходов.

Более простой способ - создать базовый контроллер действий и наследовать от него все остальные.

class MyCompany_Controller_Action extends Zend_Controller_Action
{
    public function preDispatch()
    {
        parent::preDispatch();

        $this->getRequest()->setParam('tenantId', 42);
    }
}

У вас есть еще одно косвенное преимущество, которое все ваши контроллеры наследуют от этого базового, поэтому проще добавить общую логику, которая должна использоваться от всех.

...