ユーザーを特定のページにリダイレクトするカスタムフォーム送信コールバックがあります。
function MYMODULE_authfrontpageredirect_callback(array &$form, FormStateInterface &$form_state) {
$url = \Drupal::service('path.validator')->getUrlIfValid('node/16');
$form_state->setRedirect($url->getRouteName(), $url->getRouteParameters());
}
これは、URLがdestination
クエリ文字列(/node/add/mynode?destination=/user
など)を持たない限り、正しく機能します
この場合、ユーザーは、送信ハンドラの宛先(/user
)ではなく、クエリ文字列に基づいて(node/16
に)リダイレクトされます。
この送信ハンドラのdestination
クエリ文字列コンテンツを強制的にオーバーライドするにはどうすればよいですか?
この質問はこれに似ています D7質問 ですが、Drupal 8はSymfonyルーティングシステムを持っているため、そこでの回答は役に立ちませんでした。
リダイレクトを強制するには、リクエストから宛先クエリ文字列を削除します。
\Drupal::request()->query->remove('destination');
この後、RedirectDestinationサービスをリセットすることもできますが、これはフォームに必要ではないようです。
\Drupal::destination()->set(NULL);
URLオブジェクトが既にある場合は、$ form_stateに直接設定します。
$form_state->setRedirectUrl($url);
RedirectResponse Class を使用してみましたか?この種のコールバックがあり、URLパラメータが削除されます。
use Symfony\Component\HttpFoundation\RedirectResponse;
function MYMODULE_authfrontpageredirect_callback(array &$form, FormStateInterface &$form_state) {
$response = new RedirectResponse(\Drupal::url('entity.node.canonical', ['node' => '16']));
$response->send();
}