web-dev-qa-db-ja.com

Zend Framework 2 + Doctrine 2

Zend Frameworkでの開発を開始し、zf2を使用したいと思います。 Doctrine 2を使用しているので、zf2に統合するのに役立つチュートリアルを提案できますか?ありがとうございます!

41
flux

前回チェックした時刻:ZF2.2。*、DoctrineORMModule 0.7。

公式モジュール

Composerを介してDoctrineORMModuleをロードすることができます:

  • composer.jsondoctrine/doctrine-orm-moduleをrequireに追加します(フォーマットの問題のbcsをリストした後のサンプルコード)
  • php composer.phar installを実行します
  • ディレクトリ./data/DoctrineORMModule/Proxyを作成し、アプリケーションの書き込みアクセス権を確保します
  • configure doctrine アプリケーション経由/config/autoloadモジュールにプロジェクト固有の設定(データベースなど)を提供する
  • モジュールでDoctrineのエンティティマッピングを構成するconfig.php
  • プロジェクトにエンティティを追加する
  • DoctrineORMModuleDoctrineModuleconfig/application.config.phpに追加します
  • cliツールを実行して、テーブルを生成します./vendor/bin/doctrine-module orm:schema-tool:create

依存関係をインストールしてオートローダーをすべてセットアップする簡単な方法であるため、composerを使用しないことを強くお勧めします。また、ZF2はデフォルトでcomposerを介して出荷されます。

コード例

composer.json

{  
    "require" : {  
        "php": ">=5.3.3",  
        "zendframework/zendframework": "2.*"                
        "doctrine/doctrine-orm-module": "0.*"                
    }  
}  

エンティティ設定

<?php
return array(
    'doctrine' => array(
        'driver' => array(
            // defines an annotation driver with two paths, and names it `my_annotation_driver`
            'my_annotation_driver' => array(
                'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
                'cache' => 'array',
                'paths' => array(
                    'path/to/my/entities',
                    'another/path'
                ),
            ),

            // default metadata driver, aggregates all other drivers into a single one.
            // Override `orm_default` only if you know what you're doing
            'orm_default' => array(
                'drivers' => array(
                    // register `my_annotation_driver` for any entity under namespace `My\Namespace`
                    'My\Namespace' => 'my_annotation_driver'
                )
            )
        )
    )
);

注意すべき落とし穴:エンティティへのパスは完全に修飾する必要があります。 __DIR__から始めるのが最善です。それ以外の場合は問題が発生します(すべての新しいプロジェクトで、このエラーが見つかるまでコマンドラインツールが機能しないのはなぜでしょうか...;)

接続設定

<?php
return array(
    'doctrine' => array(
        'connection' => array(
            // default connection name
            'orm_default' => array(
                'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
                'params' => array(
                    'Host'     => 'localhost',
                    'port'     => '3306',
                    'user'     => 'username',
                    'password' => 'password',
                    'dbname'   => 'database',
                )
            )
        )
    ),
);

すべてのコード例は公式の一部ですdoctrineモジュールreadme

参考文献:

Marco Pivettaが doctorine-moduleの使用法に関するすばらしいプレゼンテーション を作成しました。これは、このモジュールを使用するすべての人に推奨します。

Jason Grimesがチュートリアルを書いた phpdeveloper.orgでフィーチャーされ、公式モジュールが存在する前に、Doctrineのインストールに役立つはずです。

53
Samuel Herzog

更新:

私はこれについて少し調査しましたが、Zend Framework 2のDoctrine 2のネイティブサポートはまだ開発中のようです。私はこれに目を光らせておく Github Gist 進行状況を監視することをお勧めします。

それまでは、Michiel Staessenのリポジトリ zf2-doctrine-provider をチェックアウトすることをお勧めします。まだドキュメントはありませんが、BsnaライブラリがZF 1.xでどのように機能するかを理解できれば、次のステップとしては論理的でしょう。

ZF2のDoctrineのネイティブサポートに関する議論のほとんどが柔軟性に焦点を当てていることを確認してください。 Zend FrameworkでのDoctrineの使用がどちらか一方の選択ではなく、堅固で柔軟なドメインモデルの特定の部分を構築するためのオプションであることは、私の希望(そして他の人もそうです)です。

元の投稿:

幸い、ZF 1.x + Doctrineを学ぶための主なリソースのほとんどは、ZF2への移行を考慮に入れていました。 ZF2のDoctrineのネイティブサポートについては説明していませんが、主な原則の多くを使い始めるのに役立つはずです。

Zendcastsには、「 nit Testing Doctrine 2 Entities 。」で始まる優れたDoctrine 2チュートリアルシリーズがあります。 Jon L.(発表者)がビデオを進めながらベストプラクティスを取り入れ続けたので、それに続くビデオも必ずご覧ください。

Zend Technologiesは、「 Zend Framework v1 + Doctrine v2 "というタイトルの決定的なウェビナーを開催しています。プレゼンターは、ZF2の移行に対応するためにサンプルアプリケーションをどのように構成したかを具体的に説明します。

ZF2のネイティブサポートについても、まだ何も見つかりません。 Rob Allenの有名な ZF2チュートリアル はZend\Dbを使用しており、Nick Belhommeの " Zend Framework 2.0 Cookbook 。"にはDoctrineのカバレッジはありません。

頑張って始めて、見つけた良いリソースをZF2/D2に投稿してください。

5
cantera