Для вызова вашей фабрики вам нужно использовать Service Manager, чтобы получить службу MasterModel
там, где вам нужно ее использовать, например, на другой фабрике.Например:
class SomethingFactory implements FactoryInterface
{
public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
{
$masterModel = $container->get(\sf\ZfCommons\Model\MasterModel::class);
// then do something with $masterModel, like inject it into something else
return new Something($masterModel);
}
}
Кроме того, ZF имеет встроенную фабрику абстрактных адаптеров БД, которая может создавать оба адаптера для вас без необходимости создания класса MasterModel и его фабрики.Это предполагает, что вы создаете приложение MVC.
В вашем config/autoload/local.php
или config/autoload/global.php
добавьте следующее:
'db' => [
'adapters' => [
'dbSys' => [
'charset' => 'utf8',
'database' => 'db1',
'driver' => 'Pdo_Mysql',
'username' => 'username',
'password' => 'password',
'hostname' => 'localhost',
],
'dbClient' => [
'charset' => 'utf8',
'database' => 'db2',
'driver' => 'Pdo_Mysql',
'username' => 'username',
'password' => 'password',
'hostname' => 'localhost',
],
],
],
В вашем module.config.php
(хотя это будетлучше указать это в config/autoload/global.php
), вы можете добавить следующие строки:
...
'service_manager' => [
'factories' => [
'dbSys' => \Zend\Db\Adapter\AdapterAbstractServiceFactory::class,
'dbClient' => \Zend\Db\Adapter\AdapterAbstractServiceFactory::class,
],
'invokables' => [
],
],
...
Но вам все равно нужно в какой-то момент использовать Service Manager, чтобы получить адаптеры.Используя приведенный выше пример:
$dbSys = $container->get('dbSys);
$dbClient = $container->get('dbClient');
Надеюсь, это поможет.