2014-10-08 16 views
14

chcę wrócić w moim RandomController::indexAction() odpowiedź XML:Symfony Controller - Jak zwrócić odpowiedź XML?

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

gdzie index.xml.twig jest tak:

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

Kiedy chcę otworzyć tę akcję w Firefox, otrzymuję w Firebug

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

Jak zwrócić poprawną odpowiedź XML?

+0

Jak zrobić budujesz '$ randomParameter'? – COil

+0

to losowo losowy ciąg losowo losowy, na przykład $ randomParameter = "randomParameter": P Myślę, że to nie ma znaczenia w tym przypadku;) – user3766478

+0

Ale nie rozumiem, dlaczego 'randomParameter' pozostał nieprzetłumaczony przez Twig. Powinno działać nawet odpowiedź nie była XML, ale HTML. – COil

Odpowiedz

36

spróbuj dodać poprawny nagłówek na obiekcie odpowiedzi jak:

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

Inaczej dodać właściwą adnotację (defaults) od metody Controller jak w poniższym przykładzie:

/** 
    * @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

Użyłem 1, i to działa dobrze, więc dziękuję :) – user3766478

+0

Witam @ user3766478 proszę rozważyć, aby przekazać moją odpowiedź, jeśli okaże się przydatna – Matteo

+1

Nigdy nie nowość o właściwości _format domyślnych - Zawsze musiałem zlikwidować adnotacje szablon wcześniej, ponieważ potrzebowałem użyć obiektu odpowiedzi. Dzięki za wskazanie tego! –

Powiązane problemy