Zend Framework - 将变量传递给每个控制器

时间:2009-11-27 02:45:29

标签: php zend-framework multi-tenant

我正在研究Zend Framework中的多租户应用程序,它从子域名获取它的tenantID(mod_rewrite - > index.php - >匹配数据库)。

我的问题是 - 如何将此变量(租户ID)设置为可用于每个控制器?

Leonti

3 个答案:

答案 0 :(得分:9)

是的,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 :(得分:1)

我认为Zend_Registry可能是最佳选择。 http://framework.zend.com/manual/en/zend.registry.html 这是正确的方法吗?

Leonti

答案 2 :(得分:0)

我认为只设置变量的前端控制器插件开销太大了。

更简单的方法是创建基本操作控制器并从中继承所有其他控制器。

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

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

您还有另一个间接的好处,即所有控制器都从这个基础控制器继承,因此更容易添加应该从所有控制器使用的公共逻辑。