首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在使用Bisna时,如何在Zend Framework application.ini的Doctrine 2中定义utf-8的用法

在使用Bisna时,如何在Zend Framework application.ini的Doctrine 2中定义utf-8的用法
EN

Stack Overflow用户
提问于 2011-03-22 20:16:37
回答 8查看 36.4K关注 0票数 19

下面的ZendCasts cast展示了一种在zend框架环境中使用主义2的方法。

使用此配置,如何使连接使用utf-8字符集,从而实现"SET NAMES 'utf8'"的魔力?

我真正在寻找的是一种使用application.ini文件配置它的方法。

如果使用这种配置不可能做到这一点,那么如何通过代码来实现呢?Bootstratp文件中的_initDoctrine方法?

谢谢。

更新

似乎有一个post connect事件来处理这个问题,但我不知道如何通过application.ini设置它(如果可能的话)。

如果没有,我可以通过bootstrap方法设置它吗?当依赖于Bisna库时,bootstrap方法会在运行任何其他理论连接代码之前运行吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-03-31 03:59:56

对我来说没问题

代码语言:javascript
复制
resources.doctrine.dbal.connections.default.parameters.driverOptions.1002 = "SET NAMES 'UTF8'"

1002PDO::MYSQL_ATTR_INIT_COMMAND的整数值

连接到MySQL服务器时要执行的

命令。将在重新连接时自动重新执行。注意,在构造新的数据库句柄时,只能在driver_options数组中使用此常量。

票数 22
EN

Stack Overflow用户

发布于 2011-05-18 03:10:31

如果您没有使用Bisna,您可以简单地执行以下操作:

将配置内容直接传递给EntityManager的连接选项(尽管没有记录driverOptions )

代码语言:javascript
复制
// $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()访问;

代码语言:javascript
复制
// \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,它会自动引导

代码语言:javascript
复制
resources.doctrine.conn.host = '127.0.0.1'
resources.doctrine.conn.user = '...'
resources.doctrine.conn.pass = '...'
....
票数 91
EN

Stack Overflow用户

发布于 2015-01-30 16:37:15

这对我很有效。config/autoload/doctrine.local.php

代码语言:javascript
复制
<?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'
                    )

                ),

            )
        )
    )
);
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5391045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档