電子書籍の厳選無料作品が豊富!

フォームの要素がつかむ値の変更方法について教えて下さい。

php5とQuickFormの組み合わせでフォーム画面を作成しています。
それは、メールに似た機能を持つ画面ですが、画面の入力要素は「配信元」、「配信先」、「件名」、「本文」
です。

これらの要素に対して次のような形でデフォルト値を設定して、フォームの要素を$form->freeze();で凍結して表示すると
各要素は設定値が凍結された状態で表示されます。

$form->setDefaults(

array(
'user_id_from' => 'tanaka',
'user_id_to' => 'suzuki',

'mail_ken' => 'こんにちは',

'mail_main' => 'また遊びましょう',

)
);

(画面表示)
配信元:tanaka
配信先:suzuki
件名:こんにちは
本文:また遊びましょう


このように凍結された要素が表示された画面で「返信」ボタンを押した場合の動きが意図したものになりません。
目的(意図したもの)は、この凍結された要素が表示された画面で「返信」ボタンを押すと。user_id_fromとuser_id_toの値が入れかわり、user_id_from要素以外は凍結が解除されて次のような表示にしたいのです。

(画面表示)
配信元:suzuki
配信先:tanaka
件名:こんにちは
本文:また遊びましょう

※動作のイメージとしては、メールの受信メールを開いた状態の画面(編集不可)で返信ボタンを押すと、メールの作成画面に切り替わり、受信メールの配信元と配信先の値が入れかわったものが作成画面に配信元と配信先に入ります。
そして、作成画面の配信元以外は編集が可能にしたいです。

そこで、凍結された画面で「返信」ボタンが押された場合、処理の中で次の通りに$form->setDefaultsの設定を行いましたが、画面の表示結果としては最初に設定した値から変わっていません。

$form->setDefaults(

array(
'user_id_from' => 'suzuki',
'user_id_to' => 'tanaka',

'mail_ken' => 'こんにちは',

'mail_main' => 'また遊びましょう',

)
);

現状では、「返信」ボタンが押された処理で配信元と配信先の値を入れ替える事だけができません。
何がいけないのでしょうか?

全く分かりません。ヒントだけでもよいのでアドバイスを下さい。
宜しくお願いします。

A 回答 (1件)

QuickFormは、$form->setDefaults()よりもPOSTデータの方を優先するようになってたと思います。



望みの動きをさせたいなら$form->setConstants()を使えばいいと思います。

例)$form->setConstants(array('user_id_from' => 'suzuki'));
    • good
    • 0
この回答へのお礼

ありがとうございました。おかげさまでできました。
setConstantsは調べている時に存在を知りましたが、定数の設定で絶対に値の変更できない意味だったので、要素に値を設定する場合、これは使えないと勝手に判断したのが間違いでした。
本当にありがとうございました。

お礼日時:2010/07/29 22:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!