ここでこの問題を解決する方法の1つです。しかし、テキスト形式のようなフォーム入力を使用している場合は、Ajaxコールバックを使用することをお勧めします。 Ajaxコールバックを使ってそれを解決する方法の例が必要かどうかを教えてください。
私はここで、キーは、それが簡単にここで$form_state['values']
から値を取得するよりも、私はそのフォームが再構築され$form_state['rebuild'] = true;
を使用していることだと思いコードされています
function example_form(array $form, array &$form_state)
{
$form['temp'] = array(
'#type' => 'value',
'#value' => array_key_exists('values', $form_state) ? $form_state['values']['temp'] + 1 : 1,
);
if (array_key_exists('values', $form_state) && $form_state['values']['temp'] == 1)
{
$form['message'] = array(
'#markup' => t('I only give you one warning'),
'#prefix' => '<p>',
'#suffix' => '</p>',
);
}
$form['submit_button'] = array(
'#type' => 'submit',
'#value' => t('Click Here!'),
);
return $form;
}
function example_form_validate(array $form, array &$form_state)
{
$form_state['rebuild'] = true;
}
function example_form_submit(array $form, array &$form_state)
{
if($form_state['values']['temp'] == 1) {
// I will not store anything
} else {
// now I will store it :)
}
}
"はそれを呼び出すようにしてくださいmy_module_validate "となります。 :) – kwoxer
あなたは何を検証しますか?それはテキストフィールドですか?次に、テキストフィールドのフォーカスを離れるときにajaxコールバックを使用して、フォームを通知で更新することをお勧めします(#markupのフォーム要素)。 バリデーションフックに入れたい場合は、バリデーションを済ませた$ formStateにバリデーションフックを保存することができます。あなたが私にもっと情報を与えるなら、私は例を作るでしょう。 – Triss