2013-06-18 3 views
0

Я создаю веб-сервис, который отображает контент в нескольких форматах, в основном json, xml и html (для тестирования только, не беспокойтесь об этом).twig-render xml content with loop (даже пустой контент)

JSON и HTML-рендеринги отлично работают, я только что добавил метод toArray() в своих объектах для его рендеринга. (я думаю/надеюсь, что это лучший/единственный способ, для экспорта JSON хотя бы?!)

Но у меня есть некоторые проблемы с рендерингом XML. (Я прошу прощения, но я ненавижу этот язык и обычно не использую его для экспорта данных, но, похоже, это требование для этого проекта.) Я вызываю вид, названный, например, MyBundle: MyController: myView.xml .twig, и получил сообщение об ошибке, что я не могу исправить ...

Эта страница содержит следующие ошибки:

ошибку на линии 2 в колонке 1: Дополнительное содержание в конце документа

Ниже представлена ​​рендеринг страницы до первой ошибки.

Я искал об этом в Google, и, похоже, это обычная ошибка синтаксического анализа XML, но я не знаю, в чем причина!

Несколько строк кода для получения дополнительной информации ...

Мой routing.yml файл маршрутизатора:

# Prefixed by /api 
# The final route will looks like /api/bookings.{_format} 
my_bundle_bookingpage: 
    pattern: /bookings.{_format} 
    defaults: { _controller: MyBundle:Bookings:index, _format: json } 
    requirements: 
     _format: json|xml|html 
     _method: 'get' 

Мои BookingsController.php:

<?php 

namespace My\Bundle\Controller; 

class BookingsController extends RestController 
{ 
    public function indexAction() 
    { 
     $request = $this->getRequest(); 
     $em = $this->getDoctrine()->getEntityManager(); 

     $bookings = $em->getRepository('MyCoreBundle:Booking')->findAll(); 

     $parameters = array(
      'bookings' => $bookings 
     ); 

     switch ($request->get('_format')) { 
      case 'html': 
      case 'xml': 
       return $this->render('MyBundle:Bookings:index.'.$request->get('_format').'.twig', $parameters); 
       break; 
      default: 
       foreach ($parameters['bookings'] as &$booking) { 
        $booking = $booking->toArray(); 
       } 
       return $this->generateJsonResponse($parameters, 200); 
       break; 
     } 
    } 
} 

И RestController, что только обеспечивает простой метод JsonResponse:

<?php 

namespace My\Bundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\HttpFoundation\JsonResponse; 

class RestController extends Controller 
{ 
    public function generateJsonResponse($content = array(), $status = 200) 
    { 
     $response = new JsonResponse($content, $status); 

     return $response; 
    } 
} 

И, наконец, myView.xml:

<bookings> 
    {% for booking in bookings %} 
     <booking> 
      <id>{{ booking.id }}</id> 
      <created>{{ booking.createdAt }}</created> 
      <updated>{{ booking.updatedAt }}</updated> 
      <name>{{ booking.name }}</name> 
      <date>{{ booking.datetime }}</date> 
      <notes>{{ booking.notes }}</notes> 
      <persons>{{ booking.persons }}</persons> 
     </booking> 
    {% endfor %} 
</bookings> 
+3

ли вы пытаетесь добавить ' ferdynator

+0

Да, извините, я не сказал этого, но это ничего не меняет, даже если эта строка XML присутствует или нет. –

ответ