Похоже, что это можно сделать, прикрепив к Doctrine_Connection
объекту Doctrine_EventListener
методом postConnect()
.
Doctrine ORM для PHP - Создание нового слушателя
Что-то вроде:
class Kwis_Doctrine_EventListener_Timezone extends Doctrine_EventListener
{
protected $_timezone;
public function __construct($timezone = 'UTC')
{
$timezone = (string) $timezone;
$this->_timezone = $timezone;
}
public function postConnect(Doctrine_Event $event)
{
$conn = $event->getInvoker();
$conn->execute(sprintf("SET session time_zone = '%s';", $this->_timezone));
}
}
[Использование sprintf()
здесь, вероятно, любительское, ноЯ не мог понять, как сделать правильное связывание параметров.(смущенный смайлик).]
Тогда в моем приложении Bootstrap.php
у меня есть что-то вроде:
protected function _initDoctrine()
{
// various operations relating to autoloading
// ..
$doctrineConfig = $this->getOption('doctrine');
$manager = Doctrine_Manager::getInstance();
// various boostrapping operations on the manager
// ..
$conn = Doctrine_Manager::connection($doctrineConfig['dsn'], 'doctrine');
// various boostrapping operations on the connection
// ..
// Here's the good stuff: Add the EventListener
$conn->addListener(new Kwis_Doctrine_EventListener_Timezone());
return $conn;
}
[Одно немного не по теме примечание: на моей локальной машине разработки я держалнатолкнулся на ошибку MySQL, в которой часовой пояс, в который я не вошел, не был принят.Оказывается, что стандартная установка MySQL создает все таблицы часовых поясов в базе данных mysql
, но фактически не заполняет их;вам нужно заполнить их отдельно.Больше информации на сайте MySQL .]