我正在开发Zend Framework中的多租户应用程序,它从子域名中获取tenantID (mod_rewrite -> index.php ->将其与数据库进行匹配)。
我的问题是-如何将此变量(租户id)设置为可用于每个控制器?
莱昂蒂
发布于 2009-11-27 15:08:41
是的,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"发布于 2009-11-27 12:27:02
我认为Zend_Registry可能是个不错的选择。http://framework.zend.com/manual/en/zend.registry.html这是正确的方法吗?
莱昂蒂
发布于 2009-12-02 00:50:07
我认为仅仅设置一个变量的前端控制器插件开销太大了。
一种更简单的方法是创建您的基本操作控制器,并从它继承所有其他控制器。
class MyCompany_Controller_Action extends Zend_Controller_Action
{
public function preDispatch()
{
parent::preDispatch();
$this->getRequest()->setParam('tenantId', 42);
}
}你还有一个间接的好处,那就是你的所有控制器都是从这个基础上继承而来的,因此更容易添加应该从所有控制器中使用的通用逻辑。
https://stackoverflow.com/questions/1806538
复制相似问题