Интегрирующая доктрина c CodeIgniter

Я успешно установил последнюю версию CodeIgniter и имею базовый шаблон MVC. Проблема, которую я заметил, заключается в том, что CI, естественно, не допускает подготовленных операторов, когда дело доходит до запросов. Итак, я решил загрузить доктрину 1 из GitHub. Я очень новичок в доктрине и нуждался в некоторой помощи, интегрируя ее с CI, поэтому я последовал этому учебник.

в одном из моих контроллеров, у меня есть

$this->load->library('doctrine');
$this->em = $this->doctrine->em;

но, когда я перейдите, чтобы загрузить представление в моем браузере, меня приветствуют с ошибкой чтения

сообщение: require_once(/Applications/MAMP/htdocs/CodeIgniter/application/libraries/Doctrine/Common/ClassLoader.в PHP): не удалось открыть поток: нет такого файла или каталога

после дальнейшего изучения загрузки доктрины из GitHub, там даже не кажется, что есть папка под названием "common" где-либо там. Я очень новичок в CI и особенно в Doctrine. У кого-нибудь есть совет, который может помочь мне заставить это работать? Кроме того, можно ли использовать драйвер MySQLi вместо PDO с доктриной?

7 ответов


загрузка доктрины ORM прямо из GitHub не включает в себя другие зависимости. Они управляются композитор. Если заглянуть внутрь композитора.файл json вы можете увидеть эти зависимости. Если вы хотите установить их вручную, они являются:

  • учение/общие
  • учение/инфлектора
  • учение/кэш
  • учение/коллекции
  • учение/лексер
  • учение/аннотации
  • учение/dbal
  • symfony / консоль

Я считаю, что это все. Вам придется объединить эти файлы в соответствующих каталогах, как они следуют PSR-0 стандарты для автозапуска занятия.

кроме того, установите Doctrine 2 с Composer со следующим композитором.файл json и любые другие зависимости будут установлены автоматически. Тогда интеграция с CodeIgniter.

{
    "minimum-stability": "stable",
    "require": {
        "doctrine/orm": "2.3.*"
    }
}

редактировать index.php файл вашего приложения CodeIgniter, добавив одну строку, чтобы включить файл автозапуска, прежде чем требовать ядро CodeIgniter.

require_once BASEPATH.'../vendor/autoload.php';

require_once BASEPATH.'core/CodeIgniter.php';

также при установке с Composer используйте эту отредактированную версию bootstrap в качестве содержание application/libraries/Doctrine.php, что и сработало для меня

<?php

use Doctrine\Common\ClassLoader,
    Doctrine\ORM\Tools\Setup,
    Doctrine\ORM\EntityManager;

class Doctrine
{
    public $em;

    public function __construct()
    {
        // Load the database configuration from CodeIgniter
        require APPPATH . 'config/database.php';

        $connection_options = array(
            'driver'        => 'pdo_mysql',
            'user'          => $db['default']['username'],
            'password'      => $db['default']['password'],
            'host'          => $db['default']['hostname'],
            'dbname'        => $db['default']['database'],
            'charset'       => $db['default']['char_set'],
            'driverOptions' => array(
                'charset'   => $db['default']['char_set'],
            ),
        );

        // With this configuration, your model files need to be in application/models/Entity
        // e.g. Creating a new Entity\User loads the class from application/models/Entity/User.php
        $models_namespace = 'Entity';
        $models_path = APPPATH . 'models';
        $proxies_dir = APPPATH . 'models/Proxies';
        $metadata_paths = array(APPPATH . 'models');

        // Set $dev_mode to TRUE to disable caching while you develop
        $config = Setup::createAnnotationMetadataConfiguration($metadata_paths, $dev_mode = true, $proxies_dir);
        $this->em = EntityManager::create($connection_options, $config);

        $loader = new ClassLoader($models_namespace, $models_path);
        $loader->register();
    }
}

Примечание: версия 3 CodeIgniter при выпуске будет устанавливаться с помощью Composer, но версия 2-нет.


для тех, кто ищет учебник для интеграции доктрины 2 с CodeIgniter, этот вопрос и другие ответы устарели (для CI 2). Это новый учебник для CI 3, который я сделал, и я проверил, работает:

Как установить доктрину 2 в CodeIgniter 3


Я повторяю это здесь.

Установить Доктрину

Doctrine 2 ORM документация - установка и Конфигурация

доктрина может быть установлен с композитор. Определите следующее требование в вашем composer.файл json:

{
    "require": {
        "doctrine/orm": "*"
    }
}

затем вызовите composer install из командной строки.

интеграция с CodeIgniter

Doctrine 2 ORM документация-интеграция с CodeIgniter

вот шаги: Добавление файла php в систему / приложение / библиотеки папка называется Doctrine.РНР. Это будет ваша оболочка / bootstrap для диспетчера сущностей D2. Поместите папку Doctrine (ту, которая содержит Common, DBAL и ORM) внутри папки third_party. Если вы хотите, откройте config / autoload.php-файл и автоматическая загрузка вашей библиотеки доктрин:$autoload[‘libraries’] = array(‘doctrine’);

создание вашей библиотеки CodeIgniter доктрины

Теперь, вот что ваше учение.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);
  }
}

настройка инструмента командной строки

доктрина поставляется с рядом инструментов командной строки, которые очень полезны во время разработки.

Проверьте, существуют ли эти строки в доктрине.php файл, чтобы загрузить классы Symfony для использования инструментов командной строки (и для файлов сопоставления YAML):

$symfonyClassLoader = new ClassLoader('Symfony', APPPATH.'third_party/Doctrine');
$symfonyClassLoader->register();

необходимо зарегистрировать EntityManager приложений в инструменте консоли, чтобы использовать задачи путем создания а Кинк-учение.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 в доктрине.в PHP


найдите ссылку для интеграции доктрины в CI https://github.com/mitul69/codeigniter-doctrine-integration


обратите внимание:код воспламенителя 2 имеет небольшую разницу в своей организации кода. В код воспламенителя 2 лучше поставить на


У меня была такая же проблема, когда я пытался следовать этому руководству пользователя doctrine http://doctrine-orm.readthedocs.org/en/latest/cookbook/integrating-with-codeigniter.html

эта проблема возникает, когда я пытался установить через composer, поэтому я пошел на этот веб-сайт http://www.doctrine-project.org/downloads/ и вручную загрузите DoctrineORM-2.3.3-full.смола.версия gz и ошибка исчезли.


проблема оригинального плаката, похоже, связана с автозапуском. Мне была представлена аналогичная проблема при попытке настроить CodeIgniter и Doctrine с Composer. В CodeIgniter 3 Вы можете включить автоматическую загрузку composer, что позволит вам правильно загружать все файлы доктрины. Вы должны указать свой композитор поставщика dir для приложения/поставщика для этой работы. Вы также можете сделать это в более старых версиях, но затем вы должны вручную включить файл автозапуска Composer в свой Файл библиотеки доктрины для CodeIgniter. Если вам нужна дополнительная информация: я написал сообщение в блоге, описывающее, как это сделать. http://blog.beheist.com/integrating-codeigniter-and-doctrine-2-orm-with-composer/


вы можете использовать этот

via composer : composer create-project rbz/codeigniter ваш-проект

через git : git clone https://github.com/dandisy/cihmvctwig.git