2014-10-08 18 views
14

Voglio tornare nel mio RandomController::indexAction() una risposta XML:Symfony Controller - Come restituire la risposta XML?

return new Response($this->renderView(
    'AcmeRandomBundle:Random:index.xml.twig', 
    array(
     'randomParameter' => $randomParameter 
    ) 
)); 

dove index.xml.twig è così:

<?xml version="1.0" encoding="UTF-8"?> 
<randomTag> 
    {{ randomParameter }} 
</randomTag> 

Quando voglio aprire questa azione in Firefox, ottengo in Firebug:

<html> 
    <body> 
    <randomTag> 
     randomValue 
    </randomTag> 
    </body> 
</html> 

Come restituire la risposta XML corretta?

+0

Come fare costruisci '$ randomParameter'? – COil

+0

questa è una stringa casuale totalmente casuale, ad esempio $ randomParameter = "randomParameter": P Penso che non sia importante in questo caso;) – user3766478

+0

Ma non capisco perché 'randomParameter' sia rimasto non tradotto da Twig. Dovrebbe funzionare anche la risposta non era XML ma HTML. – COil

risposta

36

Prova ad aggiungere corretta intestazione sul oggetto Response come:

$response->headers->set('Content-Type', 'xml'); 

In caso contrario, aggiungere l'annotazione corretta (defaults) del metodo di controllo come in questo esempio:

/** 
    * @Route("/hello/{name}", defaults={"_format"="xml"}, name="_demo_hello") 
    * @Template() 
    */ 
    public function helloAction($name) 
    { 
    return array('name' => $name); 
    } 

Look at the guide for further explaination

+1

Ho usato 1st, e funziona bene, quindi grazie :) – user3766478

+0

Ciao @ user3766478 per favore considera di alzare la mia risposta se lo trovi utile – Matteo

+1

Non ho mai parlato della proprietà _format dei valori predefiniti - Ho sempre dovuto eliminare annotazioni il modello prima perché avevo bisogno di usare l'oggetto risposta. Grazie per segnalarlo! –

Problemi correlati