0

私は Drupal API に取り組んでいますが、成功は限られています。

フォームを含む URL が必要なため、その URL を「GET」するとフォームが取得されます (それを取得します)。そのフォームに間違った「コード」を入力して同じ URL を POST すると、同じ URL が取得されます。エラーメッセージのあるフォーム(それもあります)ですが、同じURLを正しい「コード」でPOSTすると、別のコードが表示され、以前のフォームが表示されなくなります。

リダイレクトはありません。すべてのリクエスト (投稿と取得) は domain.com/entry をターゲットにする必要があります。

これは私が持っているコードです(簡略化):

function entry_menu() {
    $items['entry'] = array(
        'page callback' => 'entry_handler',
        'access arguments' => array('access entry'),
        type => MENU_CALLBACK,
    );

    return $items;
}

function entry_handler() {
    return drupal_get_form('entry_daily_code');
}

function entry_daily_code($form, &$form_state) {
    $form['code'] = array(
        '#type' => 'textfield',
        '#title' => 'Code for Today',
    );

    form['submit'] = array(
        '#type' => 'submit',
        '#value' => 'Access',
    );

    return $form;
}

function entry_daily_code_submit($form, &$form_state) {
    if (isset($form_state['values']['code']) && $form_state['values'] == "1234") {
        drupal_set_message(t('Success'));
    }
    else {
        drupal_set_message(t('Fail'));
    }
}

私がやりたいことは「entry_handler」で起こるはずだと想像します。

フォームから返されたステータスを知り、フォームまたは別のコンテンツを返す必要がありますが、私はそれに失敗しています。

うまくいかなかった場合に備えて、私の要点を説明するために図を作成しました。 ダイアグラム

正しい方向への指針をありがとう。

4

1 に答える 1

1

検証ハンドラーを追加します。

function entry_daily_code_validate($form, &$form_state) {
  if ($form_state['values']['code'] != '1234') {
    form_set_error('code', t('Fail'));
  }
}

function entry_daily_code_submit($form, &$form_state) {
  // If you are here, the validation handler already checked
  // that $form_state['values']['code'] == '1234'
  drupal_set_message(t('Success'));

  // Redirect to a different page:
  $form_state['redirect'] = 'entry/success';
}

送信ハンドラーでリダイレクトしない場合、Drupal は Post/Redirect/Get パターンに従って現在のページにリダイレクトします。

于 2013-10-11T11:51:23.840 に答える