我有这段代码:
public function getFormElementConfig()
{
return array(
'initializers' => array(
'ObjectManagerInitializer' => function ($element, FormElementManager $formElements) {
if ($element instanceof ObjectManagerAwareInterface) {
/** @var ServiceLocatorInterface $serviceLocator */
$serviceLocator = $formElements->getServiceLocator();
$entityManager = $serviceLocator->get('doctrine.entitymanager.orm_default');
$element->setObjectManager($entityManager);
}
},
),
);
}
这个formElement配置为我提供了水槽和对象管理器 Doctrine ObjectSelect在我的表单中实现 ObjectManagerAwareInterface。
如何将其从关闭中移出?我没有任何线索,因为初始化程序是自动的。我需要工厂吗?
到目前为止,我试图像这样创建一个配置密钥
'form_elements' => array(// here because getFormElementConfig
'initializers' => array(
'ObjectManagerInitializer' => 'Application\Initializers\ObjectManagerInitializer',
),
),
然后创建一个对象
<?php
namespace Application\Initializers;
class ObjectManagerInitializer // implements or extends ??
{
}
但我不知道它需要哪种界面或架构,我不知道如何构建它。
答案 0 :(得分:3)
初始化程序只需要可调用,你可以通过声明app.get
魔术方法使类可调用,然后你只需要将匿名函数中的代码移动到该方法中,最后为你的FQCN添加服务器管理器的初始化程序,您将其附加到。
所以你的课应该看起来像这样...
__invoke()
将FQCN添加到module.config.php
中的表单元素管理器<?php
namespace Application\Initializers;
use DoctrineModule\Persistence\ObjectManagerAwareInterface;
use Zend\Form\FormElementManager;
use Zend\ServiceManager\ServiceLocatorInterface;
class ObjectManagerInitializer
{
public function __invoke($element, FormElementManager $formElements) {
if ($element instanceof ObjectManagerAwareInterface) {
/** @var ServiceLocatorInterface $serviceLocator */
$serviceLocator = $formElements->getServiceLocator();
$entityManager = $serviceLocator->get('doctrine.entitymanager.orm_default');
$element->setObjectManager($entityManager);
}
}
}