【问题标题】:How could read application.ini on controller using zend framework如何使用 zend 框架读取控制器上的 application.ini
【发布时间】:2011-08-07 16:13:32
【问题描述】:

我的 application.ini 中有这些行

如何在我的控制器中读取用户

resources.doctrine.dbal.connections.default.parameters.driver   = "pdo_mysql"
resources.doctrine.dbal.connections.default.parameters.dbname   = "zc"
resources.doctrine.dbal.connections.default.parameters.host = "localhost"
resources.doctrine.dbal.connections.default.parameters.port = 3306
resources.doctrine.dbal.connections.default.parameters.user = "root"
resources.doctrine.dbal.connections.default.parameters.password = "123456"

我使用了这段代码,但它返回 null

$bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap');
 $user = $bootstrap->getOption('user');
var_dump($user);

编辑: 如何阅读所有连接选项?

【问题讨论】:

  • 我认为this 应该可以帮到你。
  • 解决了吗?如果是这样,您能否接受解决您问题的答案。

标签: php zend-framework ini


【解决方案1】:

您可以使用 set 方法设置任何变量,如下在公共文件夹中的 index.php 上 让

$config = '测试'; Zend_Registry::set('config', $config);

一旦设置了变量,您就可以通过以下方法访问任何控制器/模型

Zend_Registry::get('config');

帮帮忙!!

【讨论】:

    【解决方案2】:

    在这种情况下,您应该使用 Zend_Config_Ini 类

    $config = new Zend_Config_Ini('/path/to/config.ini','staging',$options);
    

    第二个参数是INI文件中应该加载的部分; 第三个​​参数是允许修改加载文件的关键。

    您可以通过这种方式输出价值用户:

    $config->resources->doctrine->dbal->connections->default->parameters->user;
    

    【讨论】:

      【解决方案3】:

      这进入你的控制器。

      $bootstrap = $this->getInvokeArg('bootstrap');
      $appinidata = $bootstrap->getOptions();
      $user=$appinidata['resources']['doctrine']['dbal']['connections']['default']['parameters'] ['user'];
      

      这应该打印“root”。

      print_r($user);
      

      【讨论】:

        【解决方案4】:

        我认为你应该使用

        $this->getInvokeArgs('bootstrap');
        

        更多信息see this chapter在手册中。

        如何使用

        $conf = $bootstrap->getOption('resources');
        $dbConf = $conf['doctrine']['dbal']['connections']['default']['parameters'];
        

        【讨论】:

        • 我认为 $bootstrap = $this->getInvokeArg('bootstrap');和 $bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap');是一样的
        • 好吧,我不确定。还有一个想法;)
        • 但是有没有办法让配置参数不像数组元素而是 oop 样式?喜欢$a = $conf->one->two?。请问我关于这个stackoverflow.com/questions/12887873/…的问题
        • $config = new Zend_Config($conf); 或 richardcastera.com/blog/…
        【解决方案5】:

        比如:

        $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini', APPLICATION_ENV);
        $connectionParams = $config->resources->doctrine->connections;
        

        或在Bootstrap 期间,创建此$config 对象并将其保存在Bootstrap 或Zend_Registry 中,以便以后在您的控制器中检索。

        【讨论】:

        • 我认为这不是一个好主意。你让系统读取你的 application.ini 两次。然后用 Zend_Registry 从配置中检索参数会让人不舒服。请参阅我的问题stackoverflow.com/questions/12887873/…
        • 当然,你是对的:他不应该两次读取/加载/解析.ini文件。重要的部分是如何深入到配置对象/数组以获取他需要的数据。谢谢! ;-)
        【解决方案6】:

        要获取 Doctrine 容器资源,只需使用:

        $bootstrap = $this->getInvokeArg('bootstrap');
        $doctrine = $bootstrap->getResource('doctrine');
        

        从那里您可以深入了解默认连接的用户名(如果需要,您可以指定连接,只需在调用 getConnection 时传递连接的名称):

        $username = $doctrine->getConnection()->getUsername();
        

        【讨论】:

        • $username = $doctrine->getConnection()->getUsername();在我的示例中是否返回“root”?
        • 是的,当与 application.ini 一起使用时,它应该返回 root。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-22
        • 2013-09-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多