在Zend中,如何使用我的application.ini数据库设置?

时间:2011-12-01 07:28:48

标签: zend-framework

我正在尝试进行身份验证,我需要一个适用于MySQL的数据库适配器。目前,我将使用它:

$db = new Zend_Db_Adapter_Pdo_Mysql(array(
    'host'     => '127.0.0.1',
    'username' => 'webuser',
    'password' => 'xxxxxxxx',
    'dbname'   => 'test'
));

但是,当我在application.ini中设置resources.db.*时,将其硬编码到控制器中是没有意义的。我的问题是,如何让我的控制器获取我的数据库适配器的application.ini中的信息?您能否链接我迫切寻找的相关文档页面?

3 个答案:

答案 0 :(得分:2)

要访问您的应用程序资源,您需要访问Zend_Application的引导对象,即您在index.php文件中创建的对象。 Zend_Registry说,你可以将它们中的任何一个存储在任何地方都可以访问的地方。 假设这是你的public / index.php文件:

    // suppose you have defined the APPLICATION_PATH constant to the application
    // directory of your project. and the APPLICATION_ENV defines your environment
    // like production, development or testing.
    // create a config for your application configurations, defining your resources
    $config = new Zend_Config_Ini(
                APPLICATION_PATH . '/configs/application.ini',
                APPLICATION_ENV
            );
    // this is the application object
    $application = new Zend_Application(APPLICATION_ENV, $config);

    // now resources are bootstrapping
    $application->bootstrap();
    $bootstrap = $application->getBootstrap();

    // store them somewhere in registry, so you could access them from everywhere
    // like controllers, models, etc.
    Zend_Registry::set('application', $application);

现在在您的控制器(或任何其他代码,如模型,视图等)中,您可以使用以下方式访问此应用程序对象:

   $application = Zend_Registry::get('application'):
   /*@var $application Zend_Application*/
   $bootstrap = $application->getBootstrap();
   // now you could access any resources from the $bootstrap object

   $db = $bootstrap->getResource('db');
   $log = $bootstrap->getResource('log);
   // now $db is a Zend_Db object bootstrapped from your application config

这是访问应用程序引导程序的一般方法。但是在控制器中还有另一种方法来访问引导对象(以及资源​​),并且使用控制器对象的'''getInvokeArg('bootstrap')'''。所以在你的控制器中你可以这样做:

  $bootstrap = $this->getInvokeArg('bootstrap');
  $db = $bootstrap->getResource('db');
  // now $db is a Zend_Db object bootstrapped from your application config

答案 1 :(得分:2)

在run function中的Bootstrap.php文件中添加:

public function run() {
  //Any other code you already had in the run function could go here
  //Add this line to your function
  Zend_Registry::set('options', $this->getOptions());
}

然后在您的控制器中,您可以通过执行以下操作来访问数据库连接设置:

$options = Zend_Registry::get('options')
$host = $options['resources']['db']['params']['host'];

答案 2 :(得分:0)

在您的Bootstrap.php(/application/Bootstrap.php)文件中,创建一个名为_initDb()的函数,如下所示:

protected function _initDb()
{
    $db = $this->getPluginResource('db');
    // ...
}