これに気づくのは初めてのことですが、私は少し驚いています。フォームはその値にアクセスできません。これは正常ですか?
私は単純なテキスト要素を持つzend_formを持っています。
$name = new Zend_Form_Element_Text('name');
$name->setLabel('Name');
$this->addElement($name);
奇妙なことは、私がフォームを送信して(私はコントローラであり、いくつかのデバッグをやっていない)フォーム自体で値を読み取るしようとすると、$name->getValue()
が動作しないということですが、直接$ _POSTが動作します。
echo $name->getValue(); //gives blank
echo $_POST['name']; //gives the right value
これは正常ですか?フォームにはどのように値がありませんか? $ _POSTの値に直接アクセスするよりも$ field-> getValue()で読み込む方が良いと思いました。
2番目の質問は、フォームの値を読み取るために、$ _POSTから直接アクセスするよりも良い方法がありますか? $_POST
と$_GET
を使用して
if ($form->isValid($_POST)) { // access values }
または
if ($form->isValid($request->getPost())) { // access values }
これは機能します。しかし、実際にフォームがその値にアクセスできない可能性はありますか?バリデータとフィルタに与える値が必要です。実際に私がやっているのは、カスタムフィルターに値を渡すことです。私は、フィルタが自動的にそれが追加されているフィールドから$値を取得すると思ったが、それは動作しないので、私は自分自身をフィルタに渡している。もちろん、フォームが独自の値を読み取ることができれば簡単になります。そして、コントローラーをまったく使わずに直接渡すことができます。私はフィルターに関する別の質問を掲示するかもしれません。私はそこに何か間違ったことをしているかもしれません。 – jblue
"しかし、実際には、フォームがその値にアクセスできない可能性があります。" ---あなたが渡したデータに明示的にアクセスできます。 ZFは$ _POST、$ _GETからデータを取り出す場所を予測することはできません。またファイルからフェッチすることもできます。 – zerkms
私は不思議なことに、検証の後に明示的に値をフォームに渡すことができます。しかし、私がこれをバイパスして$ _POSTから直接アクセスするとどうなりますか?それは悪いですか?それにはいくつかの欠点がありますか?このデータをフィルタに与えていることに注意してください。このフィルタはわずかに変更されるため、その入力を直接画面やそれに類するものに使用しているわけではありません。 – jblue