2011-01-24 13 views
0

これに気づくのは初めてのことですが、私は少し驚いています。フォームはその値にアクセスできません。これは正常ですか?

私は単純なテキスト要素を持つ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 } 

答えて

2

あなたは、フォームにデータを明示的に渡す必要があります。正直なところ、Zendを使ってフォームからデータを作成しフェッチする理由がわかりません。これは、ストレートPHPでこれを行うほうがずっと簡単です。

<?php if(!isset($_POST['name'])): ?> 
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post"> 
    <label for="name">Name:</label> <input type="text" name="name" id="name" /> 
</form> 
<?php else: ?> 
Value = <?= $_POST['name'] ?> 
<?php endif; ?> 

私はそれがすべてのコーディングのあなたのスタイルにだと思います。私は上記を好むでしょうが、あなたがHTMLからロジックを分離したいなら、Zendは確かにオプションです。

+0

これは機能します。しかし、実際にフォームがその値にアクセスできない可能性はありますか?バリデータとフィルタに与える値が必要です。実際に私がやっているのは、カスタムフィルターに値を渡すことです。私は、フィルタが自動的にそれが追加されているフィールドから$値を取得すると思ったが、それは動作しないので、私は自分自身をフィルタに渡している。もちろん、フォームが独自の値を読み取ることができれば簡単になります。そして、コントローラーをまったく使わずに直接渡すことができます。私はフィルターに関する別の質問を掲示するかもしれません。私はそこに何か間違ったことをしているかもしれません。 – jblue

+0

"しかし、実際には、フォームがその値にアクセスできない可能性があります。" ---あなたが渡したデータに明示的にアクセスできます。 ZFは$ _POST、$ _GETからデータを取り出す場所を予測することはできません。またファイルからフェッチすることもできます。 – zerkms

+0

私は不思議なことに、検証の後に明示的に値をフォームに渡すことができます。しかし、私がこれをバイパスして$ _POSTから直接アクセスするとどうなりますか?それは悪いですか?それにはいくつかの欠点がありますか?このデータをフィルタに与えていることに注意してください。このフィルタはわずかに変更されるため、その入力を直接画面やそれに類するものに使用しているわけではありません。 – jblue

1

号スティック:ZFからそれを得るためには考えを持っていないので、

+1

zendフォームは追加のバリデーションとフィルタを実行するためです。また、フォームが無効な場合に値を復元するのを忘れてしまった。 – zerkms

+1

@zerkmsポイントを取得しました。私はZendフレームワークに対する私の反対を少し鈍らせていました。 :) –

+0

@PhpMyCoderに紳士的なバックダウンで+1。ディスクロージャー:私は大きなZFファンです。 ;-) –

関連する問題