プログラムでユーザーをデフォルトの「アクセス制限」にリダイレクトする


12

プログラムでユーザーをデフォルトの「アクセス制限」ペー​​ジにリダイレクトしたい。単純なリダイレクトには「RedirectResponse」オブジェクトが必要であることはわかっていますが、ここでデフォルトの「アクセス制限」ペー​​ジを指定するにはどうすればよいですか?


1
通常、「アクセス制限」ペー​​ジは、別のページにリダイレクトするのではなく、403ステータスコードを返すことによって生成されます。あなたは次のようなことを試しましたかreturn new Response('', Response::HTTP_FORBIDDEN);
ピエール・バイル

回答:


24

コードの任意の時点で例外をスローできます。

403:

throw new \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException();

404:

throw new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException();

次に、例外がDefaultExceptionHtmlSubscriberによってキャッチされ、サブリクエスト/system/403または/system/404が返されます。これは、一般的な「アクセス拒否」または「見つかりません」ページを表示しない場合は、基本的なサイト設定で設定できます。

その他のオプションは、コードの配置場所によって異なります。

  • コントローラーまたはフォームから403または404応答を返す

  • イベントサブスクライバーにいる場合は、イベントに応答を設定します。

すべきではないことは、直接応答を送信することです。これはコードを停止せず、2つの応答を生成します。1つは送信し、もう1つはDrupalカーネルによって返されます。これにより、予期しない動作が発生します。


2

これは正しい方法のようです:

    $response = new RedirectResponse('/system/403');
    $event->setResponse($response);

2

システムのアクセス拒否ルートからリダイレクトを構築します。

$url = Url::fromRoute('system.403');
$response = new RedirectResponse($url->toString());

これにより、Drupalの標準アクセス拒否ページが表示されます。ルートはsystem.routing.ymlコアで定義されます。

一番上の答えは、ブラウザベースのアクセスが拒否され、壊れているように見えることです。Drupal UIを表示したい場合は、上記を使用してください。


0

ページから、以下を使用できます。

return new \Symfony\Component\HttpFoundation\RedirectResponse(\Drupal::url('your.module.route.name'));

のような:http : //www.drupal8.ovh/en/tutoriels/88/page-redirection-on-drupal-8

または送信元から:

$form_state->setRedirect('your.module.route.name');

次に、「your.module.route.name」のアクセス許可を設定します

アクセス許可の設定方法がわからない場合は、次を確認してください。http://www.drupal8.ovh/en/tutoriels/66/create-a-custom-permission-drupal-8


$ response = new Response( ''、Response :: HTTP_FORBIDDEN);を試しました。$ event-> setResponse($ response); これは、ユーザーに白いページのみを表示します。情報が少なすぎます。Drupalのデフォルトの「アクセス拒否」ページを表示したい。
jepster
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.