我正在处理 Zend Framework 中的多租户应用程序,它从子域名中获取它的tenantID(mod_rewrite -> index.php -> 将其与数据库匹配)。
我的问题是 - 如何设置此变量(租户 ID)以供每个控制器使用?
莱昂蒂
我正在处理 Zend Framework 中的多租户应用程序,它从子域名中获取它的tenantID(mod_rewrite -> index.php -> 将其与数据库匹配)。
我的问题是 - 如何设置此变量(租户 ID)以供每个控制器使用?
莱昂蒂
是的,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);
}
}
您的所有控制器都从这个基本控制器继承了另一个间接好处,因此更容易添加应该从所有控制器中使用的通用逻辑。