symfony 形式で数式を作成するために 2 つの乱数を取得しています。問題は、フォームの送信時に乱数が更新され、フォームの送信が無効になることです。フォームが処理されるように、最初の数値をロードしたままにするにはどうすればよいですか?ただし、処理が成功した後、新しいセットをロードしますか?
アクション.クラス
public function executeIndex(sfWebRequest $request)
{
$num1 = rand(0 , 20);
$num2 = rand(0 , 20);
$realAnswer = $num1 + $num2;
$show = $num1 . " + " . $num2 . " = ";
$this->getResponse()->setSlot("displayNum", $show);
$this->form = new UserForm();
echo $num1 . "<br>" . $num2 . "<br>" . $realAnswer;
if ($request->isMethod('post') && ($request->getPostParameter('captcha[answer]') == $realAnswer))
{
$this->processForm($request, $this->form);
}
}
フォームをレンダリングするためにパーシャルを使用しています-> _form.php
<tr height="40">
<td width="100" valign="middle">
<?php echo get_slot("displayNum", "default value if slot doesn't exist"); ?>
</td>
<td width="400" colspan="4" valign="middle">
<input type="text" id="captcha" class="url" name="captcha[answer]" style="width:100px" />
</td>
</tr>
例: ページが最初に読み込まれると、2 つの乱数が生成されます (例: 10 と 15)。これは 10 + 15 = (入力フィールド) をレンダリングします
ユーザーは 25 を挿入し、[保存] をクリックします。これは正しかったのですが、フォームが index アクションを再度実行するため、「if」条件を偽にする乱数の新しいセットが存在します。
アップデート:
j0k の提案に従って、アクションに変更を加えました。
public function executeIndex(sfWebRequest $request)
{
$user = $this->getUser();
if (!$request->isMethod('post'))
{
// first display of the form, generate nums
$num1 = rand(0 , 20);
$num2 = rand(0 , 20);
$realAnswer = $num1 + $num2;
// store them in session
$user->setAttribute('realAnswer', $realAnswer);
$user->setAttribute('num1', $num1);
$user->setAttribute('num2', $num2);
}
else
{
// the form is submitted, retrieve nums from the session
$num1 = $user->getAttribute('realAnswer', null);
$num2 = $user->getAttribute('num1', null);
$realAnswer = $user->getAttribute('num2', null);
}
//setup slot
$show = $num1 . " + " . $num2 . " = ";
echo $realAnswer . "-Actual<br>" . $request->getPostParameter('captcha[answer]') . "-User submitted";
$this->form = new UserForm();
if ($request->isMethod('post') && (($request->getPostParameter('captcha[answer]') == $realAnswer)))
{
$this->processForm($request, $this->form);
}
}
これはうまくいくはずです。変数を見ると、ページがセッション変数をプルしており、2 番目の投稿に新しい乱数を追加していないように見えます。変。
解決済み
コードエラーでした。私は変数を交差させました。
else
{
// the form is submitted, retrieve nums from the session
$num1 = $user->getAttribute('num1', null);
$num2 = $user->getAttribute('num2', null);
$realAnswer = $user->getAttribute('realAnswer', null);
../