次の ZendCasts cast は、zendフレームワーク環境でdoctrine 2を使用する方法を示しています。
この構成を使用して、接続にutf-8文字セットを使用して、"SET NAMES 'utf8'"
起こります ?
私が本当に探しているのは、application.iniファイルを使用して構成する方法です。
この構成を使用してそれが不可能な場合、コードでこれをどのように行うことができますか? _initDoctrine
Bootstratpファイルのメソッド?
ありがとうございました。
[〜#〜]更新[〜#〜]
これを処理する接続後のイベントがあるようですが、application.iniを介してそれを設定する方法がわかりません(可能な場合)。
そうでない場合、bootstrapメソッドを使用して設定できますか?bootstrapメソッドは他のdoctrine Bisnaライブラリに依存している場合、接続コードが実行されますか?
私にとってはうまくいきます
resources.doctrine.dbal.connections.default.parameters.driverOptions.1002 = "SET NAMES 'UTF8'"
1002
は PDO::MYSQL_ATTR_INIT_COMMAND
:
MySQLサーバーに接続するときに実行するコマンド。再接続時に自動的に再実行されます。この定数は、新しいデータベースハンドルを作成するときに、driver_options配列でのみ使用できます。
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 = '...'
....
_
これでうまくいきました。 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'
)
),
)
)
)
);
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
これはDoctrine 2用であり、ZendCastsはBisnaを使用しているので、私はbelieveをconfiguration.iniファイルに追加するだけです)
resources.doctrine.dbal.connections.default.parameters.driverOptions.charset = "utf8"
固着しているかどうかをどのようにテストするか正確にはわかりませんが、お知らせください。
LoSoライブラリとDoctrine 2およびMySQLの場合
resources.doctrine2.connection.driverOptions.1002 = "SET NAMES 'UTF8'"
あなたのapplication.iniに
このようなデフォルトのテーブル文字セットを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メソッド?
はい。