Zend framework2 如何创建扩展实体选择元素的自定义表单元素
我试图创建一个自定义元素,在这里我可以预先设置一个实体名称空间,比如--Zend framework2 如何创建扩展实体选择元素的自定义表单元素,zend-framework2,Zend Framework2,我试图创建一个自定义元素,在这里我可以预先设置一个实体名称空间,比如--Application\entity\User,并轻松地将该元素添加到任何表单中。我在表单元素中注入元素时遇到了一个问题——我找到了这篇关于form\u元素配置键的帖子,但它不起作用——所以我想可能只是设置元素并从表单中将其传递给objectmanager 我想做这样的事。 $this->add( array( 'name' => 'user_id', 'type' =&g
Application\entity\User
,并轻松地将该元素添加到任何表单中。我在表单元素中注入元素时遇到了一个问题——我找到了这篇关于form\u元素
配置键的帖子,但它不起作用——所以我想可能只是设置元素并从表单中将其传递给objectmanager
我想做这样的事。
$this->add(
array(
'name' => 'user_id',
'type' => 'Application\Form\Element\UserSelect',
'options' => array(
'label' => 'User',
'object_manager' => $this->getObjectManager(),
),
),
);
或者更好的办法就是这样
$this->add(
array(
'name' => 'user_id',
'type' => 'Application\Form\Element\UserSelect',
'label' => 'User',
),
);
module.config.php AbstractForm.php TestForm.php 将初始值设定项和可调用项添加到Module.php的getFormElementConfig方法中:
use DoctrineModule\Persistence\ObjectManagerAwareInterface;
...
public function getFormElementConfig()
{
return array(
'invokables' => array(
'MyForm' => 'Application\Form\MyForm',
),
'initializers' => array(
'ObjectManagerInitializer' => function ($element, $formElements) {
if ($element instanceof ObjectManagerAwareInterface) {
$services = $formElements->getServiceLocator();
$entityManager = $services->get('Doctrine\ORM\EntityManager');
$element->setObjectManager($entityManager);
}
},
),
);
}
然后使用FormElementManager获取te表单:
$forms = $this->getServiceLocator()->get('FormElementManager');
$myForm = $forms->get('MyForm');
最后,将您的元素添加到init方法中,而不是构造函数,因为他永远不会知道objectManager:
public function init()
{
$this->add(
array(
'name' => 'user_id',
'type' => 'DoctrineORMModule\Form\Element\DoctrineEntity',
'options' => array(
'label' => 'User',
'object_manager' => $this->getObjectManager(),
'target_class' => 'Application\Entity\User',
'property' => 'name',
'find_method' => array(
'name' => 'findBy',
'params' => array(
'criteria' => array('is_deleted' => 0),
'orderBy' => array('name' => 'ASC'),
),
),
),
),
);
}
use DoctrineModule\Persistence\ObjectManagerAwareInterface;
...
public function getFormElementConfig()
{
return array(
'invokables' => array(
'MyForm' => 'Application\Form\MyForm',
),
'initializers' => array(
'ObjectManagerInitializer' => function ($element, $formElements) {
if ($element instanceof ObjectManagerAwareInterface) {
$services = $formElements->getServiceLocator();
$entityManager = $services->get('Doctrine\ORM\EntityManager');
$element->setObjectManager($entityManager);
}
},
),
);
}
$forms = $this->getServiceLocator()->get('FormElementManager');
$myForm = $forms->get('MyForm');
public function init()
{
$this->add(
array(
'name' => 'user_id',
'type' => 'DoctrineORMModule\Form\Element\DoctrineEntity',
'options' => array(
'label' => 'User',
'object_manager' => $this->getObjectManager(),
'target_class' => 'Application\Entity\User',
'property' => 'name',
'find_method' => array(
'name' => 'findBy',
'params' => array(
'criteria' => array('is_deleted' => 0),
'orderBy' => array('name' => 'ASC'),
),
),
),
),
);
}