web-dev-qa-db-ja.com

Bisnaを使用する場合、Zend Frameworkのapplication.iniのDoctrine 2でutf-8の使用を定義する方法

次の ZendCasts cast は、zendフレームワーク環境でdoctrine 2を使用する方法を示しています。
この構成を使用して、接続にutf-8文字セットを使用して、"SET NAMES 'utf8'" 起こります ?

私が本当に探しているのは、application.iniファイルを使用して構成する方法です。
この構成を使用してそれが不可能な場合、コードでこれをどのように行うことができますか? _initDoctrine Bootstratpファイルのメソッド?

ありがとうございました。

[〜#〜]更新[〜#〜]
これを処理する接続後のイベントがあるようですが、application.iniを介してそれを設定する方法がわかりません(可能な場合)。
そうでない場合、bootstrapメソッドを使用して設定できますか?bootstrapメソッドは他のdoctrine Bisnaライブラリに依存している場合、接続コードが実行されますか?

19
Doron

私にとってはうまくいきます

resources.doctrine.dbal.connections.default.parameters.driverOptions.1002 = "SET NAMES 'UTF8'"

1002PDO::MYSQL_ATTR_INIT_COMMAND

MySQLサーバーに接続するときに実行するコマンド。再接続時に自動的に再実行されます。この定数は、新しいデータベースハンドルを作成するときに、driver_options配列でのみ使用できます。

22
SMka

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);
_

私は次のカスタムを使用していますbootstrapリソースを初期化するdoctrineしたがって、_$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;
    }
}
_

bootstrapは、application.iniに入れると自動的に

_resources.doctrine.conn.Host = '127.0.0.1'
resources.doctrine.conn.user = '...'
resources.doctrine.conn.pass = '...'
....
_
92
venimus

これでうまくいきました。 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'
                    )

                ),

            )
        )
    )
);
11
Alex

MySQLでZendX_Doctrine2( https://github.com/mridgway/ZendX_Doctrine2 )を使用している場合は、application.iniから追加できます。

次に、application.iniに必要な行は次のとおりです。

resources.entitymanagerfactory.connectionOptions.driverOptions.1002 = "SET NAMES utf8"

(1002 == PDO :: MYSQL_ATTR_INIT_COMMAND)

正しく設定することを忘れないでください

default-character-set=utf8

my.cnf

4

これはDoctrine 2用であり、ZendCastsはBisnaを使用しているので、私はbelieveをconfiguration.iniファイルに追加するだけです)

resources.doctrine.dbal.connections.default.parameters.driverOptions.charset = "utf8"

固着しているかどうかをどのようにテストするか正確にはわかりませんが、お知らせください。

1
Jeremy Hicks

LoSoライブラリとDoctrine 2およびMySQLの場合

resources.doctrine2.connection.driverOptions.1002 = "SET NAMES 'UTF8'"

あなたのapplication.iniに

0
herrjeh42

このようなデフォルトのテーブル文字セットをutf8に設定できます。

// Create new Doctrine Manager instance
$doctrineManager = Doctrine_Manager::getInstance();

// Set charset to UTF8
$doctrineManager->setAttribute(
    Doctrine_Core::ATTR_DEFAULT_TABLE_CHARSET,
    'utf8'
);

引用:

bootstratpファイルの_initDoctrineメソッド?

はい。

0
Poru