get db adapter from application object in zend framework 1

get db adapter from application object in zend framework 1  using -'php,zend-framework,pdo,zend-db'

I am working on an application written in Zend Framework.  I want to create a stand-alone API.  I'm copying over from public/index.php, and here is the key code on that:

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini');

I have copied that over minus the run() directive, and now I'm trying to write db queries..  I've tried:

$application->_connection; //not declared, fails
$application->_db; //same deal
$application->select(); //same deal

I want to run things like:

$result = $application->_some_connection_object_but_where->query( .. );

Can you help me answer the "but where" part?  Thanks


Also, to answer the great response I had on this, I do have a file called /application/Bootstrap.php with a class called:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap

and this method for connection:

protected function _initDb()
    $appConfig = new Zend_Config_Ini('../application/configs/application.ini', APPLICATION_ENV);

    $dbConfig = new Zend_Config_Ini('../application/configs/db.ini', APPLICATION_ENV);
    $db = new Zend_Db_Adapter_Pdo_Mysql(array(
        'host' => $dbConfig->database->params->host,
        'username' => $dbConfig->database->params->username,
        'password' => $dbConfig->database->params->password,
        'dbname' => $dbConfig->database->params->dbname,
    $db->getConnection(); // force a connection... do not wait for 'lazy' connection binding later




asked Oct 23, 2015 by sameer rathore
0 votes

1 Answer

0 votes

If you have bootstrapped your resources in the "standard" way using references in your ./application/config/application.ini file of the form:

resources.db.adapter = mysql = localhost
// etc

then you should be able to get the adapter object from the Zend_Application object using:

$adapter = $application->getBootstrap()->getResource('db');

Then you can write your db queries against that adapter.

[Or - even better - feed that adapter into a model that encapsulates/hides the specific db-queries inside a well-defined interface whose implementations will be more testable.]


Per request, here is an example of injecting a db-adapter into a model.

class Application_Model_BaseModel
    protected $db;

    public function __construct($db)
        $this->db = $db;


class Application_Model_Users extends Application_Model_BaseModel
    public function getVerifiedUsers()
        $select = $this->db->select()
                'verified' => true,
        return $this->db->fetchAll($select);

Usage would then be:

$model = new Application_Model_Users($db);
$users = $model->getVerifiedUsers();

This could be probably tightened further by using Zend_Db_Table_Abstract as the base model, but I intentionally provided a bare-bones example to show what I mean about injecting a db adapter into a model.

answered Oct 23, 2015 by 20shahi