Doctrine + CodeIgniter

Nov 24, 2010 11:01

Вот как не лежала душа к этому фреймворку после полугода разработки, так и не лежит. Жизнь стала слегка веселее после подключения ряда написанных по принципу Симфони библиотек (Request, Response, Session, spGuard) и написания примитивной, но все же а-ля Симфони админки, но для счастья все равно не хватало ORM.

Слегка погуглив, остановил выбор на Doctrine: хотя раньше использовал Pear, она и в использовании легче, и подключать проще, и Symfony отдает Доктрине предпочтение, а значит, в случае чего проще будет снова включаться в работу с любимым фреймворком.

Из всех найденных инструкций наиболее толковой оказалась вот эта:

http://habrahabr.ru/blogs/codeigniter/41661/

Основные моменты:

1. Первым делом скачиваем последнюю версию Doctrine отсюда;

2. Копируем из скачанного архива содержимое директории lib в директорию system/database/doctrine/;

3. В директорию application/libraries мы помещаем файл doctrineORM.php со следующим кодом:


if (!defined('BASEPATH')) exit('No direct script access allowed');

/**
* Doctrine initialization class
*/
class DoctrineORM
{
function __construct() {
// Получаем конфиг базы данных
require_once(APPPATH . 'config/database.php');

// Создаем DSN из полученной инфы
$db['default']['dsn'] = $db['default']['dbdriver'] .
'://' . $db['default']['username'] .
':' . $db['default']['password'].
'@' . $db['default']['hostname'] .
'/' . $db['default']['database'];

// Подключаем Doctrine.php
require_once(BASEPATH . 'database/doctrine/Doctrine.php');

// Устанавливаем autoloader
spl_autoload_register(array('Doctrine', 'autoload'));

// Инициализируем соединение
Doctrine_Manager::connection($db['default']['dsn'], $db['default']['database']);

// Устанавливаем тип загрузки моделей в "conservative/lazy"
Doctrine_Manager::getInstance()->setAttribute('model_loading', 'conservative');

// Загружаем модели в autoloader
Doctrine::loadModels(APPPATH . 'models');
}
}

4. В корень нашего application помещаем файлы doctrine и doctrine.php

doctrine:

// Директории system и application относительно текущей
$sys_folder = '../';
$app_folder = '.';

include('doctrine.php');

doctrine.php:

define('BASEPATH', str_replace('\\', '/', $sys_folder) . '/');
define('APPPATH', str_replace('\\', '/', $app_folder) . '/');

require_once(APPPATH . 'libraries/doctrineORM.php');
new DoctrineORM();

// Конфигурируем "Doctrine Cli"
$config = array(
'data_fixtures_path' => APPPATH . '/fixtures',
'models_path' => APPPATH . '/models',
'migrations_path' => APPPATH . '/migrations',
'sql_path' => APPPATH . '/sql',
'yaml_schema_path' => APPPATH . '/schema'
);

$cli = new Doctrine_Cli($config);
$cli->run($_SERVER['argv']);

5. Создать в директории application поддиректории:
application/fixtures;
application/migrations;
application/schema;
application/sql.

6. Ввнести данные для соединения с СУБД в application/config/database.php.

7. Занести библиотеку doctrineORM в список автозагружаемых библиотек в конфигурационном файле application/config/autoloader.php

Пример:
$autoload['libraries'] = array('doctrineORM', 'session');

8. в config/autoload.php выключить «database» из списка загружаемых библиотек

***

Это основное. За более подробной информацией можно обратиться к самой статье, там еще много интересного.
Понадобилась минимальная докрутка, связанная в основном с путями к файлам, чтобы все заработало.

php, doctrine, codeignitor, чужие решения, мануалы, линки

Previous post Next post
Up