2

ZF2 では、次のように複数のアダプタを構成することができましたmodule.config.php

'db' => array(
    'adapters'=>array(
        'db1' => array(
            'driver' => 'Pdo',
            'dsn' => 'mysql:dbname=zf2;host=localhost',
            'driver_options' => array(
                PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
            ),
            'username' => 'zf2',
            'password' => 'zf2test',
        ),
        'db2' => array(
            'driver' => 'Pdo',
            'dsn' => 'mysql:dbname=zf1;host=localhost',
            'driver_options' => array(
                PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
            ),
            'username' => 'zf1',
            'password' => 'zf1test',
        ),
    )

),

コントローラー ファクトリでは、ServiceManager 経由で取得できます。

class AlbumControllerFactory implements FactoryInterface
{

public function createService(ServiceLocatorInterface $serviceLocator)
    {
        $albumTable = $serviceLocator->getServiceLocator()->get('Album\Model\AlbumTable');
        $db1Adapter = $serviceLocator->getServiceLocator()->get('db1');
        $db2Adapter = $serviceLocator->getServiceLocator()->get('db2');

        return new AlbumController($albumTable, $db1Adapter, $db2Adapter);
    }
}

今、私は Zend Framework 3 で同じことをしようとしていますが、このネストされた配列構成は機能しません:

Fatal error: Uncaught exception 'Zend\Db\Adapter\Exception\InvalidArgumentException' with message 'createDriver expects a "driver" key to be present inside the parameters' in /var/www/USER/teckert/zf3/vendor/zendframework/zend-db/src/Adapter/Adapter.php:262

ZF 2 ではadapters、dbAdapter がドライバーを作成しようとしているときにキーが既に処理されていると思いますが、これは ZF 3 では発生していません。

どんなヒントでも大歓迎です...

アダプターセクションを含む zend-dbのマニュアルは、私にとって十分に明確ではありませんでした

編集

このドキュメントによると、次のスニペットをグローバル構成ファイルに追加しました。

'service_manager' => [
    'abstract_factories' => [
        \Zend\Db\Adapter\AdapterAbstractServiceFactory::class,
    ],
],

$container->get('db1')でdbAdapter を取得しようとすると、AlbumTableFactory次のエラーが発生します。

Unable to resolve service "db1 to a factory; are you certain you provided it during configuration?
4

2 に答える 2

2

ServiceManager 構成Zend\Db\Adapter\AdapterAbstractServiceFactoryの配列に追加したことを確認してください。abstract_factoriesこの抽象ファクトリは、個々のデータベース アダプタのインスタンス化を担当します。また、Album\Model\AlbumTableファクトリがデータベース アダプタを正しい名前で取得するかどうかを確認します。

于 2016-07-22T16:31:10.963 に答える