Zend Framework 2 从自定义库访问数据库

Zend Framework 2 Access DB from Custom Library

我正在将一个项目从 Zend Framework 1.4 迁移到 2.4,我在 "vendor/custom/classes/User.php"

中有一个 class
<?php

namespace Classes;

use Zend\Db\TableGateway\TableGateway;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use Zend\Db\Adapter\Adapter;

class User 
{
    public function getItemById($id)
    {
        //$config = $this->getServiceLocator()->get('config');
        //This only work in controller
        $configs = array();
        $adapter = new Adapter($configs);


        $projectTable = new TableGateway('project', $adapter);
        $rowset = $projectTable->select(array('type' => 'PHP'));

        echo 'Projects of type PHP: ';
        foreach ($rowset as $projectRow) {
             echo $projectRow['name'] . PHP_EOL;
        }
    }
}

?>  

我需要在 "config/autoload"、global.php 和 local.php 中的文件中加载合并配置。 $config = $this->getServiceLocator()->get('config'); 谁能指导我如何从自定义 class 中获取这些配置。基本上我想做的是在模型之外编写一组 class 类,如用户、项目、客户,并在所有模块(如 CMS、管理面板、网站)中普遍使用它们。感谢您的指导。

一种方法可能是使用工厂。

您创建了一个 class UserFactory implementing Zend\ServiceManager\FactoryInterface。此 class 将有一个带有 $serviceLocator 参数的方法 createService。您使用此服务定位器检索您的依赖项并将它们传递给您的 User class.

在您的 User class 中,您需要使用一个控制器,该控制器接受您需要传递给它的依赖项作为参数

因为无法直接访问这些配置。我在 config/autoload 的本地和全局 php 文件中编写了带有数据库访问信息的常量,并在我的 class.

中使用了它
class DBManager 
{
    protected $adapter ;
    protected $connection ;

    /** 
    * Constructor 
    */ 
    public function __construct() 
    {
        $configs = array(
            'hostname' => DB_SERVER_NAME,
            'driver' => 'Pdo_Mysql',
            'database' => DB_DATABASE_NAME,
            'username' => DB_USER_NAME,
            'password' => DB_PASSWORD ,
         );

        $this->adapter = new Adapter($configs);
    }

}