web-dev-qa-db-ja.com

ZendFrameworkのコントローラープラグインでbootstrapリソースを取得する方法

protected function _initDatabase()
{
     $params = array(
            'Host'     => '',
            'username' => '',
            'password' => '',
            'dbname'   => '',
        );

    $database = Zend_Db::factory('PDO_MYSQL', $params);
    $database->getConnection();
    return $database;
}

class App_Controller_Plugin_Test extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Http $request)
    {
        // how i get database?

    }
}
19
y2k

フロントコントローラーへの参照はいつでも取得できます。

$front = Zend_Controller_Front::getInstance();

それから、ブートストラップを取得できます。

$bootstrap = $front->getParam("bootstrap");

bootstrapからbootstrapプラグインを取得できます:

if ($bootstrap->hasPluginResource("database")) {
      $dbResource = $bootstrap->getPluginResource("database");
}
$db = $dbResource->getDatabase();

しかし、それは余分な配管がたくさんあります!

正直なところ、ブートストラップ中にデータベースアダプタオブジェクトをレジストリに保存することをお勧めします。

protected function _initDatabase()
{
     $params = array(
            'Host'     => '',
            'username' => '',
            'password' => '',
            'dbname'   => '',
        );

    $database = Zend_Db::factory('PDO_MYSQL', $params);
    $database->getConnection();
    Zend_Registry::set("database", $database);
    return $database;
}

次に、データベースアダプタをどこからでも入手できます。

Zend_Registry::get("database");

Zendアプリケーションにデータベースハンドラーを提供する「正しい」方法は何ですか に対する私の答えも参照してください。

31
Bill Karwin

残念ながら、プラグインには_Zend_Controller_Action_のgetInvokeArg("bootstrap")のようなものはありません。フロントコントローラーを介して常にbootstrap参照を取得できます:

_$db = Zend_Controller_Front::getInstance()->getParam("bootstrap")->getResource("database");
_

しかし、私が通常することは

_Zend_Registry::set('database', $database);
_

次に、プラグインで:

_try 
{
    $db = Zend_Registry::get('database');
}
catch (Zend_Exception $e)
{
   // do stuff
}
_

より簡単で、データベースはアプリケーションのほぼどこからでも取得できます。

6
typeoneerror

[これを別のマシンで動作しているコードと照合する必要があります。こんな感じだと思います…]

$db = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('db');
5
allnightgrocery

$ db = Zend_Db_Table :: getDefaultAdapter();

0
bigben3333