[Zend Framework] Zend_Db: application.ini の設定を活かして利用する

application.ini と Zend_Registry を使って、さらっと DB に接続します。

設定

接続設定を記載します。

application/configs/application.ini
; +----+
; | Db |
; +----+
resources.db.adapter = "pdo_mysql"
resources.db.isDefaultTableAdapter = true
resources.db.params.host = "localhost"
resources.db.params.username = "root"
resources.db.params.password = ""
resources.db.params.dbname = "zend_db"

ini ファイルの内容をこんな指定でとれるんですね。

application/Bootstrap.php
    protected function _initDatabase()
    {
        // get config from config/application.ini
        $config = $this->getOptions();
        $db = Zend_Db::factory($config['resources']['db']['adapter'], $config['resources']['db']['params']);
        //set default adapter
        Zend_Db_Table::setDefaultAdapter($db);
        //save Db in registry for later use
        Zend_Registry::set("db", $db);
    }

コントローラ

Zend_Registry::get(‘db’) で読み込めます。
例えばこんな形とか。

    public function indexAction()
    {
        // action body
        $db = Zend_Registry::get('db');
        if ($this->getRequest()->getParam('name'))
        {
            $name = $this->getRequest()->getParam('name');
            $select = $db->select()->from('addressbook')->where("name = '{$name}'");
        } else {
            $select = $db->select()->from('addressbook');
        }
        $db->setFetchMode(Zend_Db::FETCH_OBJ);
        $result = $db->fetchAll($select);
        $this->view->assign('result', $result);
    }