Для тех, кто ищет учебник интеграции Doctrine 2 с CodeIgniter, этот вопрос и другие ответы устарели (для CI 2). Это новый учебник для CI 3 я сделал, и я проверил работает:
How to install Doctrine 2 in CodeIgniter 3
Я повторяю это здесь.
Установить Учение
Doctrine 2 ORM’s documentation - Installation and Configuration
Доктрина может быть установлен с Composer. Определить следующее требование в файле composer.json:
{
"require": {
"doctrine/orm": "*"
}
}
Затем вызовите композитор установки из командной строки.
Интеграция с CodeIgniter
Doctrine 2 ORM’s documentation - Integrating with CodeIgniter
Вот шаги: Добавить файл PHP в вашей системе/приложения/библиотеки папку под названием Doctrine.php. Это будет ваша обертка/бутстрап для менеджера сущности D2. Поместите папку Doctrine (ту, которая содержит Common, DBAL и ORM) внутри папки third_party. Если вы хотите, откройте свою конфигурацию/автозагрузку.PHP файл и автозагрузку ваша Доктрина библиотека: $autoload[‘libraries’] = array(‘doctrine’);
Создание библиотеки Учение CodeIgniter
Теперь, вот что ваш файл Doctrine.php должен выглядеть. Настройте его под свои нужды.
<?php
/**
* Doctrine 2.4 bootstrap
*
*/
use Doctrine\Common\ClassLoader,
Doctrine\ORM\Configuration,
Doctrine\ORM\EntityManager,
Doctrine\Common\Cache\ArrayCache,
Doctrine\DBAL\Logging\EchoSQLLogger;
class Doctrine {
public $em = null;
public function __construct()
{
// load database configuration from CodeIgniter
require_once APPPATH.'config/database.php';
// include Doctrine's ClassLoader class
require_once APPPATH.'third_party/Doctrine/Common/ClassLoader.php';
// load the Doctrine classes
$doctrineClassLoader = new ClassLoader('Doctrine', APPPATH.'third_party');
$doctrineClassLoader->register();
// load the entities
$entityClassLoader = new ClassLoader('Entities', APPPATH.'models');
$entityClassLoader->register();
// load the proxy entities
$proxiesClassLoader = new ClassLoader('Proxies', APPPATH.'models/proxies');
$proxiesClassLoader->register();
// load Symfony2 classes
// this is necessary for YAML mapping files and for Command Line Interface (cli-doctrine.php)
$symfonyClassLoader = new ClassLoader('Symfony', APPPATH.'third_party/Doctrine');
$symfonyClassLoader->register();
// Set up the configuration
$config = new Configuration;
// Set up caches
if(ENVIRONMENT == 'development') // set environment in index.php
// set up simple array caching for development mode
$cache = new \Doctrine\Common\Cache\ArrayCache;
else
// set up caching with APC for production mode
$cache = new \Doctrine\Common\Cache\ApcCache;
$config->setMetadataCacheImpl($cache);
$config->setQueryCacheImpl($cache);
// set up annotation driver
$driver = new \Doctrine\ORM\Mapping\Driver\PHPDriver(APPPATH.'models/Mappings');
$config->setMetadataDriverImpl($driver);
// Proxy configuration
$config->setProxyDir(APPPATH.'/models/Proxies');
$config->setProxyNamespace('Proxies');
// Set up logger
$logger = new EchoSQLLogger;
$config->setSQLLogger($logger);
$config->setAutoGenerateProxyClasses(TRUE); // only for development
// Database connection information
$connectionOptions = array(
'driver' => 'pdo_mysql',
'user' => $db['default']['username'],
'password' => $db['default']['password'],
'host' => $db['default']['hostname'],
'dbname' => $db['default']['database']
);
// Create EntityManager, and store it for use in our CodeIgniter controllers
$this->em = EntityManager::create($connectionOptions, $config);
}
}
Настройка Line Tool Command
Учение судов с рядом инструментов командной строки, которые очень полезны в процессе разработки.
Проверьте эти строки существует в файле Doctrine.php, загружать классы Symfony для использования инструментов командной строки (и для отображения файлов YAML):
$symfonyClassLoader = new ClassLoader('Symfony', APPPATH.'third_party/Doctrine');
$symfonyClassLoader->register();
Вы должны зарегистрировать приложения EntityManager к консольный инструмент для использования задач путем создания файла кли-doctrine.php в каталоге приложения со следующим содержанием:
<?php
/**
* Doctrine CLI bootstrap for CodeIgniter
*
*/
define('APPPATH', dirname(__FILE__) . '/');
define('BASEPATH', APPPATH . '/../system/');
define('ENVIRONMENT', 'development');
require APPPATH.'libraries/Doctrine.php';
$doctrine = new Doctrine;
$em = $doctrine->em;
$helperSet = new \Symfony\Component\Console\Helper\HelperSet(array(
'db' => new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper($em->getConnection()),
'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($em)
));
\Doctrine\ORM\Tools\Console\ConsoleRunner::run($helperSet);
?>
Теперь запустите этот скрипт через PHP из командной строки и должны увидеть список команд доступный для вас.
php cli-doctrine.php
Генерация классов отображения из базы данных:
php cli-doctrine.php orm:convert-mapping --from-database annotation models/Entities
, если вы получите эту ошибку: Фатальная ошибка: Вызов неопределенной функции Doctrine \ Common \ Cache \ apc_fetch() установить расширение APC для PHP:
sudo apt-get install php-apc
sudo /etc/init.d/apache2 restart
для режима производства вы хотите использовать систему реального кэширования, как APC, избавиться от EchoSqlLogger
, и выключить autoGenerateProxyClasses
в Doctrine.php
к сожалению, я сделал ошибку в моем первоначальном ответе. Я видел композитора.json в мастер-ветке, но не проверял, было ли это в 2.1-стабильной ветке. Я исправил это сейчас. –
Я все еще не совсем уверен, что делать с композитором. В доктрине есть файл json, но все. – Lance