0

ノード作成フォームに検証フックを追加しました。

私のプロジェクトでは、この検証が必要なのは 1 回だけです。基本的には、DB に値が既に存在するかどうかを確認し、それをユーザーに通知します。ユーザーがまだフォームを送信している場合は、とにかく追加する必要があります。

私はそのようなことをしたい:

if (form_did_not_fail_validation_before) {
  $form['#validate'][] = 'my_module_validation_hook';
}

私のhook_form_alterで、検証フックが初めて呼び出されるようにします。

フォームがすでに検証に失敗したかどうかを確認する方法が見つかりません。何かアイデアはありますか?

4

1 に答える 1

0

この問題を解決する 1 つの方法を次に示します。ただし、テキスト フォームなどのフォーム入力を使用する場合は、Ajax コールバックを使用することをお勧めします。より動的に感じるからです。Ajax コールバックで解決する方法の例が必要な場合は教えてください。

$form_state['rebuild'] = true;ここでの鍵は、フォームが再構築され、フォームから値を簡単に取得できるように使用することだと思います$form_state['values']

コードは次のとおりです。

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 :)
    }
}
于 2016-11-17T20:07:20.320 に答える