Как стать автором
Обновить

Интеграция Doctrine в kohana 3

Время на прочтение3 мин
Количество просмотров1.9K
Здравствуйте,

После выхода Kohana 3 хочется ее использовать в новых проектах, и использование Doctrine показало, что инструмент очень удобный, потому поделюсь рецептом интеграции.


Интеграция


Упаковываем модуль kohana так, чтоб структура была следующей.
xobb@dreamer: ~/public_html/ko3/modules/doctrine: tree -L 3
.
|-- init.php
`-- vendors
  `-- doctrine <<< Сюда ставим Doctrine, чтобы все выглядело именно так. удобно так же вцепить svn externals
   |-- Doctrine
   `-- Doctrine.php


Помещаем модуль в MODPATH и соответственно подключаем его в bootstrap.php:
Kohana::modules(array(

// 'kodoc' => MODPATH.'kodoc', // Kohana documentation
// 'database' => MODPATH.'database // Database module
// 'orm' => MODPATH.'orm', // Object Relationship Mapping
'auth' => MODPATH.'auth', // Authorization & Authentication
'pagination' => MODPATH.'pagination', // Paging of results
'image' => MODPATH.'image', // Image manipulation
'doctrine' => MODPATH.'doctrine', // Doctrine ORM
'core' => MODPATH.'core', // CMS core, must be loaded after doctrine but before all CMS modules
'userguide' => MODPATH.'userguide', // User guide
// 'paypal' => MODPATH.'paypal', // PayPal integration (not complete)
// 'todoist' => MODPATH.'todoist', // Todoist integration
// 'unittest' => MODPATH.'unittest', // Unit testing
// 'codebench' => MODPATH.'codebench', // Benchmarking tool
));


Вот так он у меня выглядит.

Теперь посмотрим в MODPATH/doctrine/init.php:
<?php defined('SYSPATH') or die('No direct script access.');
/* Doctrine integration */
require Kohana::find_file('vendors', 'doctrine/Doctrine');

/* Устанавливаем автолоадер для Doctrine */
spl_autoload_register(array('Doctrine', 'autoload'));

// Смотрим конфигурацию для соединения с базой данных для Doctrine
$db = Kohana::config('database')->doctrine;

// Позовите пожалуйста менеджера.
$manager = Doctrine_Manager::getInstance();

//Создаем соединения
$manager->connection('mysql://'.$db['user'].':'.$db['password'].'@'.$db['host'].'/'.$db['database'], 'default_connection');

// @see www.doctrine-project.org/documentation/manual/1_1/en/configuration
$manager->setAttribute(Doctrine::ATTR_MODEL_LOADING, Doctrine::MODEL_LOADING_CONSERVATIVE);
$manager->setAttribute(Doctrine::ATTR_VALIDATE, Doctrine::VALIDATE_ALL);
$manager->setAttribute(Doctrine::ATTR_DEFAULT_IDENTIFIER_OPTIONS, array('name' => '%s_id', 'type' => 'int', 'length' => 11));
$manager->setAttribute(Doctrine::ATTR_PORTABILITY, Doctrine::PORTABILITY_ALL);
$manager->setAttribute(Doctrine::ATTR_QUOTE_IDENTIFIER, true);
$manager->setAttribute(Doctrine::ATTR_EXPORT, Doctrine::EXPORT_ALL);
$manager->setAttribute(Doctrine::ATTR_TBLNAME_FORMAT, $db['prefix'].'_%s');
$manager->setAttribute(Doctrine::ATTR_AUTOLOAD_TABLE_CLASSES, true);

// Наши модели будут лежать в APPPATH.'models';
Doctrine::loadModels(APPPATH.'models');


Так же есть идея держать модели специфические для модуля в MODPATH/modulename/models. и соответственно добавлять в MODPATH/modulename/init.php

Doctrine::loadModels(MODPATH.'modulename/models');


Конфигурационный файл для базы даных:

<?php

return array(
'doctrine' => array(
'user' => 'username',
'password' => 'supersecretpasword',
'host' => 'localhost',
'database' => 'fancy_site',
'prefix' => 'wtfpl',
)
);


Бонус


А так же: драйвер для модуля auth. На домашнее задание можно сделать модели пользователя, роли и токена.

P.S.: так же есть украинская версия этого мануала.
Теги:
Хабы:
Всего голосов 27: ↑23 и ↓4+19
Комментарии36

Публикации

Истории

Ближайшие события

Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург