2017-10-30 17 views
0

送信されていないDrupal 8に表示されるようにフォームをリセットしようとしています。これまで、私は利用可能なメソッド(setSubmitted()をFALSEオプションなしでTRUEにハードコードする)が見つからないため、これを行うことができませんでした。なぜなら、これは完全なサブミットではなく、1つのフィールドのサブミット後に、ユーザーが別のフォームを持つ別のページにリダイレクトされるようにするためです。このセカンダリフォームで最初に取得した値ステップ。二番目の形式は、それが提出され考えている(それはそう)送信ハンドラで送信された状態を削除します

$form_state->setRedirect('my.route', [], []); 

を、これは動作しますが、フォームが第二の形式に達したときに:私はリダイレクトするためにこれを使用する最初の部分のためのハンドラを提出して

。その結果、2番目のフォームに追加する送信ボタンがあれば、自動的に送信されるように見えます。これがユーザーの移動を妨げてしまいます。私が試してみました最初の部分のために提出して

$form_state->setRebuild(TRUE); 
$form_state = new FormState(); 
unset($form_state); 

は無駄に様々な構成で上記を試してみました。それらはすべて私が後で作るsetRedirectコールを防ぐ/無視します。私がこのようにしたい/したい理由は、私が使用したPOSTメソッドを保持したいということです。

+0

多段階フォームのアプローチを試してみると、この[回答](https://drupal.stackexchange.com/a/93747/26231)とこの[チュートリアル](https:// www。 sitepoint.com/how-to-build-multi-step-forms-in-drupal-8/)。 – EricLavault

+0

@EricLavaultはい私はこれに似た何かを見ました。問題は、ブロックタイプのフォームとページタイプフォームが必要なことです。これは正しく多段階ですが、共有した例(と私が見た他のもの)は、(同じURLを使って)自分自身をリフレッシュする形になっていると思います。このユースケースでは、別のアドレスで2番目の部分を実行し、データをその場所にポストして収集する必要があります – user1360809

答えて

0

コア検索モジュールと同様のものを入手したいですか?それはより複雑なSearchPageFormにデータを送る単純なSearchBlockFormを持っています。 (あなたがPOSTを使用するかもしれませんが)

SearchBlockFormGETメソッドを使用しています。

$form['#method'] = 'get'; 

has no id and token fields

function search_form_search_block_form_alter(&$form, FormStateInterface $form_state) { 
    $form['form_build_id']['#access'] = FALSE; 
    $form['form_token']['#access'] = FALSE; 
    $form['form_id']['#access'] = FALSE; 
} 

ところで、最後の変更は、コールバックを提出実行しないようにすることができます。

これが役に立ちます。

関連する問題