4

私はもともと、ベータ 1 中に ZF2 が DI を使用してテーブルに注入したことに関して、数か月前にこれについて別のスレッドを作成しましたが、当時はそれが実際には不可能であると考えていました。現在、ZF2 はバージョン 2.0.0 としてリリースされており、DI の代わりに ServiceManager がデフォルトになっています。リファクタリング中の同じ質問があると思います。

DbAdapter を挿入する必要がある 84 個のテーブルがあり、自分自身を複製しているので、より良い方法があるはずです。

public function getServiceConfig()
{
    return array(
        'factories' => array(
            'accountTable' => function ($sm) {
                $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                $table     = new Model\DbTable\AccountTable($dbAdapter);
                return $table;
            },
            'userTable' => function ($sm) {
                $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                $table     = new Model\DbTable\UserTable($dbAdapter);
                return $table;
            },
            // another 82 tables of the above
        )
    )
}

EventsManager と ServiceManager を使用すると、アプリケーションのインスタンス/リソースを取得する際の立場がわかりません。

ありがとう、ドム

4

3 に答える 3

2

このような多くのインジェクションでは、サービス マネージャーのイニタライザーを作成してから、DbAdapterAwareInterface のようなインターフェイスを実装するのが最善です。実際のアイデアを確認したい場合は、zf2 コード ベースの EventManagerAwareInterface を見てください。

于 2012-09-19T23:50:58.577 に答える
0

この種のファクトリ コードを自動生成および自動更新するために使用できるDiWrapperという ZF2 モジュールを作成しました。Zend\Db\Adapter\Adapterを共有インスタンスとして DiWrapperに提供する必要があります。その後、ServiceManager または DiWrapper を使用してテーブル クラスを取得できます。

于 2013-03-09T20:50:54.627 に答える
-1

本当に大丈夫です。php5.3+ は *ポインタまたは「リンク」のみを挿入します

于 2012-09-20T03:36:25.263 に答える