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

「フルネーム」が null なのはなぜですか?

4

1 に答える 1

5

Zend_Form$_POSTからデータに直接アクセスしないため、データを渡す必要があります。これを行う方法の 1 つは、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 に答える