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?
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?
Yanıtlar:
Bu, Drupal 8'de kullanılması gereken koddur. Daha fazla bilgi için bkz. Kayıt değiştirme .
use Symfony\Component\HttpFoundation\RedirectResponse;
function my_goto($path) {
$response = new RedirectResponse($path);
$response->send();
return;
}
use Symfony\Component\HttpFoundation\RedirectResponse;
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;
}
drupal_goto
Drupal 8'de henüz çalışmadım ama belgelere göre Drupal 8'den kaldırıldı.
Yerine drupal_goto
yazman 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
\Drupal::url('route.name')
, URL'nizle veya belki de mutlak URL'nizle değiştirmeyi deneyin .
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;
}
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!
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();