- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是 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/
根据文档: The container is available in any traditional Symfony2 controller where you can access the ser
我在反序列化学说集合的序列化集合时遇到问题。找不到有关该内容和任何主题的文档,而且我是 JMSSerializer 的新手。当我尝试反序列化时: $collection = $serializer->
当尝试序列化使用特征的模型时,JMSSerializer 不会序列化该特征包含的属性。我正在使用 yaml 配置序列化程序,但它似乎无法正常工作。 trait IdentityTrait {
我是 SF2 社区的新人,所以请放轻松 ;) 我遇到了 JMSSerializerBundle 和表单/数组的问题。我花了两天时间自己想办法解决这个问题,但没有成功,我决定将其发布到群组中。 我正在构
我有端点 postOrder - 创建实体订单。在实体顺序中,我有 DateTime 类型的字段,我想当有人写字符串而不是 DateTime 时,我有 "Not valid, should be Da
我想使用 JMSSerializer 处理序列化和反序列化的单个对象属性。假设我们有这个类: class Task { const STATUS_PENDING = 0; const
我正在使用 JMSSerializer 反序列化一个 JSON 请求,但我在多对一关系方面遇到了麻烦。我想从给定的 id 反序列化关系实体。例子: Class Game { /** * @var T
我的 Symfony2 API 使用 FOSRestBundle 和 JMSSerializer,带有属性注释,但很多时候我不想公开每个属性。我知道 JMS 有排除组,但我不知道如何将它们包含在我的
我正在尝试将 JMSSerializer 用作独立库以将来自 API 的 JSON 响应映射到我的模型类,但遇到了一些问题。 执行以下代码会导致异常: userId; } public
成功将 json 字符串反序列化为具有关联的 Doctrine 实体后。当持续存在时,Doctrine 总是将这些关联检测为“新实体”。如何仅通过 ID 更新关联,而不更改相关实体值(如果有任何更改)
我正在尝试使用 ExclusionPolicy,但我不断收到“注释不存在或无法自动加载”错误。 这是抛出的确切错误: [Semantical Error] The annotation "@JMS\S
我正在使用 JMS 序列化和反序列化我的实体我有一个批处理过程来生成一个 json 文件,其他人读取该文件 我的实体有一个 DateTime 字段,如下所示 /** * @var \DateTime
我正在使用 Symfony2、Doctrine、FOSRestBundle 和 JMSSerializer 构建 REST API。 我遇到的问题是在序列化我的实体时,序列化程序会引入任何相关实体。例
我正在使用 Symfony 4 和 FOSRestBundle 构建 API。我有非常基本的关系: 实体:User.php /** * @ORM\Entity(repositoryClass="App
symfony 赞助的项目\Doctrine\ORM\Mapping\Driver\SimplifiedYamlDriver 在我的项目中非常有用,它可以使实体文件名保持简洁。但是,JMSSerial
如何在使用 jmsserializerbunlde 反序列化 json 时强制执行 bool 类型检查?即我如何禁止输入,如: {"boolField": "false"} 从反序列化和类型转换为 b
对于我拥有的任何表单,我都需要有一个通用的 JSON 错误表示。 我已经阅读了其他解决方案,例如 how to return json encoded form errors in symfony .
我有返回任务/公司/笔记/等的 REST api。在本地主机上它工作正常,无论我写什么任务描述或公司名称,但我把我的应用程序放在服务器上,当我使用像“łźążćę”这样的标志时,出现错误 您的数据无法
我是一名优秀的程序员,十分优秀!