我正在构建一个以多种格式呈现内容的 Web 服务,基本上是 json、xml 和 html(仅用于测试,不用担心)。
JSON 和 HTML 渲染工作正常,我刚刚在我的实体中添加了一个“toArray()”方法来渲染它。(我猜/希望这是最好/唯一的方式,至少对于 JSON 导出?!)
但是我在 XML 渲染方面遇到了一些麻烦。(我很抱歉,但我讨厌那种语言,通常从不使用它来导出数据,但这似乎是这个项目的要求。)我调用一个视图,例如命名为 MyBundle:MyController:myView.xml.twig ,并得到一个我无法修复的错误......
此页面包含以下错误:
第 2 行第 1 列的错误:文档末尾的额外内容
下面是第一个错误之前的页面渲染。
我在谷歌上搜索了一下,这似乎是一个常见的 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>