Registering Zend Database Adapter in Registry

后端 未结 9 2010
温柔的废话
温柔的废话 2020-12-23 00:07

I am looking to register a reference to the main Database Adapter in the Registry during Bootstrapping so it can be used elsewhere in my site (specifically the Authorisation

相关标签:
9条回答
  • 2020-12-23 00:43

    Your missing the best thing :)

    If you use the Zend_Db_Table models (you should be) etc then you can set up a default adaptor - this way when you instantiate a model the DB connection it taken care off - this way you dont really need to save it in the registry or bother about connection before running a query through the model.

    I do save it in the registry for later use if needed though - but I may remove this

    protected function _initDB()
    {
        // Check that the config contains the correct database array.
        if ($this->_config->db) {
    
            // Instantiate the DB factory
            $dbAdapter = Zend_Db::factory($this->_config->db);
    
            // Set the DB Table default adaptor for auto connection in the models
            Zend_Db_Table::setDefaultAdapter($dbAdapter);
    
            // Add the DB Adaptor to the registry if we need to call it outside of the modules.
            Zend_Registry::set('dbAdapter', $dbAdapter);
        }
    }
    
    0 讨论(0)
  • 2020-12-23 00:43

    Here is what i do:

    Inside the bootstrap:

    define('CONFIG_FILE', '../config/general.ini');
    define('APP_MODE', 'development');
    

    Inside the Initializer:

     /**
     * Initialize data bases
     * 
     * @return void
     */
    public function initDb ()
    {
        $options = Zend_Registry::get('conf');
        $db = Zend_Db::factory($options->database);
        $db->query(new Zend_Db_Expr('SET NAMES utf8'));
        Zend_Registry::set('db', $db);
    }
    
    public function initConfig ()
    {
        if (file_exists(CONFIG_FILE) && is_readable(CONFIG_FILE)) {
            $conf = new Zend_Config_Ini(CONFIG_FILE, APP_MODE);
            Zend_Registry::set('conf', $conf);
        } else {
            throw new Zend_Config_Exception('Unable to load config file');
        }
    }
    

    And finaly my config file looks like this:

    [production]
    database.adapter         = pdo_Mysql
    database.params.host     = db.example.com
    database.params.username = dbuser
    database.params.password = secret
    database.params.dbname   = dbname
    
    ; Overloaded configuration from production
    
    [development : production]
    database.params.host     = localhost
    database.params.username = root
    database.params.password = 
    

    Take a look at:

    • Zend_Db::Factory()
    • Zend_Config_Ini
    • Zend_Registry
    0 讨论(0)
  • 2020-12-23 00:44

    My 2 cents...

    How to grab the default DB Adapter:

    From Bootstrap:

    <?php    
    $dbResource = $this->getPluginResource('db');
    db = $dbResource->getDbAdapter();
    var_dump($db);
    ?>
    

    From a Controller there are two methods:

    <?php
    // Method 1
    $bootstrap = $this->getInvokeArg('bootstrap');
    $dbResource = $bootstrap->getPluginResource('db');
    $dbAdapter = $dbResource->getDbAdapter();
    var_dump($dbAdapter);
    
    // Method 2
    $dbAdapter = Zend_Db_Table::getDefaultAdapter();
    var_dump($dbAdapter);
    ?>
    
    0 讨论(0)
提交回复
热议问题