2015-04-20 13 views
12

Come posso reindirizzare a un URL esterno all'interno di un'azione symfony?Symfony reindirizza all'URL esterno

Ho provato questo opzioni:

1- return $this->redirect("www.example.com"); 

Errore: Nessun percorso trovato per "GET /www.example.com"

2- $this->redirect("www.example.com"); 

Errore: Il regolatore deve restituire una risposta (null dato) .

3- $response = new Response(); 
$response->headers->set("Location","www.example.com"); 
return $response 

No Error but blank page!

+0

In primo luogo si dovrebbe funzionare anche si può specificare quale sia la versione utilizzata –

+0

symfony/symfony v2.6.6 –

risposta

22

risposta alla tua domanda è in libro ufficiale di Symfony.

http://symfony.com/doc/current/book/controller.html#redirecting

public function indexAction() 
{ 
    return $this->redirect('http://stackoverflow.com'); 
    // return $this->redirect('http://stackoverflow.com', 301); - for changing HTTP status code from 302 Found to 301 Moved Permanently 
} 

Qual è la "URL"? Hai davvero definito il percorso per questo modello? In caso contrario, l'errore non trovato è assolutamente corretto. Se si desidera reindirizzare a un sito esterno, utilizzare sempre il formato URL assoluto.

+0

Quello che hai fornito è il reindirizzamento all'URL esistente nell'applicazione. Se osservate attentamente il titolo di OP, noterete che sta chiedendo informazioni su * external * Url. Dai un'occhiata alla mia risposta. – Artamiel

+0

Hai ragione. Ho malamente copiato un esempio dal documento ufficiale. – kba

+0

Questo NON risponde alla domanda, che è di reindirizzare a un url ESTERNO –

14

devi usare RedirectResponse invece di risposta

use Symfony\Component\HttpFoundation\RedirectResponse; 

E poi:

return new RedirectResponse('http://your.location.com'); 
+0

Questo era l'unico modo in cui ho potuto ottenere symfony per reindirizzare in modo tale che l'url del browser è cambiato (per il reindirizzamento interno) . – beterthanlife

+0

@beterthanlife Sono contento che ti sia stato utile. – Artamiel