ZF2中的$ form-> get(' element')返回NULL

时间:2014-05-12 07:24:00

标签: php zend-framework2

我有一个添加用户的表单。 问题是:我在尝试从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);

2 个答案:

答案 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);