In Drupal 7, utilizzo il seguente codice.
function my_goto($path) {
drupal_goto($path, array(), 301);
}
Quale codice dovrei usare in Drupal 8?
In Drupal 7, utilizzo il seguente codice.
function my_goto($path) {
drupal_goto($path, array(), 301);
}
Quale codice dovrei usare in Drupal 8?
Risposte:
Questo è il codice che dovrebbe essere usato in Drupal 8. Vedi modifica Record per maggiori informazioni.
use Symfony\Component\HttpFoundation\RedirectResponse;
function my_goto($path) {
$response = new RedirectResponse($path);
$response->send();
return;
}
use Symfony\Component\HttpFoundation\RedirectResponse;
Per costruire sulla risposta di Anu Mathew ;
Per aggiungere un codice di stato, è solo il secondo parametro nella classe RedirectResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
function my_goto($path) {
$response = new RedirectResponse($path, 302);
$response->send();
return;
}
Non ho ancora lavorato con Drupal 8, ma secondo la documentazione drupal_goto
viene rimosso da Drupal 8.
Al posto di drupal_goto
te devi scrivere:
return new RedirectResponse(\Drupal::url('route.name'));
e qualcosa del genere con parametri:
return new RedirectResponse(\Drupal::url('route.name', [], ['absolute' => TRUE]));
Controlla qui https://www.drupal.org/node/2023537 e classe RedirectResponse
\Drupal::url('route.name')
con il tuo URL o forse con l'URL assoluto.
Ciò può essere ottenuto sfruttando Symphonies Component EventDispatcher integrato. Tutto quello che devi fare è creare un modulo personalizzato. Aggiungi il tuo file services.yml e fornisci la configurazione del servizio appropriata.
services:
mymodue.subscriber:
class: Drupal\my_module\EventSubscriber
tags:
- { name: event_subscriber }
nella directory src dei moduli aggiungere creare la classe EventSubscriber.php e descrivere qui i metodi.
<?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;
}
Il codice di reindirizzamento perfettamente funzionante per me è il seguente:
$response = new RedirectResponse($path);
return $response->send();
In tutti gli altri casi ricevo una sorta di eccezioni o errori, ad esempio: LogicException: il controller deve restituire una risposta ...
O
https://www.drupal.org/project/drupal/issues/2852657
C'è già una discussione al riguardo, spero che ti aiuti!
funziona per il reindirizzamento interno o esterno:
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();