フォーム送信後のリダイレクト


16

Drupal 8でカスタムフォームを作成します。カスタム$form_state['redirect'] = 'mycustompath';送信ハンドラーでsetを使用してDrupal 7のカスタムパスにリダイレクトできますが、Drupal 8でフォーム送信後にユーザーをリダイレクトするにはどうすればよいですか?

私はsubmitFormメソッドを使用する必要があることを知っています:

public function submitForm(array &$form, FormStateInterface $form_state)
{
   //submissions jobs ...
   //redirect path
}

回答:


30

「submitForm」メソッドに以下のコードを記述します

 $form_state->setRedirect('machine_name');
 return;

ここmachine_nameで、ルーティングファイルに記載されているマシン名です。

これが役立つことを願っています.. :)


うまくいかない。カスタムルートを試してみて、$form_state->setRedirect('/start');return;ホームページにリダイレクトしたいとしましょう。正確なスニペットとは何ですか?
ユセフ

1
$ form_state-> setRedirect( '<front>'); 戻り;
parth.k

'/ start'であってはなりません。これは、ルーティングファイルに記載されているエイリアスです。
parth.k

'<front>'あなたはパスエイリアスについて何をしましたか?これが私のルートですtcdev.content: path: '/start' defaults: _controller: 'Drupal\tcdev\Controller\TrainingCenterController::content' _title: 'Start Training Center' requirements: _permission: 'access content'
ユセフ

$ form_state-> setRedirect( 'tcdev.content');
parth.k

8

buildformで設定する場合は、次のようなルーティングパスを使用する必要があります。

use Drupal\Core\Url;

$url = Url::fromRoute('route.path');
$form_state->setRedirectUrl($url);

Urlの名前空間とは何ですか? Url' not found
ユセフ

でなければならないuse Drupal\Core\Url;(先行スラッシュなし)
ummdorian

$form_state->setRedirectUrl($url);submitForm()でも使用できます。
ショーンディチコ

APIを確認します:api.drupal.org/api/drupal/…。setRedirect()は最初にルートをURLに変換し、次にsetRedirectUrl()を呼び出します。
-imclean

0

ユーザー編集フォームをホームページまたは他のページにリダイレクトする場合は、以下のコードに従ってください。

まず、フックを追加-hook_form_alter`

function yourmodulename_form_alter(&$form, FormStateInterface $form_state, $form_id) 
{
    if ($form_id === 'your form id') {
    $form['actions']['submit']['#submit'][] = 'modulename_user_edit_form_submit';
  } 
}

フックを追加した後、関数の下に追加します

function modulename_user_edit_form_submit($form,  FormStateInterface &$form_state) {
  global $base_url; //set base path
  $response = new Symfony\Component\HttpFoundation\RedirectResponse($base_url ."/xyz"); //set url
  $response->send();
  return;
}

これが役立つことを願っています。


これは、ハンドラーの後に起動するすべての送信ハンドラーをバイパスしませんか?
joekers

$form_state->setRedirect()他のすべての送信ハンドラーを処理できるように、フォーム送信のみに含める必要があります。
joekers
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.