In Drupal 7 verwende ich den folgenden Code.
function my_goto($path) {
drupal_goto($path, array(), 301);
}
Welchen Code soll ich in Drupal 8 verwenden?
In Drupal 7 verwende ich den folgenden Code.
function my_goto($path) {
drupal_goto($path, array(), 301);
}
Welchen Code soll ich in Drupal 8 verwenden?
Antworten:
Dies ist der Code, der in Drupal 8 verwendet werden sollte. Weitere Informationen finden Sie unter Änderungsdatensatz .
use Symfony\Component\HttpFoundation\RedirectResponse;
function my_goto($path) {
$response = new RedirectResponse($path);
$response->send();
return;
}
use Symfony\Component\HttpFoundation\RedirectResponse;
Um auf Anu Mathews Antwort aufzubauen ;
Um einen Statuscode hinzuzufügen, ist dies nur der zweite Parameter in der RedirectResponse-Klasse.
use Symfony\Component\HttpFoundation\RedirectResponse;
function my_goto($path) {
$response = new RedirectResponse($path, 302);
$response->send();
return;
}
Ich habe noch nicht in Drupal 8 gearbeitet, aber gemäß der Dokumentation wurde drupal_goto
es aus Drupal 8 entfernt.
Anstelle von müssen drupal_goto
Sie schreiben:
return new RedirectResponse(\Drupal::url('route.name'));
und so etwas mit Parametern:
return new RedirectResponse(\Drupal::url('route.name', [], ['absolute' => TRUE]));
Überprüfen Sie hier https://www.drupal.org/node/2023537 und Klasse RedirectResponse
\Drupal::url('route.name')
Ihre URL oder vielleicht absolute URL zu ersetzen .
Dies kann erreicht werden, indem integrierte EventDispatcher-Komponenten für Symphonien genutzt werden. Sie müssen lediglich ein benutzerdefiniertes Modul erstellen. Fügen Sie Ihre Datei services.yml hinzu und geben Sie die entsprechende Dienstkonfiguration an.
services:
mymodue.subscriber:
class: Drupal\my_module\EventSubscriber
tags:
- { name: event_subscriber }
Fügen Sie im Verzeichnis src Ihrer Module Ihre EventSubscriber.php-Klasse hinzu und beschreiben Sie hier Ihre Methoden.
<?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;
}
Der für mich perfekt funktionierende Redirect-Code lautet wie folgt:
$response = new RedirectResponse($path);
return $response->send();
In allen anderen Fällen erhalte ich Ausnahmen oder Fehler, zum Beispiel: LogicException: Der Controller muss eine Antwort zurückgeben ...
ODER
https://www.drupal.org/project/drupal/issues/2852657
Es gibt bereits eine Diskussion darüber, hoffe das hilft!
Dies funktioniert für die interne oder externe Umleitung:
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();