Zend Framework 2 Access DB из пользовательской библиотеки

Я мигрирую проект с Zend Framework 1.4 на 2.4, у меня есть класс в «vendor / custom / classes / User.php»

<?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'); Может кто-нибудь подсказать мне, как я могу получить эти конфигурации из пользовательского класса. По сути, я пытаюсь написать набор классов, таких как «Пользователь», «Проект», «Клиент», вне моделей и использовать их во всех модулях, таких как CMS, Панель администратора, Веб-сайт. Ценю ваше руководство.

0

Решение

Подход может быть с использованием фабрики.

Вы создаете класс UserFactory implementing Zend\ServiceManager\FactoryInterface, Этот класс будет иметь метод createService с $serviceLocator параметр. Вы используете этот сервисный локатор, чтобы получить ваши зависимости и передать их вашему User учебный класс.

В вашем User класс, вам нужно использовать контроллер, который принимает в качестве параметров зависимости, которые вам нужно передать ему

0

Другие решения

Поскольку прямого доступа к этим конфигурациям нет. Я написал константы с информацией о доступе к БД в локальных и глобальных файлах php в config / autoload и использовал их в своем классе.

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);
}

}
0

По вопросам рекламы [email protected]