ใน Drupal 7 ฉันใช้รหัสต่อไปนี้
function my_goto($path) {
drupal_goto($path, array(), 301);
}
ฉันควรใช้รหัสใดใน Drupal 8
ใน Drupal 7 ฉันใช้รหัสต่อไปนี้
function my_goto($path) {
drupal_goto($path, array(), 301);
}
ฉันควรใช้รหัสใดใน Drupal 8
คำตอบ:
นี่คือรหัสที่ควรใช้ใน Drupal 8 ดูการเปลี่ยนแปลงบันทึกสำหรับข้อมูลเพิ่มเติม
use Symfony\Component\HttpFoundation\RedirectResponse;
function my_goto($path) {
$response = new RedirectResponse($path);
$response->send();
return;
}
use Symfony\Component\HttpFoundation\RedirectResponse;
เพื่อสร้างการตอบสนองของ Anu Mathew ;
ในการเพิ่มรหัสสถานะเป็นเพียงพารามิเตอร์ตัวที่สองในคลาส RedirectResponse
use Symfony\Component\HttpFoundation\RedirectResponse;
function my_goto($path) {
$response = new RedirectResponse($path, 302);
$response->send();
return;
}
ฉันไม่ได้ทำงานใน drupal 8 แต่ตามเอกสารdrupal_goto
ถูกลบออกจาก Drupal 8
ในสถานที่ที่drupal_goto
คุณต้องเขียน:
return new RedirectResponse(\Drupal::url('route.name'));
และบางสิ่งเช่นนี้พร้อมพารามิเตอร์:
return new RedirectResponse(\Drupal::url('route.name', [], ['absolute' => TRUE]));
ตรวจสอบที่นี่https://www.drupal.org/node/2023537และคลาส RedirectResponse
\Drupal::url('route.name')
ด้วย URL ของคุณหรืออาจเป็น URL แบบสัมบูรณ์
สิ่งนี้สามารถทำได้โดยการใช้ประโยชน์จาก Symphonies ในตัว EventDispatcher Component สิ่งที่คุณต้องทำคือสร้างโมดูลที่กำหนดเอง เพิ่มไฟล์ services.yml ของคุณและกำหนดค่าบริการที่เหมาะสม
services:
mymodue.subscriber:
class: Drupal\my_module\EventSubscriber
tags:
- { name: event_subscriber }
ในไดเรกทอรีโมดูล src ของคุณเพิ่มสร้างคลาส EventSubscriber.php และอธิบายวิธีการของคุณที่นี่
<?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;
}
รหัสเปลี่ยนเส้นทางที่ทำงานอย่างสมบูรณ์แบบสำหรับฉันมีดังต่อไปนี้:
$response = new RedirectResponse($path);
return $response->send();
ในกรณีอื่น ๆ ฉันได้รับข้อยกเว้นหรือข้อผิดพลาดบางอย่างตัวอย่างเช่น: LogicException: ตัวควบคุมจะต้องตอบกลับ ...
หรือ
https://www.drupal.org/project/drupal/issues/2852657
มีการสนทนาเกี่ยวกับเรื่องนี้อยู่แล้วหวังว่าจะช่วยได้!
สิ่งนี้ใช้ได้สำหรับการเปลี่ยนเส้นทางภายในหรือภายนอก:
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();