0

私はdoctrine2でzf2を学んでいます。

Doctrine2 エンティティはロジックを配置するのに適した場所ではないため、サービスのようなものを作成する必要があります。

src - Service で新しいカタログを作成しました。また、デフォルトで doctrine2 エンティティ マネージャーやその他の便利なものにアクセスできる abstractService クラスを作成すると考えました。

しかし、それを達成する方法がわかりません。オブジェクトマネージャーのインスタンスをインジェクションで渡す必要があるコンストラクターを作成しましたが、その方法がわかりません。見つかったすべての例はコントローラー用です。

誰かがそれを管理/整理する方法を教えてもらえますか?

解決策は見つかりませんでした。

4

1 に答える 1

0

doctrine.entitymanager.orm_defaultEighterまたは aliasを使用して、サービス マネージャーからデフォルトの教義エンティティ マネージャーを取得できますDoctrine\ORM\EntityManager

$serviceLocator->get('Doctrine\ORM\EntityManager');

ZF2 での依存性注入のベスト プラクティスは、サービス マネージャーに登録したサービス ファクトリを使用することです。これに関する情報はたくさんあります。

とにかく手順を説明します。

あなたのサービス

namespace MyNamespace
class MyService
{
    public function __construct(EntityManager $em)
    {
        $this->em = $em;
    }
}

Factoryで工場 を定義します。module.php

class Module
{
    public function getServiceConfig()
    {
        return array(
            'factories' => array(
                'MyNamespace\MyService' => function($serviceLocator) {
                    return new MyService($serviceLocator->get('Doctrine\ORM\EntityManager');
                }
            )
        );
    }
}

この例ではファクトリにクロージャを使用しましたが、専用のファクトリ クラスを使用することをお勧めします。

これで、完全に構成されたサービスをサービス マネージャーから取得できます。

$serviceManager->get('MyNamespace\MyService');

コントローラーでこのサービスを使用する場合は、上記と同じ方法で、このためのファクトリを定義する必要があります。小さな違いが 1 つだけあります。これは、すべてのコントローラーが個別の pluginManager (特定のタイプのクラスを作成する専用の serviceManager) によって管理されるためです。getControllerConfigmodule.phpのメソッドを使用して、コントローラ プラグイン マネージャでファクトリを定義できます。

これをmodule.phpに追加します

public function getControllerConfig()
{
    return array(
        'factories' => array(
            'MyNamespace\Controller\MyController' => function($serviceLocator)
            {
                $rootLocator = $serviceLocator->getServiceLocator();
                $service = $rootLocator->get('MyNamespace\MyService');
                return new MyController($service);
            }
        )
    );
}

お役に立てれば。

于 2013-10-26T20:49:14.090 に答える