3

我正在使用 Zend_Form (include_path 上的完整库)但不使用 MVC$_POST值与预期一致,但$form->getValues()对于 $_POST 中包含正确字符串的键返回 null。我希望$form->getValues()为“全名”键返回一个有效的字符串。这是表格:

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

为什么“全名”为空?

4

1 回答 1

5

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

如果您尝试这样做:

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

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

你会得到你期望的结果。

于 2013-01-27T15:39:51.197 回答