Doctrine 2 ORMをSilexに固定します

最近、私は壮大なSilexマイクロフレームワークについて学び、同時にORMモデルについても学びました。 チュートリアルは、一方を他方に接続する場合に役立ちます。

Silexは、 Symfony 2およびPimpleコンポーネント上に構築された軽量で拡張可能なマイクロフレームワークです

Doctrine-直接ではなく、通常のオブジェクトを介してデータベースを操作できるORMエンジン。

この記事はこれに基づいて書かれていますが、翻訳ではありません。

さて、一方を他方に接続してみましょう。 Composerを使用してライブラリをインストールします。



composer.json



依存関係を定義する



 { "minimum-stability": "dev", "require": { "php": ">=5.3.3", "silex/silex": "1.*", "taluu/doctrine-orm-provider": "1.0.*" }, "config": { "bin-dir": "bin" } }
      
      





configフィールドを説明する価値があります。 その中で、Composerがコンソールで実行されるファイルへのショートカット(エイリアス)を作成する場所を示します。

composer install



実行します



アプリケーションコードを追加



プロジェクトのルートで、アプリケーションフォルダーapp/src



または他の任意のフォルダーを作成します。 パターンに従って (これはインストールできる方法ですが、私はしませんでした)私はsrc



を呼び出しました。

次のコードをindex.php



追加します。

 // index.php <?php $app = require __DIR__.'/src/app.php'; $app->run();
      
      





ここで、$ appでアプリケーションをアンロードして起動します。

app.phpの内部:

 // src/app.php <?php require __DIR__.'/../vendor/autoload.php'; $app = new Silex\Application(); $app['debug'] = true; require __DIR__.'/registers.php'; require __DIR__.'/controllers.php'; return $app;
      
      





そして、Composerによって作成されたクラスオートローダーを接続し、アプリケーションを作成して構成します。

controllers.phpでは、コントローラーのロジックを記述します:$ app-> get()、$ app-> error()など。

Registers.phpに興味があります:

 // src/registers.php <?php use Doctrine\Common\Cache\ApcCache; use Doctrine\Common\Cache\ArrayCache; $app->register(new Silex\Provider\DoctrineServiceProvider(), array( 'db.options' => array(//   DBAL : http://silex.sensiolabs.org/doc/providers/doctrine.html 'driver' => 'pdo_mysql', 'dbname' => 'silex_test', 'host' => '127.0.0.1', 'user' => 'root', 'password' => 'root', 'charset' => 'utf8' ) )); $app->register(new Nutwerk\Provider\DoctrineORMServiceProvider(), array( 'db.orm.proxies_dir' => __DIR__.'/../cache/doctrine/proxy', 'db.orm.proxies_namespace' => 'DoctrineProxy', 'db.orm.cache' => !$app['debug'] && extension_loaded('apc') ? new ApcCache() : new ArrayCache(), 'db.orm.auto_generate_proxies' => true, 'db.orm.entities' => array(array( 'type' => 'annotation', //     Entity 'path' => __DIR__, // ,    'namespace' => 'TestApp\Entity', //   )), ));
      
      





指定されたネームスペースに従って、この場合、ディレクトリを作成します。

src/TestApp



およびsrc/TestApp/Entity







Doctrineコンソール管理をセットアップする





bin



Composerのおかげで、Doctrineのコンソールツール(以下、単にコンソール)のコードをわずかに変更する必要があります。

コンソールとアプリケーションをリンクするには、 cli-config.php



設定します。 最初、このファイルはvendor/doctrine/orm/tools/sandbox



、そこからbin



コピーします。 ここで、 $helpers



の作成を除くすべてを削除します。

すべてのリモートコードは、アプリケーション用に構成したものを作成および構成しました。 では、なぜこれを使用しないのでしょうか?

 // bin/cli-config.php <?php $app = require __DIR__.'/../src/app.php'; $em = $app['db.orm.em']; $helpers = 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) ));
      
      





ここで、 $app['db.orm.em']



を使用してアプリケーションで作業することを追加する価値があります。 $app['db.orm.em']



からEntityManagerのコピーを取得できます$app['db.orm.em']





これらの設定の接続オプション:


  1. 正しいオプションではありません、これをしないでください:

    bin / doctrine.phpを修正します:

      $configFile = getcwd() . DIRECTORY_SEPARATOR . 'bin/cli-config.php'; // 21 
          
          





    これは、プロジェクトのルートにcli-config.phpを配置することではできませんでした。 一方では、ライブラリのコードを編集するのは正しくありませんが、他方では便利です。
  2. 別のより正確な方法に進むことができます-独自のコンソールを作成し、設定を自分で接続します。

     // bin/console #!/usr/bin/env php <?php require 'cli-config.php'; include('doctrine.php');
          
          





    ここで、bin / consoleを実行し、プロジェクトルートから開始する権限を与える必要があります。

     ./bin/console [command_name]
          
          





このトピックについて他に読むべきこと:

Doctrineのロシア語ドキュメント

Doctrine ORM英語ドキュメント

UPD:githubに、silexおよびdoctrine ormのアプリケーションフレームワークと共にリポジトリを追加しました。 確かに、ORMには別のプロバイダーが使用されます



All Articles