JMSSerializer + 表单/数组

2024-06-24

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


使用 JMS Serializer 呈现表单错误是由此类处理的:https://github.com/schmittjoh/serializer/blob/master/src/JMS/Serializer/Handler/FormErrorHandler.php https://github.com/schmittjoh/serializer/blob/master/src/JMS/Serializer/Handler/FormErrorHandler.php。你也许可以自己写。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JMSSerializer + 表单/数组 的相关文章

  • 在 Zend Framework 中设置视图缩进

    在 Zend Framework 中 可以为 headMeta headLink 等设置缩进 我喜欢这个 我喜欢东西整齐 所以 现在我想在布局 phtml文件 导致视图脚本中的每个新行都用 X 制表符缩进 这是行不通的 有没有办法在 Zen
  • 如何用PHP显示分层的“NESTED SET”数据?

    我试图弄清楚如何使用 php 显示嵌套的 MySQL 数据 我已经设法搁置所有 叶节点 但后来我陷入困境 我需要显示一整棵树及其所有元素的关系 这是表格 category id name lft rgt 1 Saws 1 12 2 Chai
  • 使用 Symfony 和 VichUploader 将 base64 图像转换为图像文件

    在 symfony 中 我有一个实体Program 其具有属性image 上传图像 命名它们并将它们放入正确的目录中是通过VichUploaderBundle 该实体看起来像这样 NOTE This is not a mapped fiel
  • 基本的php问题。添加 javascript 到 .php 页面

    嗨 我不是 php 开发人员 我以前从未接触过它 但我被要求向网站添加谷歌购物车跟踪代码 当有人完成订单时 将被发送到 finishorder php 当我转到 finishorder php 文件时 它看起来像这样 include dir
  • 使用 laravel 拒绝 .composer/config 文件权限

    我在 ubuntu virtualbox 上有一个 laravel 项目 我曾经跑步composer update一切都很好 我不知道有什么变化可能会影响这一点 但现在当我跑步时composer update I get file get
  • 使用 2 个商户账户的 1 笔交易

    我需要设置一个账单支付系统 以允许使用 2 个商家帐户进行 1 笔交易 例如 1 个商家帐户附加到接收资金的客户 假设 30 美元的购买费用 并且附加我们将向帐单支付服务提供商收取 3 美元的帐单支付费用 因此 资金需要转入 2 个独立的商
  • 销毁Session但保留flashdata

    我在用坦克验证 http www konyukhov com soft tank auth 用于我的 CI 1 7 3 应用程序中的用户管理 一切工作正常 但我正在尝试设置flash message当用户注销时显示 问题是 this gt
  • Apache 在多个虚拟主机上运行 Zend Framework 时出现间歇性 500 错误

    我们已经在一个项目上工作了几个月 没有出现任何问题 直到最近进行了一系列更新 服务器运行 Amazon Linux AMI 版本 2010 11 1 Apache 2 2 16 和 PHP 5 3 3 该项目分为几个独立的开发人员分支 作为
  • php-fpm 需要在监狱环境中放置哪些系统文件才能在 ubuntu 上正常运行?

    我在 ubuntu 12 04 上使用 php5 fpm 并且为 nginx 托管的每个域都有单独的池和 chroot 位置 不过 我知道有些系统文件需要直接放在jail中 但是我需要哪些呢 我知道 dns 解析当前不起作用 并且我读过一些
  • WordPress 中的随机永久链接键

    我想为 WordPress 中的每个新帖子都有一个自定义永久链接 例如 http mysite com x5Kvy6 http mysite com x5Kvy6 如 bit ly 我尝试了这个小脚本 但它只在永久链接的帖子标题中添加了 5
  • 如何在会话过期后自动更新数据库而不刷新我的页面

    您需要刷新或单击该代码 然后它才会转到索引页面 并且在会话过期后更新数据库之前 如何让会话过期后自动更新数据库 使用户活跃度为0 而无需刷新或点击页面 idletime 3600 after 1hr the user gets logged
  • 检查 Laravel 模型是否已保存或查询是否已执行

    我见过很多人使用这种方式来检查 Laravel 模型是否已保存 所以现在我想知道这是否是一种安全的方法 我还可以检查下面的查询是否像这样执行 检查模型是否已保存 Eg myModel new User myModel gt firstnam
  • 在 PHP 中获取和设置(私有)属性,就像在 C# 中一样,无需使用 getter setter 魔术方法重载

    Summary 代码示例 Class People private property private name other methods not shown for simplicity 直线前进 让我假设 name is a PRIVA
  • YouTube api 的永久访问令牌?

    我已经浏览了用于身份验证的 Oauth 和 AuthSub 方法的 google 文档 并且我尝试通过 google 搜索此内容 但没有结果 对于 Facebook 您可以请求长度为 的访问令牌lifetime 这意味着您不必每隔几周就请求
  • 如何在 Windows 上以纯 PHP 形式提取 .tar 文件?

    我有一个 PHP 脚本 我想在 Windows 上运行 我需要提取 tar 文件 如何提取 tar 文件 我知道 PharData 类 它可以在 Linux 上运行 但不能在 Windows 上运行 我的脚本就死了 没有错误输出或任何东西
  • PHPExcel - 如何使用 preg_replace 替换文本

    我正在使用 PHPExcel 将数据库中的数据提取到组织好的 Excel 工作表中 除了一件事之外 一切都运转良好 我的数据库条目有时可能包含 HTML 标记 例如 strong strong br p p 等等 所以我设法让这个 PHP
  • 数据库记录的多级菜单

    我需要一些有关 PHP 的帮助 我有一个工作正常的多级 css 菜单 但现在我想根据数据库中的记录生成 菜单代码 div ul class dropdown li a href Link 1 a li li a href Link 2 a
  • 从套接字读取数据,发送响应并关闭

    我正在开发一个 c 和 php 项目 其中 PHP 脚本打开一个到 c 程序的套接字 c 程序将读取数据 然后发回响应 在 PHP 脚本中我有以下内容 echo Opening Client fp fsockopen 127 0 0 1 1
  • 一系列 unicode 点的正则表达式 PHP

    我正在尝试从字符串中删除所有字符 除了 字母数字字符 美元符号 下划线 代码点之间的 Unicode 字符U 0080 and U FFFF 通过这样做 我得到了前三个条件 preg replace a zA Z d foo 我如何去满足第
  • 无法在 PHP 中接收 JSON POST 请求

    我正在将 JSON 对象从 Java 传递到 PHP 我正在使用 jdk 1 8 和 WAMPserver 下面是Java代码 import java io IOException import org apache http client

随机推荐

  • Django 与其他 Python Web 框架相比?

    我几乎尝试过现有的每一个 Python Web 框架 我花了很长时间才意识到没有灵丹妙药的框架 每个框架都有自己的优点和缺点 我开始于蛇类 http snakelets sf net并衷心地享受能够在较低级别上控制几乎所有事情而无需大惊小怪
  • Dialogflow V2 Messenger 与多个消息集成

    我正在尝试在对 Dialogflow 的一次 Webhook 调用中发送多条消息 该消息应传递给 Messenger 现在 我的 Webhook 响应出现故障的 JSON 正文 fulfillmentText Text fulfillmen
  • 使用请求登录具有 javascript 登录表单的网站

    首先我要说的是我的编程经验很少 在过去几天尝试编写这个程序时 我学到了很多东西 我正在 Windows 7 上使用 PyCharm requests Beautiful Soup 和 lxml 运行 Python 2 7 我正在尝试从一个严
  • 最常见的已检查和未检查 Java 异常? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 据我了解 如果不逐一查找 API 文档 就无法找出方法抛出了哪些异常 由于这是不可能的 我想反向研究并询问您在处理时遇到的最常见的异常
  • 在 Mac 上的 IntelliJ IDEA 中更改基本代码完成的键盘快捷键

    There is very important shortcut for Basic Code Completion in IntelliJ IDE which assumed to be invoked as control space
  • 其他用户之间的 iCloud 共享 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 据我所知 iCloud 就像个人存储 您可以使用自己的 Apple ID 我想问的是 用户是否可以存储例如图像并与其他用户共享 这意味着类
  • css 中 (div#container) 和 (#container) 有什么区别

    众所周知 html标签中的id应该是唯一的 因此可以直接使用 container 但是我注意到一些开发人员会使用标签名称作为前缀 如下所示 div container 现在有区别吗 和性能有关系吗 或者这是最佳实践惯例 还是为了代码的易读性
  • 如何在 Android 上以编程方式删除文件?

    我在 4 4 2 上 尝试通过 uri 删除文件 图像 这是我的代码 File file new File uri getPath boolean deleted file delete if deleted boolean deleted
  • 如何让 Rscript 在非交互式 bash 模式下返回状态代码

    我正在尝试以 bash 脚本的形式从以非交互方式运行的 Rscript 中获取状态代码 此步骤是较大数据处理周期的一部分 其中涉及 db2 脚本等 所以我在脚本sample sh中有以下内容 Rscript verbose no resto
  • 通过 Lark 解析获取符号

    我正在尝试解析我正在编写的一些伪代码 但在获取符号值时遇到一些问题 它解析成功 但不会返回与 常规 字符相同的值 这是一个例子 gt gt gt from lark import Lark gt gt gt parser Lark oper
  • ASP.NET Core 中的自定义脚手架模板

    现在我知道了如何在 ASP NET Core MVC 中启用脚手架 请参阅在 ASP NET Core 中查看脚手架模板 https stackoverflow com questions 38108163 view scaffold te
  • C# 匿名类型

    据我所知 匿名类型没有自己的预定义类型 类型由编译器在编译时分配给它 并且在编译时分配的类型的详细信息在代码级别无法得知 这些细节是 CLR 本身已知的 我听说 CLR 中的这些匿名类型被视为仅是引用类型 所以我的问题是 在编译时是否会创建
  • React-native-maps 限制平移区域

    有没有办法将地图限制在特定区域 以便平移和缩放包含在该区域内 而外部的所有内容都被锁定 我想限制用户可以在地图上看到的区域 我通过react native maps使用谷歌地图https github com react community
  • Matlab中皮尔逊系数和协方差的计算

    我想计算皮尔逊相关系数 http en wikipedia org wiki Pearson product moment correlation coefficient在Matlab中 不使用Matlab的corr功能 简单地说 我有两个
  • ckeditor 验证空格

    我如何在 ckeditor 上实现验证以防止用户仅添加空格 今天内的任何答复将不胜感激 以下是迄今为止我尝试进行的验证 Save note from ckeditor input save note click function var n
  • django默认身份验证表单显示用户名而不是电子邮件

    我用 django 实现了我自己的用户登录表单 如下所示 from django contrib auth forms import AuthenticationForm class CustomUserLoginForm Authenti
  • Java 如何知道如何迭代数组

    String strs new String 1 2 6 for String s strs System out println s 这是一个关于java内部的问题 在上面的代码示例中 foreach 循环如何计算出数组的长度 数组实际上
  • 如何配置“git diff”以使用 emacs diff [重复]

    这个问题在这里已经有答案了 是否可以配置 git diff 以使用 emacs diff 如果是的话 你能告诉我怎么做吗 谢谢 看这个问题 如何使用视觉差异程序查看 git diff 输出 https stackoverflow com q
  • Cloud Function 会影响 Firebase 存储带宽使用吗?

    I am trying to figure out why firebase storage usage is far above my expectation 我的 Firebase 存储中只有很少的照片文件 只有大约 75 张照片 每张
  • JMSSerializer + 表单/数组

    我是 SF2 社区的新手 所以请放轻松 我遇到了 JMSSerializerBundle 和表单 数组的问题 我花了两天时间尝试自己解决这个问题 但没有成功 我决定将其发布到小组中 我正在构建一个简单的测试应用程序 它可以让我了解这些东西是