6

CodeIgniter の最新バージョンのインストールに成功し、基本的な MVC パターンが機能しています。私が気づいた問題は、CI では、クエリに関しては、準備済みステートメントが当然許可されていないことです。そこで、Doctrine 1 をGitHubからダウンロードすることにしました。私は Doctrine を初めて使用し、CI との統合に助けが必要だったので、このチュートリアルに従いました。

私のコントローラーの1つに、私は持っています

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

しかし、ブラウザでビューを読み込もうとすると、エラーの読み取りが表示されます

メッセージ: require_once(/Applications/MAMP/htdocs/CodeIgniter/application/libraries/Doctrine/Common/ClassLoader.php): ストリームを開くことができませんでした: そのようなファイルやディレクトリはありません

GitHub からダウンロードした Doctrine をさらに調べたところ、「common」というタイトルのフォルダがどこにもないように見えます。私はCI、特にDoctrineに非常に慣れていません。これを機能させるのに役立つアドバイスはありますか?また、Doctrine で PDO ドライバーの代わりに MySQLi ドライバーを使用することは可能ですか?

4

7 に答える 7

12

Doctrine ORM を GitHub から直接ダウンロードしても、他の依存関係は含まれません。これらはComposerによって管理されます。composer.json ファイルの中を見ると、これらの依存関係を確認できます。手動でインストールする場合は、次のとおりです。

  • 教義/共通
  • 教義/インフレクター
  • 教義/キャッシュ
  • 教義/コレクション
  • 教義/レクサー
  • 教義/注釈
  • 教義/dbal
  • symfony/コンソール

それがすべてだと思います。これらのファイルは、クラスの自動ロードに関するPSR-0 標準に従っているため、適切なディレクトリにマージする必要があります。

または、次の composer.json ファイルを使用して Doctrine 2 と Composer をインストールすると、その他の依存関係が自動的にインストールされます。次に、 CodeIgniter と統合します。

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

index.phpCodeIgniter コアを要求する前に、1 行を追加してオートローダー ファイルを含めることにより、CodeIgniter アプリのファイルを編集します。

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

require_once BASEPATH.'core/CodeIgniter.php';

また、Composer でインストールする場合は、この編集されたバージョンのブートストラップを の内容として使用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();
    }
}

注: CodeIgniter のバージョン 3 がリリースされると、Composer とともにインストールできるようになりますが、バージョン 2 はそうではありません。

于 2013-06-15T16:54:55.270 に答える
2

Doctrine 2 を CodeIgniter と統合するためのチュートリアルを探している場合、この質問と他の回答は古くなっています (CI 2 の場合)。これは、私が作成した CI 3 の新しいチュートリアルであり、動作していることを確認しました。

CodeIgniter 3 に Doctrine 2 をインストールする方法


ここで繰り返します。

ドクトリンをインストールする

Doctrine 2 ORM のドキュメント - インストールと構成

Doctrine はComposerでインストールできます。composer.json ファイルで次の要件を定義します。

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

次に、コマンド ラインから composer install を呼び出します。

CodeIgniter との統合

Doctrine 2 ORM のドキュメント - CodeIgniter との統合

手順は次のとおりです。Doctrine.php という名前の php ファイルを system/application/libraries フォルダーに追加します。これは、D2 エンティティ マネージャーのラッパー/ブートストラップになります。Doctrine フォルダー (Common、DBAL、および ORM を含むフォルダー) を third_party フォルダー内に配置します。必要に応じて、config/autoload.php ファイルを開き、Doctrine ライブラリを自動ロードします。$autoload[‘libraries’] = array(‘doctrine’);

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 には、開発中に非常に役立つ多くのコマンドライン ツールが同梱されています。

これらの行が Doctrine.php ファイルに存在するかどうかを確認して、コマンド ライン ツール (および YAML マッピング ファイル) を使用するための Symfony クラスをロードします。

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

以下の内容でアプリケーション ディレクトリに cli-doctrine.php ファイルを作成してタスクを利用するには、アプリケーションの 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 コマンドラインからこのスクリプトを実行すると、使用可能なコマンドのリストが表示されます。

php cli-doctrine.php

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

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

このエラーが発生した場合: Fatal error: Call to undefined function Doctrine\Common\Cache\apc_fetch() PHP の APC 拡張機能をインストールします。

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

プロダクション モードでは、APC のような実際のキャッシュ システムを使用し、 を取り除き、Doctrine.php でEchoSqlLoggerオフにする必要があります。autoGenerateProxyClasses

于 2015-10-31T22:56:40.583 に答える
1

CI https://github.com/mitul69/codeigniter-doctrine-integrationで教義統合のリンクを見つけ ます

于 2015-05-14T07:36:37.273 に答える
0

コード イグナイター 2では、コード構成が少し異なることに注意してください。コード イグナイター 2では、フォルダーの代わりにDoctrineフォルダーにフォルダーを配置することをお勧めします (そうしないと機能しません!)。application/third_partyapplication/libraries

詳細については、こちらをご覧ください。

于 2014-09-20T18:17:29.947 に答える
0

あなたはこれを使うことができます

composer 経由: composer create-project rbz/codeigniter your-project

git 経由: git clone https://github.com/dandisy/cihmvctwig.git

于 2016-02-10T04:02:18.933 に答える
0

doctrineユーザーガイドhttp://doctrine-orm.readthedocs.org/en/latest/cookbook/integrating-with-codeigniter.htmlからこのチュートリアルに従おうとしたときに同じ問題が発生しました

この問題は、composer 経由でインストールしようとしたときに発生するので、この Web サイト http://www.doctrine-project.org/downloads/にアクセスして、DoctrineORM-2.3.3-full.tar.gz バージョンを手動でダウンロードし、エラーはなくなりました。

于 2014-10-26T09:22:03.163 に答える