在 bootstrap 上重用数据库适配器以在 Zend Framework 中设置自定义处理程序数据库会话

Reuse DB adapter on bootstrap to set custom handler DB session in Zend Framework

bootstrap:

public function _initSession()
{
    $config = Zend_Registry::get('config'); // application.ini
    $params = $config->default->resources->db->params->toArray();
    $db = Zend_Db::factory($config->default->resources->db->adapter, $params);
    Zend_Db_Table_Abstract::setDefaultAdapter($db);

    $config = array(
        'name'           => 'session',
        'primary'        => 'id',
        'modifiedColumn' => 'modified',
        'dataColumn'     => 'data',
        'lifetimeColumn' => 'lifetime'
    );

    Zend_Session::setSaveHandler(
      new Cokidoo_Session_HandlerCache(
        new Cokidoo_Session_HandlerDb($config)));
 }

application.ini:

default.resources.db.adapter = "PDO_MYSQL"
default.resources.db.params.username = myuser
default.resources.db.params.password = mypasss
default.resources.db.params.host = myhost
default.resources.db.params.dbname = mydbname
default.resources.db.params.driver_options.1002 = "SET NAMES utf8"

我正在设置自定义处理程序以在 MySQL 中存储会话。为此,我需要将默认适配器设置为数据库连接。通过这样做,我创建了一个数据库连接。但是我意识到之后,Zend在调用中创建了一个新连接

Zend_Db_Adapter_Pdo_Abstract->_ connect

因此,它创建了两次数据库连接。这种情况发生在对我们的网络应用程序的每个请求中,所以我想避免这种情况,因为这是一个性能问题。

提前致谢!!

您不需要在会话处理程序尝试执行之前创建默认适配器$this->bootstrap('db');我想初始化一次数据库连接就足够了。