2

データベースエンティティを管理するための抽象モデルを作成しています - 私は既にEntityAbstractEntitySetAbstractManagerAbstractモデルを持っています。私のManagerAbstractモデルでは、Zend\Db\TableGatewayを作成するためにZend/Db/Adapterインスタンスが必要です。Model内からZend Db Adapterインスタンスを取得するには? (ZF2)

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

これがZF2での正しいやり方でない場合は、このようなことを正しく理解することが大好きです。

ありがとうございます!

答えて

7

依存性注入コンテナZend\Diを使用してください。 ZfcUserプロジェクトは、いくつかの作業コードを掘り下げたい場合にこれを行います。

代わりに、基本的なアプローチは、このようなものである(未テストコードが!):

まず:データベース接続情報注入するDIを設定:

設定/オートロードし/ 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.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クラスが注射を受けることができていることを確認します。

モジュール/マイ/ SRC /マイ/モデル/ ManagerAbstract.php:任意のサブクラスを使用するために、あなたはDIC経由で取得したり、サービスにマッパーを注入し、その後SERVICを注入する必要がある

<?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 
} 

注意eを使用したいコントローラ(または他のサービス)に入力します。

+0

すごい、すばらしい答えをありがとう!しかし、私はまだ把握できなかった問題を抱えています。 'Zend \ Db \ Adapter \ Adapter :: __ construct'のパラメータドライバのインスタンス/オブジェクトがありません - 何が問題なのでしょうか? –

+0

これは、DI構成がどこかで間違っていることを意味します。おそらくZend \ Db \ Adapter \ Adapterの定義の中にあります –

関連する問題