Kullanıcıları farklı bir sayfaya yönlendirmek için hangi işlevi / yöntemi kullanabilirim?


12

Drupal 7'de aşağıdaki kodu kullanıyorum.

function my_goto($path) { 
  drupal_goto($path, array(), 301);
}

Drupal 8'de hangi kodu kullanmalıyım?


3
drupal.org/node/2023537 , drupal_goto () için değişiklik kaydıdır, belirli bir işlevin yerini değiştirmeyi her aradığınızda önce oraya bakın.
Berdir

Yanıtlar:



8

Anu Mathew'in cevabı üzerine inşa etmek için ;

Bir durum kodu eklemek için, bu kod RedirectResponse sınıfındaki ikinci parametredir;

use Symfony\Component\HttpFoundation\RedirectResponse;

function my_goto($path) { 
  $response = new RedirectResponse($path, 302);
  $response->send();
  return;
}

1
Benim için bu sadece bir kez çalışıyor gibi görünüyor ve tekrar çalışmasını istediğiniz her zaman temizlenmiş önbellek gerekir. Bunun etrafında bir yol var mı?
Matt


4

drupal_gotoDrupal 8'de henüz çalışmadım ama belgelere göre Drupal 8'den kaldırıldı.

Yerine drupal_gotoyazman gerek:

return new RedirectResponse(\Drupal::url('route.name'));

ve parametrelerle böyle bir şey:

return new RedirectResponse(\Drupal::url('route.name', [], ['absolute' => TRUE]));

Https://www.drupal.org/node/2023537 ve sınıf RedirectResponse'yi buradan kontrol edin


Cevabınız için teşekkürler.Ama geçerli url'den rota adını nasıl alabilirim (çünkü url yapılandırma formunu kullanarak ayarlanıyor)
Anu Mathew

Yani yönlendirme yolu dinamik mi ???
Sumit Madan

Evet, hakkınız dinamik ..
Anu Mathew

Tamam \Drupal::url('route.name'), URL'nizle veya belki de mutlak URL'nizle değiştirmeyi deneyin .
Sumit Madan

yeni RedirectResponse ($ absolute_url) döndür; benim için çalıştı :) Ama gösteren "yönlendirme etmektir example.com/absolute_url ekranda" mesajı
Anu Mathew

4

Bu, yerleşik senfoni EventDispatcher Bileşeni kullanılarak sağlanabilir. Tek yapmanız gereken özel bir modül oluşturmak. Services.yml dosyanızı ekleyin ve uygun servis yapılandırmasını sağlayın.

services:
  mymodue.subscriber:
    class: Drupal\my_module\EventSubscriber
    tags:
      - { name: event_subscriber }

modül src dizininizde EventSubscriber.php sınıfınızı oluşturun ve yöntemleri burada açıklayın.

    <?php
       use Symfony\Component\HttpFoundation\RedirectResponse;

        public function checkForCustomRedirect(GetResponseEvent $event) {     
            $route_name = \Drupal::request()->attributes->get(RouteObjectInterface::ROUTE_NAME);
            if($route_name === 'module.testPage') {
              $event->setResponse(new RedirectResponse($url, $status = 302,$headers);
            }
         }

          /**
           * {@inheritdoc}
           */
        public static function getSubscribedEvents() {
            $events = [];
            $events[KernelEvents::REQUEST][] = array('checkForCustomRedirect');
            return $events;
        }

$ url tanımlanmadı.
Dan Shumaker

1

Benim için mükemmel çalışan yönlendirme kodu şudur:

$response = new RedirectResponse($path);
return $response->send();

Diğer durumlarda, bazı istisnalar veya hatalar alıyorum, örneğin: LogicException: Denetleyici bir yanıt döndürmelidir ...

VEYA

https://www.drupal.org/project/drupal/issues/2852657

Bu konuda zaten bir tartışma var, umarım yardımcı olur!


0

dahili veya harici yönlendirme için çalışır:

use Symfony\Component\HttpFoundation\RedirectResponse;
use Drupal\Core\Url;

   $url = Url::fromUri('internal:/node/27'); // choose a path
   // $url =  Url::fromUri('https://external_site.com/');
    $destination = $url->toString();
    $response = new RedirectResponse($destination, 301);
    $response->send();
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.