2015-10-19 12 views

答えて

4

はDoctrineはComposerでインストールすることができ教義

Doctrine 2 ORM’s documentation - Installation and Configuration

をインストールします。 は、あなたのcomposer.jsonファイルで以下の要件を定義します。

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

その後、あなたのコマンドラインから作曲をインストール呼び出します。ここで

Doctrine 2 ORM’s documentation - Integrating with CodeIgniter

CodeIgniterの

との統合

は手順です。 はDoctrine.phpというフォルダ、システム/アプリケーション/ライブラリにPHPファイルを追加します。これは、D2エンティティマネージャのラッパー/ブートストラップになります。 thirdtpartyフォルダ内にDoctrineフォルダ(Common、DBAL、およびORMを含むフォルダ)を配置します。 したい場合は、あなたのconfig/autoload.phpファイルと自動ロードはDoctrineのライブラリを開きます。$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); 
    } 
} 

開発中に非常に有用であるコマンドラインツールの数と

Doctrineの船は、コマンドラインツールを設定します。これらの行は、コマンドラインツールを使用するためのsymfonyのクラスをロードするために、Doctrine.phpファイルに存在する(とYAMLマッピングファイルのための)場合

チェック:

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

あなたはのEntityManagerにアプリケーションを登録する必要があります

<?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のコマンドラインからこのスクリプトを実行し、コマンドの一覧が表示されます。以下の内容でアプリケーションディレクトリでCLI-doctrine.phpファイルを作成することで、タスクを利用するコンソールツールご利用いただけます。

php cli-doctrine.php 

データベースからマッピングクラスを生成します。

php cli-doctrine.php orm:convert-mapping --from-database annotation models/Entities 

あなたはこのエラーが出る場合: 致命的なエラー:)(未定義の機能教義\共通\キャッシュ\のapc_fetchに呼び出し APCの拡張機能をインストールPHPの場合:

sudo apt-get install php-apc 
sudo /etc/init.d/apache2 restart 

生産モードあなたがCI3 + HMVC + Doctrineに対してDoctrine.php

+0

次の手順に従いますと動作しません... Doctrine 2.4とCodeIgniter 3.1.4。 – omixam

1

に、APCのような本当のキャッシュシステムを使用したいと思うEchoSqlLoggerを取り除く、とautoGenerateProxyClassesをオフに2.4

<?php 

use Doctrine\Common\Annotations\AnnotationReader; 
use Doctrine\Common\Cache\ArrayCache; 
use Doctrine\Common\ClassLoader; 
use Doctrine\Common\EventManager; 
use Doctrine\DBAL\Event\Listeners\MysqlSessionInit; 
use Doctrine\DBAL\Logging\EchoSQLLogger; 
use Doctrine\ORM\Configuration; 
use Doctrine\ORM\EntityManager; 
use Doctrine\ORM\Mapping\Driver\AnnotationDriver; 
use Doctrine\ORM\Tools\SchemaTool; 
use Gedmo\Sluggable\SluggableListener; 
use Gedmo\Timestampable\TimestampableListener; 
use Gedmo\Tree\TreeListener; 

class Doctrine 
{ 

    public $em = null; 
    public $tool = null; 

    public function __construct() 
    { 

     // Is the config file in the environment folder? 
     if (!defined('ENVIRONMENT') OR !file_exists($file_path = APPPATH . 'config/' . ENVIRONMENT . '/database.php')) { 
      $file_path = APPPATH . 'config/database.php'; 
     } 
     // load database configuration from CodeIgniter 
     require $file_path; 


     // Set up class loading. You could use different autoloaders, provided by your favorite framework, 
     // if you want to. 
     require_once APPPATH . 'vendor/doctrine/common/lib/Doctrine/Common/ClassLoader.php'; 

     $doctrineClassLoader = new ClassLoader('Doctrine', APPPATH . 'libraries'); 
     $doctrineClassLoader->register(); 
     $entitiesClassLoader = new ClassLoader('models', rtrim(APPPATH, "/")); 
     $entitiesClassLoader->register(); 
     $proxiesClassLoader = new ClassLoader('Proxies', APPPATH . 'proxies'); 
     $proxiesClassLoader->register(); 


     foreach (glob(APPPATH . 'modules/*', GLOB_ONLYDIR) as $m) { 
      $module = str_replace(APPPATH . 'modules/', '', $m); 
      $loader = new ClassLoader($module, APPPATH . 'modules'); 
      $loader->register(); 
     } 


     $evm = new EventManager; 
     // timestampable 
     $evm->addEventSubscriber(new TimestampableListener); 
     // sluggable 
     $evm->addEventSubscriber(new SluggableListener); 
     // tree 
     $evm->addEventSubscriber(new TreeListener); 


     // Set up caches 
     $config = new Configuration; 
     $cache = new ArrayCache; 
     $config->setMetadataCacheImpl($cache); 
     $driverImpl = $config->newDefaultAnnotationDriver(array(APPPATH . 'models/Entities')); 
     $config->setMetadataDriverImpl($driverImpl); 
     $config->setQueryCacheImpl($cache); 

     $config->setQueryCacheImpl($cache); 

     // Proxy configuration 
     $config->setProxyDir(APPPATH . '/proxies'); //must be set to 777 
     $config->setProxyNamespace('Proxies'); 

     // Set up logger 
     $logger = new EchoSQLLogger; 
     $config->setSQLLogger($logger); 


     if (ENVIRONMENT == "development") { 
      $config->setAutoGenerateProxyClasses(true); 
     } else { 
      $config->setAutoGenerateProxyClasses(false); 
     } 


     // Database connection information 
     $connectionOptions = array(
      'driver' => 'pdo_mysql', 
      'user' => $db[$active_group]['username'], 
      'password' => $db[$active_group]['password'], 
      'host' => $db[$active_group]['hostname'], 
      'dbname' => $db[$active_group]['database'] 
     ); 

     // Create EntityManager 
     $this->em = EntityManager::create($connectionOptions, $config); 


     // Force UTF-8 
     $this->em->getEventManager()->addEventSubscriber(new MysqlSessionInit('utf8', 'utf8_unicode_ci')); 

     // Schema Tool 
     $this->tool = new SchemaTool($this->em); 

    } 
} 
関連する問題