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

发布于 2024-08-12 09:14:50 字数 154 浏览 3 评论 0原文

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

我的问题是 - 如何设置此变量(租户 ID)以供每个控制器使用?

莱昂蒂

I'm working on multi-tenant application in Zend Framework which gets it's tenantID from the subdomain name (mod_rewrite -> index.php -> matches it against the database).

My question is - how do I set this variable (tenant id) to be available for every Controller?

Leonti

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

不爱素颜 2024-08-19 09:14:50

是的,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"

Yes, Zend_Registry can be used for that. Another thing you can do is registering a pre-dispatch controller plugin, which will add the tenantID as a request parameter before any controller receives it:

class YourApp_Plugin_IdWriter extends Zend_Controller_Plugin_Abstract {
    public function preDispatch(Zend_Controller_Request_Abstract $request) {
        $request->setParam('tenantID', ...);
    }
}

You need to register the plugin in your application.ini:

resources.frontController.plugins.access = "YourApp_Plugin_IdWriter"
丿*梦醉红颜 2024-08-19 09:14:50

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

莱昂蒂

I think Zend_Registry might be the way to go.
http://framework.zend.com/manual/en/zend.registry.html
Is this is the right way to do it?

Leonti

洒一地阳光 2024-08-19 09:14:50

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

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

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

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

您还有另一个间接的好处,即您的所有控制器都继承自这个基础控制器,因此可以更轻松地添加应该从所有控制器中使用的通用逻辑。

I think that a front controller plugin that just sets a variable is too much overhead.

A simpler way is to create your base action controller and inherits all others from it.

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

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

You have another indirect benefit that all your controllers inherits from this base one, so it's easier to add common logic that should be used from all.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文