我正在研究Zend Framework中的多租户应用程序,它从子域名获取它的tenantID(mod_rewrite - > index.php - >匹配数据库)。
我的问题是 - 如何将此变量(租户ID)设置为可用于每个控制器?
Leonti
答案 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);
}
}
您还有另一个间接的好处,即所有控制器都从这个基础控制器继承,因此更容易添加应该从所有控制器使用的公共逻辑。