Как определить использование utf-8 в Doctrine 2 в Zend Framework application.ini при использовании Bisna
Следующий ZendCasts cast показывает способ использования доктрины 2 в среде среды zend.
Используя эту конфигурацию, как я могу заставить соединение использовать кодировку utf-8, чтобы произошло волшебство "SET NAMES 'utf8'"
?
То, что я действительно ищу, - это способ настроить его с помощью файла application.ini.
Если это невозможно, используя эту конфигурацию, как это можно сделать с помощью кода? a _initDoctrine
в файле Bootstratp?
Спасибо.
UPDATE
Появляется сообщение post connect, которое обрабатывает это, но я не вижу, как его настроить через application.ini(если возможно вообще).
Если нет, могу ли я настроить его с помощью метода начальной загрузки? Будет ли запущен метод bootstrap до запуска любого другого кода соединения доктрины, когда он будет полагаться на библиотеку Bisna?
Ответы
Ответ 1
отлично работает для меня
resources.doctrine.dbal.connections.default.parameters.driverOptions.1002 = "SET NAMES 'UTF8'"
1002
- целочисленное значение PDO::MYSQL_ATTR_INIT_COMMAND
:
Команда для выполнения при подключении к серверу MySQL. Будет автоматически повторно выполняться при повторном подключении. Обратите внимание: эта константа может использоваться только в массиве driver_options при построении нового дескриптор базы данных.
Ответ 2
Если вы не используете 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 = '...'
....
Ответ 3
это сработало для меня. 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(
1002 => 'SET NAMES utf8'
)
),
)
)
)
);
Ответ 4
Можно добавить его через application.ini, если вы используете ZendX_Doctrine2 (в https://github.com/mridgway/ZendX_Doctrine2) с MySQL.
Затем здесь нужна строка в application.ini:
resources.entitymanagerfactory.connectionOptions.driverOptions.1002 = "SET NAMES utf8"
(1002 == PDO:: MYSQL_ATTR_INIT_COMMAND)
Не забудьте правильно установить
default-character-set=utf8
в my.cnf
Ответ 5
Так как это для Doctrine 2, а ZendCasts использует Bisna, я считаю, вы можете просто добавить это в свой файл configuration.ini
resources.doctrine.dbal.connections.default.parameters.driverOptions.charset = "utf8"
Я не совсем уверен, как тестировать, придерживается ли он или нет, но сообщите нам.
Ответ 6
Вы можете установить набор символов по умолчанию, как это, для utf8:
// Create new Doctrine Manager instance
$doctrineManager = Doctrine_Manager::getInstance();
// Set charset to UTF8
$doctrineManager->setAttribute(
Doctrine_Core::ATTR_DEFAULT_TABLE_CHARSET,
'utf8'
);
Цитата:
метод _initDoctrine в файле Bootstratp?
Да.
Ответ 7
Для библиотеки LoSo и Doctrine 2 и MySQL добавьте
resources.doctrine2.connection.driverOptions.1002 = "SET NAMES 'UTF8'"
на ваш application.ini
Ответ 8
У меня это в моем бутстрапе:
protected function _initDoctrineLibrary()
{
require_once('Doctrine/Doctrine.php');
$this->getApplication()->getAutoloader()->pushAutoloader(array('Doctrine', 'autoload'),'Doctrine');
$manager = Doctrine_Manager::getInstance();
$manager->setAttribute(
Doctrine::ATTR_MODEL_LOADING,
Doctrine::MODEL_LOADING_CONSERVATIVE
);
$config = $this->getOption('doctrine');
$conn = Doctrine_Manager::connection($config['dsn'],'doctrine');
$conn->setAttribute(Doctrine::ATTR_USE_NATIVE_ENUM, true);
return $conn;
}
где в application.ini вы видите
doctrine.dsn = "mysql://user:[email protected]/databasename"
Я думаю, вы можете сделать что-то подобное