如何从模型中得到的Zend \\ \\ Db的适配器实例? (ZF2)(How to get Z

2019-07-29 02:25发布

我创建用于管理数据库实体的抽象模型-我已经有EntityAbstractEntitySetAbstractManagerAbstract车型。 在我ManagerAbstract模型我需要Zend/Db/Adapter ,以便创建一个实例Zend\Db\TableGateway

我怎么能拉适配器的主要实例来我ManagerAbstract ? 在ZF1我可以用合适的词汇来实现这一点。

如果这不是在ZF2做事的正确方法,我很想听到正确的方法来这样的事情。

谢谢!

Answer 1:

使用依赖注入容器, 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:

<?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进行检索或注入映射到该服务,然后注入到服务要使用它的控制器(或其他服务)。



文章来源: How to get Zend\\Db\\Adapter instance from within a Model? (ZF2)