时间:2011-03-28 22:00:07

标签: php xml arrays symfony1

我在数组中有简单的输出数据:

$result = array ('status'=>true, 'message'=>"123123");

我想以xml格式输出。在symfony中这样做的最佳方式是什么?

我知道我可以像这样手动输入字符串:

return $this->renderText('<xml><status>true</status><message>123123</message></xml>');

但我正在寻找更容易的东西。类似于json_encode(); : - )

2 个答案:

答案 0 :(得分:9)

我认为最好的方法是使用具有所需格式的模板(而不是简单的模板)。这样,您可以根据需要轻松更改格式,而无需附加到一个实现。此外,使用路由,只需一个操作即可自动定义必须使用的模板。例如,使用如下路线:

jobs:
  url: /api/jobs.:sf_format
  param: { module: api, action: list }
  requirements:
    sf_format: (?:xml|json|yaml)

通过 /api/jobs.xml 进行访问将使用 listSuccess.xml.php /api/jobs.json < em> listSuccess.json.php 和 /api/jobs.yaml listSuccess.yaml.php 。为每个人制作一个像

这样的模板
<!-- apps/frontend/modules/api/templates/listSuccess.xml.php -->
<?xml version="1.0" encoding="utf-8"?>
<jobs>
<?php foreach ($jobs as $url => $job): ?>
  <job url="<?php echo $url ?>">
<?php foreach ($job as $key => $value): ?>
    <<?php echo $key ?>><?php echo $value ?></<?php echo $key ?>>
<?php endforeach ?>
  </job>
<?php endforeach ?>
</jobs>

你只需要对列表操作进行正确的查询:)这样你就需要编写一点代码但你可以改变格式,如果你想要并且有多个输出(如xml,json,yaml等)通过制作适当的模板。使用这个想法我做了一个通用的REST服务,现在我只需要进行查询。这是Jobeet Web Services Example的简历,有关详细信息,请查看。

答案 1 :(得分:1)

根据XML输出的复杂程度,您绝对应该使用PHP XML库。否则,它会使用完整的堆栈框架,但你自己实现XML部分是一种精神分裂。 ;-)其余的我会坚持使用Pabloks的答案。你应该使用sf_format开关。