我有一个添加用户的表单。 问题是:我在尝试从Controller获取表单元素时收到NULL。 这是表格:
public function __cunstruct($name = null)
{
parent::__construct('user');
$this->setAttribute('method', 'post');
$this->add(array(
'name' => 'Id',
'attributes' => array(
'type' => 'text',
),
'options' => array(
'label' => 'id',
),
));
$this->add(array(
'type' => 'Zend\Form\Element\Hidden',
'name' => 'IsCreate',
'attributes' => array(
'value' => 'false'
)
));
$this->add(array(
'name' => 'Username',
'attributes' => array(
'type' => 'text',
'id' => 'username'
),
'options' => array(
'label' => 'Name'
),
));
$this->add(array(
'name' => 'Password',
'attributes' => array(
'type' => 'password'
),
'options' => array(
'label' => 'Password'
)
));
$this->add(array(
'name' => 'ConfirmPassword',
'attributes' => array(
'type' => 'password'
),
'options' => array(
'label' => 'Confirm password'
)
));
$this->add(array(
'name' => 'TypeId',
'type' => 'Zend\Form\Element\Select',
'options' => array(
'label' => 'Type'
)
));
$this->add(array(
'name' => 'submit',
'attributes' => array(
'type' => 'submit',
'valut' => 'Create',
'class' => 'btn btn-primary'
)
));
}
这是控制器示例:
public function indexAction()
{
$form = new AddUserForm();
var_dump($form);
echo "<BR>";
echo "<BR>";
var_dump($form->get('TypeId'));
}
在var_dump($form)
我收到数组,但没有数据:
object(WebAdmin\Form\EditUserForm)#306 (27) { ["attributes":protected]=> array(1) { ["method"]=> string(4) "POST" } ["bindAs":protected]=> int(17) ["bindOnValidate":protected]=> int(0) ["baseFieldset":protected]=> NULL ["data":protected]=> NULL ["filter":protected]=> NULL ["useInputFilterDefaults":protected]=> bool(true) ["hasAddedInputFilterDefaults":protected]=> bool(false) ["hasValidated":protected]=> bool(false) ["isValid":protected]=> bool(false) ["isPrepared":protected]=> bool(false) ["preferFormInputFilter":protected]=> bool(false) ["wrapElements":protected]=> bool(false) ["validationGroup":protected]=> NULL ["factory":protected]=> NULL ["byName":protected]=> array(0) { } ["elements":protected]=> array(0) { } ["fieldsets":protected]=> array(0) { } ["messages":protected]=> array(0) { } ["iterator":protected]=> object(Zend\Stdlib\PriorityQueue)#307 (3) { ["queueClass":protected]=> string(28) "Zend\Stdlib\SplPriorityQueue" ["items":protected]=> array(0) { } ["queue":protected]=> NULL } ["hydrator":protected]=> NULL ["object":protected]=> NULL ["useAsBaseFieldset":protected]=> bool(false) ["label":protected]=> NULL ["labelAttributes":protected]=> NULL ["options":protected]=> array(0) { } ["value":protected]=> NULL }
在var_dump($form->get('TypeId'))
我收到的只是NULL。
因此,当我尝试添加用户时,出现错误:
Fatal error: Call to a member function setAttribute() on a non-object in /controller_path/ on line 72
该行是:$form->get('TypeId')->setAttribute('options', $options);
答案 0 :(得分:2)
构造函数中有拼写错误;意味着元素永远不会添加到构造上,因为不会调用该方法。
public function __cunstruct($name = null)
应该是
public function __construct($name = null)
据说@ MaiKay的答案暗示使用FormElementManager
就是你应该做的事情。
然后,您还可以将元素的添加移动到使用init()
$formElementManager->get('Module\Form\Foo')
方法
答案 1 :(得分:1)
我认为您必须使用FormElementManager来接收表单。
例如
<?php
$sl = $this->getServiceLocator();
$form = $sl->get('FormElementManager')->get('\Application\Form\MyForm');
return array('form' => $form);