2

私のサイトの接続された各メンバーには、データベースがあります。「user_1」の教義構成は次のとおりです。

return array(
'doctrine' => array(
    'connection' => array(
        'orm_default' => array(
            'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
            'params' => array(
                'host'     => 'localhost',
                'port'     => '3306',
                'user'     => 'user_1',
                'password' => 'psswd_user_1',
                'dbname'   => 'database_user_1',
                'charset' => 'utf8',
                'driverOptions' => array (1002 => 'SET NAMES utf8'),
            )),),),);

user_x の 'user_1'、'psswd_user_1'、および 'database_user_1' を 'user_x'、'psswd_user_x'、および 'database_user_x' に置き換える方法はありますか?

私はそれを行う方法がわかりません! ユーザーごとに同じコードをコピーするのは避けたい...

ご協力ありがとう御座います

4

2 に答える 2

1

これを行う適切な方法は、接続の作成時に必要な構成を挿入することです。それを行うためにフックできるイベントが見つからなかったため、オーバーライドする適切なサービス マネージャー キーを見つける必要があります。

ソースコードを少し掘り下げたところ、これらのオプションがDoctrineORMModule\Options\DBALConnectionインスタンスに送信され、このインスタンスがによって作成されていることがわかりました。DoctrineORMModule\Service\DBALConnectionFactory

このファクトリを次のようにオーバーライドする必要があります。

<?php
namespace MyModule\Service;
use DoctrineORMModule\Service\DBALConnectionFactory;
use Zend\ServiceManager\ServiceLocatorInterface;

class MyDBALConnectionFactory extends DBALConnectionFactory
{

    public function getOptions(ServiceLocatorInterface $sl, $key, $name = null)
    {
        $options = parent::getOptions($sl, $key, $name);

        // override for everyone that needs a DBALConnection
        if ($this->getOptionClass() === 'DoctrineORMModule\Options\DBALConnection') {

             // set custom parameters here
             // maybe fetch the current user with $sl->get('...')
             $params = [/* ... */];
             $options->setParams($params);
        }

        return $options;
    }
}

そして、サービス マネージャーに次のように伝えます。

<?php 
return [
    ...
    'doctrine' => [
        'doctrine_factories' => [
            'connection' => 'MyModule\Service\DBALConnectionFactory',
        ]
    ]
    ...
];
于 2016-01-18T23:55:42.547 に答える