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);
}
}
我正在将一个项目从 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);
}
}