1

コンストラクター注入を使用する以外にDbAdapter、テーブル名を設定する別の方法はありますか?TableGateway

以下のクラスを拡張することでそれを実現しましたAbstractTableGatewayが、このロジックを最上位の構成に移動し、不要なので削除したいと考えています。

namespace Application\Repository;

use Zend\Db\TableGateway\AbstractTableGateway;
use Zend\Db\Adapter\AdapterAwareInterface;
use Zend\Db\Adapter\Adapter;

abstract class AbstractRepository extends AbstractTableGateway implements AdapterAwareInterface
{
    public function setDbAdapter(Adapter $adapter) {
        $this->table   = preg_replace('/.*\\\([a-zA-Z]+)Repository/', '$1', get_class($this));
        $this->table   = strtolower($this->table);
        $this->adapter = $adapter;
        $this->initialize();
    }
}
4

2 に答える 2

0

これを実現するためにサービス ファクトリを使用できます (完璧な例ではありません。私はドクトリンを使用していますが、ニーズに合わせて簡単に調整できます)。

https://gist.github.com/Spabby/6019494

于 2013-07-17T10:38:53.813 に答える
0

DIを使用できます。

'di' => array (
    'instance' => array (
        'Transifex\Gateway\Language' => array (
            'parameter' => array (
                'table' => 'translations_language',
                'adapter' => 'Zend\Db\Adapter\Adapter'
            )
        ),
    ),
),

'service_manager' => array (
    'factories' => array (
        'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory'
    )
),

'db' => array (
    'driver' => 'mysqli',
    'params' => array (
        'host' => 'something.dev',
        'port' => '3306',
        'user' => 'john',
        'password' => 'secret',
        'dbname' => 'primary'
    )
)

そしてコントローラーで:

$this->getServiceLocator ()->get ('Transifex\Gateway\Language');
于 2013-07-18T09:33:52.907 に答える