Di Drupal 7, saya menggunakan kode berikut.
function my_goto($path) {
drupal_goto($path, array(), 301);
}
Kode apa yang harus saya gunakan di Drupal 8?
Di Drupal 7, saya menggunakan kode berikut.
function my_goto($path) {
drupal_goto($path, array(), 301);
}
Kode apa yang harus saya gunakan di Drupal 8?
Jawaban:
Ini adalah kode yang harus digunakan dalam Drupal 8. Lihat perubahan Record untuk info lebih lanjut.
use Symfony\Component\HttpFoundation\RedirectResponse;
function my_goto($path) {
$response = new RedirectResponse($path);
$response->send();
return;
}
use Symfony\Component\HttpFoundation\RedirectResponse;
Untuk membangun di atas tanggapan Anu Mathew ;
Untuk menambahkan kode status, ini hanya param kedua di kelas RedirectResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
function my_goto($path) {
$response = new RedirectResponse($path, 302);
$response->send();
return;
}
Saya belum bekerja di drupal 8, tetapi karena dokumentasinya drupal_goto
dihapus dari Drupal 8.
Di tempat drupal_goto
Anda perlu menulis:
return new RedirectResponse(\Drupal::url('route.name'));
dan sesuatu seperti ini dengan parameter:
return new RedirectResponse(\Drupal::url('route.name', [], ['absolute' => TRUE]));
Periksa di sini https://www.drupal.org/node/2023537 dan kelas RedirectResponse
\Drupal::url('route.name')
dengan url Anda atau mungkin url absolut.
Ini dapat dicapai dengan memanfaatkan Komponen EventDispatcher simfoni bawaan. Yang harus Anda lakukan adalah membuat modul khusus. Tambahkan file services.yml Anda dan berikan konfigurasi layanan yang sesuai.
services:
mymodue.subscriber:
class: Drupal\my_module\EventSubscriber
tags:
- { name: event_subscriber }
di direktori modul src Anda tambahkan buat kelas EventSubscriber.php Anda dan jelaskan metode Anda di sini.
<?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;
}
Kode pengalihan yang berfungsi dengan baik untuk saya adalah sebagai berikut:
$response = new RedirectResponse($path);
return $response->send();
Dalam kasus lain saya mendapatkan semacam pengecualian atau kesalahan, misalnya: LogicException: Pengontrol harus mengembalikan respons ...
ATAU
https://www.drupal.org/project/drupal/issues/2852657
Sudah ada diskusi tentang itu, semoga bisa membantu!
ini berfungsi untuk pengalihan internal atau eksternal:
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();