gpt4 book ai didi

php - JMSSerializer + 表单/数组

转载 作者:搜寻专家 更新时间:2023-10-31 21:37:37 24 4
gpt4 key购买 nike

我是 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结构?

最佳答案

使用 JMSSerializer 呈现表单错误是在这个类中处理的:https://github.com/schmittjoh/serializer/blob/master/src/JMS/Serializer/Handler/FormErrorHandler.php .您可能可以自己编写。

关于结构,是的,你可以改变它,但你到底想做什么?您可以查看文档以了解更多信息:http://jmsyst.com/libs/serializer/master/reference/annotations (注意你也可以使用xml/yml配置,但是文档在注解上更完整)

关于php - JMSSerializer + 表单/数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15455823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com