2

私はデータベースエンティティを管理するための抽象的なモデルを作成しています-私はすでにEntityAbstractEntitySetAbstractManagerAbstractモデルを持っています。ManagerAbstractモデルでは、Zend/Db/Adapterを作成するためにインスタンスが必要Zend\Db\TableGatewayです。

アダプタのメインインスタンスを自分の場所にプルするにはどうすればよいManagerAbstractですか?ZF1では、Zend_Registryを使用してこれを実現できました。

これがZF2で物事を行う正しい方法ではない場合、私はこの種のことへの正しい方法を聞きたいと思います。

ありがとう!

4

1 に答える 1

7

依存性注入コンテナを使用しZend\Diます。ZfcUserプロジェクトは、動作するコードを調べたい場合にこれを行います。

あるいは、基本的なアプローチは次のようなものです(コードはテストされていません!):

まず、データベース接続情報を挿入するようにDIを構成します。

config / autoload / local.config.php:

<?php
return array(
    'di' => array(
        'instance' => array(
        'Zend\Db\Adapter\Adapter' => array(
                'parameters' => array(
                    'driver' => 'Zend\Db\Adapter\Driver\Pdo\Pdo',
                ),
            ),
            'Zend\Db\Adapter\Driver\Pdo\Pdo' => array(
                'parameters' => array(
                    'connection' => 'Zend\Db\Adapter\Driver\Pdo\Connection',
                ),
            ),
            'Zend\Db\Adapter\Driver\Pdo\Connection' => array(
                'parameters' => array(
                    'connectionInfo' => array(
                        'dsn'            => "mysql:dbname=mydatabasename;host=localhost",
                        'username'       => 'myusername',
                        'password'       => 'mypassword',
                        'driver_options' => array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''),
                    ),
                ),
            ),
        ),
    ),
);

次に、モジュールのmodule.config.phpファイル内で、アダプターをマッパーに挿入します。

module / My / config / module.config.php:

<?php
return array(
    'di' => array(

            // some config info...

            'My\Model\ManagerAbstract' => array(
                'parameters' => array(
                    'adapter'  => 'Zend\Db\Adapter\Adapter',
                ),
            ),

            // more config info...
    )
);

最後に、ManagerAbstractクラスがインジェクションを受信できることを確認します。

module / My / src / My / Model / ManagerAbstract.php:

<?php
namespace My\Model;

use Zend\Db\Adapter\Adapter;
use Zend\Db\Adapter\AdapterAwareInterface;

abstract class ManagerAbstract implements AdapterAwareInterface 
{
    /**
     * @var Zend\Db\Adapter\Adapter
     */
    protected $adapter;

    // some code 

    public function setDbAdapter(Adapter $adapter)
    {
        $this->adapter = $adapter;
    }

    // some more code
}

サブクラスを使用するには、DICを介してサブクラスを取得するか、マッパーをサービスに挿入してから、使用するコントローラー(または他のサービス)にサービスを挿入する必要があることに注意してください。

于 2012-04-21T19:32:50.033 に答える