パスとして「work」を使用するDrupal 8サイトのビューがあります。ノードが送信された直後にユーザーをこのパスにリダイレクトしたいと思います。
Drupal 7にあったように、フォームの変更は適切な解決策のようですが、以前よりも複雑です。Drupal 7では、直接パスとリダイレクトが行われました。ここでは、もはや明白ではないルート名を指定する必要があります。適切なルート名の値を見つけるにはどうすればよいですか?ノード、ビュー、カスタムパスなどでは異なります。
$form_state->setRedirect('')
の引数として何を使用すればよいですか?さまざまなケースで使用する必要があるルート名を見つけるにはどうすればよいですか?
function work_form_alter(&$form, \Drupal\Core\Form\FormStateInterface\FormStateInterface $form_state, $form_id) {
switch ($form_id) {
case 'node_work_form':
$form['actions']['submit']['#submit'][] = 'work_redirect';
break;
}
}
function work_redirect($form, FormStateInterface $form_state) {
// Set redirect to some path.
$form_state->setRedirect(''); // What should I provide here as an argument/arguments
}
ビューの場合、ルートパターンはview.(view_id).(display_id)
です。
たとえば、Articlesというビューと、「All」という名前のディスプレイがある場合、次のようになります。
$form_state->setRedirect('view.articles.all');
ディスプレイIDの名前を変更しない場合(通常は変更します)、おそらくpage_1
またはその性質の何か。
それを超えて、それは以前の状態に似ています。クエリ文字列引数が添付されたリダイレクトを次に示します。
$form_state->setRedirect('view.articles.all', ['keywords' => $form_state->getValue('keywords')]);
SetRedirect($ route_name)の代わりに、URLのみを必要とするsetRedirectUrl(Url $ url)メソッドを使用できます。
このメソッドを使用するには、ページの上部でこの名前空間を使用する必要があります。
use Drupal\Core\Url;
リダイレクト関数は次のようになります。
function work_redirect($form, FormStateInterface $form_state) {
// Path needs to start with / or # or ?
$redirect_path = "/work";
$url = url::fromUserInput($redirect_path);
$form_state->setRedirectUrl($url);
}