Programlı olarak kullanıcıları varsayılan "erişim kısıtlı" durumuna yönlendirin


12

Programlı olarak kullanıcılarımı varsayılan "erişim kısıtlamalı" sayfasına yönlendirmek istiyorum. Basit bir yönlendirme için "RedirectResponse" nesnesine ihtiyacım olduğunu biliyorum, ancak burada varsayılan "erişim kısıtlı" sayfasını nasıl belirtebilirim?


1
Genellikle, "erişim kısıtlı" bir sayfa 403 durum kodu döndürülerek üretilir, başka bir sayfaya yönlendirilmez. Böyle bir şey return new Response('', Response::HTTP_FORBIDDEN);
denediniz

Yanıtlar:


24

Kodunuzdaki herhangi bir noktaya bir istisna atabilirsiniz:

403:

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

404:

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

İstisna daha sonra DefaultExceptionHtmlSubscriber tarafından yakalanır ve genel bir "erişim reddedildi" veya "bulunamadı" sayfası görüntülemek istemiyorsanız temel site ayarlarında yapılandırabileceğiniz bir alt istek /system/403veya /system/404döndürülür.

Diğer seçenekler kodun nereye yerleştirildiğine bağlıdır:

  • Bir denetleyiciden veya formdan 403 veya 404 yanıtı döndürme

  • Etkinlik abonesindeyseniz bir etkinlikte yanıt ayarlayın.

Asla yapmamanız gereken şey doğrudan bir yanıt göndermektir. Bu, kodu durdurmaz ve biri Drupal çekirdeği tarafından gönderilen ve biri geri gönderilen iki yanıt üretir. Bu öngörülemeyen davranışlara neden olacaktır.


2

Bu doğru yol gibi görünüyor:

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

2

Yönlendirmenizi sistemin erişim reddedilen rotasından oluşturun.

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

Bu sizi Drupal standart erişim reddedildi sayfasına götürür. Güzergah system.routing.ymlözünde tanımlanmıştır .

En iyi cevap, aradığınız şey olabilecek kırık görünümlü tarayıcı tabanlı bir Erişim Reddedildi. Drupal kullanıcı arayüzünüzün gösterilmesini istiyorsanız, yukarıdakileri kullanın.


0

Bir sayfadan şunları kullanabilirsiniz:

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

gibi: http://www.drupal8.ovh/en/tutoriels/88/page-redirection-on-drupal-8

Veya bir gönderiden:

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

Ardından 'your.module.route.name' erişim iznini yapılandırın

Erişim iznini nasıl yapılandıracağınızı bilmiyorsanız, şunları kontrol edin: http://www.drupal8.ovh/en/tutoriels/66/create-a-custom-permission-drupal-8


$ Response = new Response ('', Response :: HTTP_FORBIDDEN); $ event-> setResponse ($ yanıt); bu kullanıcıya yalnızca beyaz bir sayfa gösterir. Bu çok daha az bilgi. Drupal'dan varsayılan "erişim reddedildi" sayfasını göstermek istiyorum.
jepster
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.