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

时间:2015-02-20 12:26:56

标签: php zend-framework database-connection

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

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

提前致谢!!

1 个答案:

答案 0 :(得分:0)

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