我是 SF2 社区的新手,所以请放轻松;)
我遇到了 JMSSerializerBundle 和表单/数组的问题。我花了两天时间试图自己弄清楚,但没有任何成功,我决定将其发布到小组。
我正在构建一个简单的测试应用程序,它可以让我了解这些东西是如何工作的。现在是 API 的时候了。我正在使用 FOSRestBundle,效果很好。我的整个“应用程序”运行良好(开发非常快速和有效),我已经学会了如何使用安全组件、防火墙、路由、Doctrine(尽管我过去曾使用过它),编写自定义身份验证提供程序 - 我'我停留在 API,事实上,它的一部分。
表单问题:我在我的 APIBundle 中创建了简单的 ArticleController(请忽略文本响应,我刚刚在调试时删除了我的代码以使其更具可读性):
namespace Veron\ApiBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use FOS\RestBundle\View\View;
use Veron\ApiBundle\Form\Type\ArticleType;
use Veron\CoreBundle\Entity\Article;
class ArticleController extends Controller
{
public function createAction()
{
return $this->processForm(new Article());
}
private function processForm(Article $article)
{
$em = $this->getDoctrine()->getManager();
$form = $this->createForm(new ArticleType(), $article, array(
'csrf_protection' => false
));
$form->bind($this->getRequest());
if ($form->isValid()) {
return new Response('Everything ok');
}
$view = View::create($form, 400);
return $this->get('fos_rest.view_handler')->handle($view);
}
}
如您所见,我还有一个 ArticleType 表单类:
namespace Veron\ApiBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title')
->add('description')
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Veron\CoreBundle\Entity\Article',
'csrf_protection' => false,
));
}
public function getName()
{
return 'article';
}
}
问题是什么?在以 XML 或 JSON 格式发送请求时 - 当表单数据未经过验证时 - 我收到错误(由 JMSSerializer 格式化):
JSON 示例:
{"errors":["This value should not be blank."],"children":{"title":{"errors":["This value is too short. It should have 5 character or more."]},"description":{"errors":["This value should not be blank."]}}}
XML 示例:
<?xml version="1.0" encoding="UTF-8"?>
<form name="article">
<errors>
<entry><![CDATA[This value should not be blank.]]></entry>
</errors>
<form name="title">
<errors>
<entry><![CDATA[This value should not be blank.]]></entry>
</errors>
</form>
<form name="description">
<errors>
<entry><![CDATA[This value should not be blank.]]></entry>
</errors>
</form>
</form>
我的第一个问题是:是否有任何自动化方法来更改序列化表单错误的输出?
我也有一个问题,与第一个有关,我想。返回单个对象时,我返回了以下 XML 结构:
<article>
<id>10</id>
<title>Test article</title>
</article>
返回数组(多篇文章)时,输出为:
<result>
<entry>
<id>1</id>
...
</entry>
<entry>
<id>10</id>
...
</entry>
</result>
第二个问题:如何更改响应 XML/JSON 结构?