为什么Zend_Form :: getValues()没有返回MVC之外的预期值?

时间:2013-01-27 14:44:00

标签: zend-framework zend-form

我正在使用Zend_Form(include_path上的完整库)但不使用MVC $_POST值与预期值相同,但$form->getValues()为$ _POST中包含正确字符串的键返回null。我希望$form->getValues()返回'fullname'键的有效字符串。这是表格:

class MyForm extends Zend_Form {

    public function init() {
        $this->setName('myform')
            ->setAction($_SERVER['PHP_SELF'])
            ->setMethod('post');

        $fullname = $this->createElement('text', 'fullname')
            ->setLabel('What is your name?');

        $this->addElement($fullname);
        $this->addElement('submit', 'submit');
    }

}

以下是为表单生成的HTML:

<form id="myform" name="myform" enctype="application/x-www-form-urlencoded" action="/classes_test/index.php" method="post">
    <dl class="zend_form">
    <dt id="fullname-label">
        <label for="fullname" class="optional">What is your name?</label>
    </dt>
    <dd id="fullname-element">
        <input type="text" name="fullname" id="fullname" value="">
    </dd>
    <dt id="submit-label">&#160;
    </dt>
    <dd id="submit-element">
        <input type="submit" name="submit" id="submit" value="submit">
    </dd>
    </dl>
</form>

以下是处理:

$request = new Zend_Controller_Request_Http();
$form = new MyForm;
$form->setView(new Zend_View);
if ($request->isPost()) {
    var_dump($_POST);
    $data = $form->getValues();
    var_dump($data);
    if ($form->isValid($request->getPost()) {
        ...
    }
}

这是一个$ _POST的var_dump:

array
  'fullname' => string 'My Name' (length=7)
  'submit' => string 'submit' (length=6)

这是$ data的var_dump:

array
  'fullname' => null

为什么'fullname'null?

1 个答案:

答案 0 :(得分:4)

Zend_Form无法直接访问$_POST中的数据,您必须传入数据。其中一种方法是isValid()调用。所以你的问题的答案是 - fullname为null,因为表单对象中还没有任何数据。

如果您尝试这样做:

if ($request->isPost()) {
    var_dump($_POST);

    if ($form->isValid($request->getPost()) {
        $data = $form->getValues();
        var_dump($data);
    }
}

你会得到你期望的结果。