【问题标题】:Global access to some component in Phalcon全局访问 Phalcon 中的某些组件
【发布时间】:2013-02-14 16:20:39
【问题描述】:

如何使某些类和对象可从所有 MVC 层访问?

例如,我想全局访问当前用户的个人资料和config.ini 文件。

在 Zend Framework 1.x 中,我为此使用 Zend_Registery。

【问题讨论】:

    标签: php registry global phalcon


    【解决方案1】:

    您可以为此使用DI container

    访问配置的一种简单方法是在引导程序中创建一个 lambda 函数,如下所示:

    $configFile  = require(ROOT_PATH . '/web/config/global.php');
    
    // Create the new object
    $config = new \Phalcon\Config($configFile);
    
    // Store it in the Di container
    $this->di['config'] = $config;
    

    从控制器访问这个对象很简单:

    $config = $this->config;
    

    从应用程序的任何其他部分,您始终可以获取 Di 容器并从那里访问它,如下所示:

    $di = \Phalcon\DI\FactoryDefault::getDefault();
    $config = $di->config;
    

    查看引导示例here。它展示了服务是如何在 Di 容器中注册的。

    根据当前用户配置文件,您始终可以使用 Session 组件以与上述配置相同的方式存储该信息并随意检索它。

    最后你可以在 Phalcon 中注册你自己的 Registry 服务。如果你有兴趣,我有一个例子here

    【讨论】:

    • 用户登录后,我想让它的配置文件在所有层都可以访问。如果我将它存储在 session 中,如果用户配置文件在会话期间发生更改,它不会更新。
    【解决方案2】:

    我为一些 phalcon 问题构建了一个扩展骨架。这是其中之一。

    在此处查看项目:https://github.com/alanbarber111/cloud-phalcon-skeleton

    但是,基本上Cloud::app()->getPhalconDi()Cloud::app()->getPhalconRouter()Cloud::app()->getPhalconApplication() 可以从应用程序中的任何位置调用

    【讨论】:

      【解决方案3】:

      值得一提的是,Phalcon 包含一个内置的注册表服务,我发现它很有帮助:

      https://docs.phalconphp.com/en/latest/api/Phalcon_Registry.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-22
        • 1970-01-01
        • 2022-01-07
        • 1970-01-01
        • 2021-10-20
        • 1970-01-01
        • 2014-08-16
        • 1970-01-01
        相关资源
        最近更新 更多