下面的ZendCasts cast展示了一种在zend框架环境中使用主义2的方法。
使用此配置,如何使连接使用utf-8字符集,从而实现"SET NAMES 'utf8'"
的魔力?
我真正在寻找的是一种使用application.ini文件配置它的方法。
如果使用这种配置不可能做到这一点,那么如何通过代码来实现呢?Bootstratp文件中的_initDoctrine
方法?
谢谢。
更新
似乎有一个post connect事件来处理这个问题,但我不知道如何通过application.ini设置它(如果可能的话)。
如果没有,我可以通过bootstrap方法设置它吗?当依赖于Bisna库时,bootstrap方法会在运行任何其他理论连接代码之前运行吗?
发布于 2011-03-31 03:59:56
对我来说没问题
resources.doctrine.dbal.connections.default.parameters.driverOptions.1002 = "SET NAMES 'UTF8'"
1002
是PDO::MYSQL_ATTR_INIT_COMMAND
的整数值
连接到MySQL服务器时要执行的
命令。将在重新连接时自动重新执行。注意,在构造新的数据库句柄时,只能在driver_options数组中使用此常量。
发布于 2011-05-18 03:10:31
如果您没有使用Bisna,您可以简单地执行以下操作:
将配置内容直接传递给EntityManager的连接选项(尽管没有记录driverOptions
)
// $options is a simple array to hold your data
$connectionOptions = array(
'driver' => $options['conn']['driv'],
'user' => $options['conn']['user'],
'password' => $options['conn']['pass'],
'dbname' => $options['conn']['dbname'],
'host' => $options['conn']['host'],
'charset' => 'utf8',
'driverOptions' => array(
1002 => 'SET NAMES utf8'
)
);
$em = \Doctrine\ORM\EntityManager::create($connectionOptions, $config);
我使用下面的自定义引导资源来初始化原理,因此$options
在application.ini中,并且可以通过$this->getOptions()
访问;
// \library\My\Application\Resource\Doctrine.php
class My_Application_Resource_Doctrine extends Zend_Application_Resource_ResourceAbstract
{
public function init()
{
$options = $this->getOptions();
$config = new \Doctrine\ORM\Configuration();
//doctrine autoloader, config and other initializations
...
$connectionOptions = array(
.... //see above
);
$em = \Doctrine\ORM\EntityManager::create($connectionOptions, $config);
$registry = Zend_Registry::getInstance();
$registry->em = $em;
return $em;
}
}
如果你输入application.ini,它会自动引导
resources.doctrine.conn.host = '127.0.0.1'
resources.doctrine.conn.user = '...'
resources.doctrine.conn.pass = '...'
....
发布于 2015-01-30 16:37:15
这对我很有效。config/autoload/doctrine.local.php
<?php
return array(
'doctrine' => array(
'connection' => array(
'orm_default' => array(
'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
'params' => array(
'host' => 'localhost',
'port' => '3306',
'user' => '...',
'password' => '...',
'dbname' => '...',
'driverOptions' => array(
\PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
)
),
)
)
)
);
https://stackoverflow.com/questions/5391045
复制相似问题