【发布时间】:2014-07-27 15:01:39
【问题描述】:
如果我想对扩展我的基类的任何类使用相同的工厂,我是否想把基类工厂变成一个命名函数,还是有更好的方法来做到这一点?
$serviceManager => array(
'factories' => array(
'someBaseClass' => function($thisServiceManager) {
$db = $thisServiceManager->get('db');
$thisBaseClass = new \myNamespace\thisBaseClass($db);
return $thisBaseClass;
},
),
);
编辑
除了我接受的答案之外,这是我测试过的有效代码。
类文件
use Zend\ServiceManager\AbstractFactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
class baseClassFactory implements \Zend\ServiceManager\AbstractFactoryInterface
{
public function canCreateServiceWithName (ServiceLocatorInterface $locator, $name, $requestedName = '')
{
return ('baseClass' === $name || is_subclass_of($name, 'baseClass'));
}
public function createServiceWithName (ServiceLocatorInterface $locator, $name, $requestedName = '')
{
$db = $locator->get('db');
$query = new $name($db);
return $query;
}
}
配置
$serviceManager => array(
'abstract_factories' => array(
'baseClassFactory',
),
);
【问题讨论】:
标签: php class zend-framework2 factory