【发布时间】:2009-12-02 00:50:06
【问题描述】:
我正在 Zend Framework 中开发多租户应用程序,该应用程序从子域名中获取其tenantID(mod_rewrite -> index.php -> 将其与数据库匹配)。
我的问题是 - 如何设置此变量(租户 ID)以供每个控制器使用?
莱昂蒂
【问题讨论】:
标签: php zend-framework multi-tenant
我正在 Zend Framework 中开发多租户应用程序,该应用程序从子域名中获取其tenantID(mod_rewrite -> index.php -> 将其与数据库匹配)。
我的问题是 - 如何设置此变量(租户 ID)以供每个控制器使用?
莱昂蒂
【问题讨论】:
标签: php zend-framework multi-tenant
是的,Zend_Registry 可以用于此。你可以做的另一件事是注册一个 pre-dispatch 控制器插件,它会在任何控制器接收到之前将 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"
【讨论】:
我认为 Zend_Registry 可能是要走的路。 http://framework.zend.com/manual/en/zend.registry.html 这是正确的做法吗?
莱昂蒂
【讨论】:
我认为只设置变量的前端控制器插件开销太大。
一种更简单的方法是创建您的基本动作控制器并从它继承所有其他控制器。
class MyCompany_Controller_Action extends Zend_Controller_Action
{
public function preDispatch()
{
parent::preDispatch();
$this->getRequest()->setParam('tenantId', 42);
}
}
您的所有控制器都从这个基础控制器继承了另一个间接好处,因此更容易添加应该从所有控制器中使用的通用逻辑。
【讨论】:
MyCompany_Controller_Action 继承,因此所有人都可以访问参数。