草庐IT

php - Symfony2 形式转 JSON 结构

coder 2024-04-12 原文

如何将 Symfony2 表单转换为 JSON 数据结构?寻找合适的 bundle 没有给我任何结果;

例子:

$builder
    ->add('name', 'text')
    ->add('password', 'password')
;

会产生类似的结果:

{
    fields: {
        name: {
            type: 'text'
        },
        password: {
            type: 'password'
        }
    }
}

$form = $this->createForm(new FormType(), new Entity()) 之后遍历表单中的每个元素没有帮助,找不到可以在其中定义的一些属性表单生成器。

最佳答案

我假设您希望在发布表单后在 Controller 中获取此信息,在这种情况下,您可以轻松地从表单对象中获取底层实体,如下所示:

$entity = $form->getData();

此时你可以手动将你想要的字段拉出到数组中并 json_encode() ,或者...实现 JsonSerializable实体中的接口(interface),然后直接 json_encode() 对象本身。

例如:

<?php

namespace FooApp/BarBundle/Entity;

use JsonSerializable;

class Baz implements JsonSerializable
{
    private $name;
    private $password;

    // ...

    function jsonSerialize()
    {
        return [
            'fields' => [
                'name'     => ['type' => $this->name],
                'password' => ['type' => $this->password],
            ],
        ];
    }
}

然后,在你的 Controller 中:

$entity = $form->getData();
$json = json_encode($entity);

调用 json_encode() 将自动调用 Baz::jsonSerialize() 并返回您定义的数组结构,该结构又是 JSON 编码的。

更新 2016-06-23

我偶然再次遇到这个问题 - 而且......我意识到我没有回答你的实际问题。

您不想将表单的基础实体转换为 JSON - 相反,您希望将表单结构表示为数据。对于误会,我深表歉意 - 希望我可以通过更新来纠正这一点。

这是一个概念验证,应该适用于非嵌套形式(尽管为这种情况创建递归版本或其他东西应该很简单)。但是,假设您实例化了一个表单,包含字段 namepassword,如下所示:

$form = $this->createForm(FooType::class, $foo);

然后应该可以迭代实例并导出结构的表示;例如:

$fields = ['fields' => []];

foreach ($form->all() as $field) {
    $name = $field->getName();
    $type = $field->getConfig()->getType()->getBlockPrefix();
    $fields['fields'][$name] = ['type' => $type];
}

echo json_encode($fields, JSON_PRETTY_PRINT);

产量:

{
    "fields": {
        "name": {
            "type": "text"
        },
        "password": {
            "type": "password"
        }
    }
}

希望这有帮助:)

关于php - Symfony2 形式转 JSON 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32882795/

有关php - Symfony2 形式转 JSON 结构的更多相关文章

  1. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  2. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  3. ruby-on-rails - 使用回形针的嵌套形式 - 2

    我有一个名为posts的模型,它有很多附件。附件模型使用回形针。我制作了一个用于创建附件的独立模型,效果很好,这是此处说明的View(https://github.com/thoughtbot/paperclip):@attachment,:html=>{:multipart=>true}do|form|%>posts中的嵌套表单如下所示:prohibitedthispostfrombeingsaved:@attachment,:html=>{:multipart=>true}do|at_form|%>附件记录已创建,但它是空的。文件未上传。同时,帖子已成功创建...有什么想法吗?

  4. ruby - 是否有用于序列化和反序列化各种格式的对象层次结构的模式? - 2

    给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最

  5. ruby-on-rails - 如何使用 Rack 接收 JSON 对象 - 2

    我有一个非常简单的RubyRack服务器,例如:app=Proc.newdo|env|req=Rack::Request.new(env).paramspreq.inspect[200,{'Content-Type'=>'text/plain'},['Somebody']]endRack::Handler::Thin.run(app,:Port=>4001,:threaded=>true)每当我使用JSON对象向服务器发送POSTHTTP请求时:{"session":{"accountId":String,"callId":String,"from":Object,"headers":

  6. ruby-on-rails - 一般建议和推荐的文件夹结构 - Sinatra - 2

    您将如何构建一个简单的Sinatra应用程序?我正在制作,我希望该应用具有以下功能:“应用程序”更像是一个包含所有信息的管理仪表板。然后另一个应用程序将通过REST访问信息。我还没有创建仪表板,只是从数据库中获取东西session和身份验证(尚未实现)您可以上传图片,其他应用可以显示这些图片我已经使用RSpec创建了一个测试文件通过Prawn生成报告目前的设置是这样的:app.rbtest_app.rb因为我实际上只有应用程序和测试文件。到目前为止,我已经将Datamapper用于ORM,将SQLite用于数据库。这是我的第一个Ruby/Sinatra项目,所以欢迎任何和所有建议-我应

  7. ruby - 用 YAML.load 解析 json 安全吗? - 2

    我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("

  8. ruby - 如何在 ruby​​ 中复制目录结构,不包括某些文件扩展名 - 2

    我想编写一个ruby​​脚本来递归复制目录结构,但排除某些文件类型。因此,给定以下目录结构:folder1folder2file1.txtfile2.txtfile3.csfile4.htmlfolder2folder3file4.dll我想复制这个结构,但不包含.txt和.cs文件。因此,生成的目录结构应如下所示:folder1folder2file4.htmlfolder2folder3file4.dll 最佳答案 您可以使用查找模块。这是一个代码片段:require"find"ignored_extensions=[".cs"

  9. ruby-on-rails - Rails 渲染带有驼峰命名法的 json 对象 - 2

    我在一个简单的RailsAPI中有以下Controller代码:classApi::V1::AccountsControllerehead:not_foundendendend问题在于,生成的json具有以下格式:{id:2,name:'Simpleaccount',cash_flows:[{id:1,amount:34.3,description:'simpledescription'},{id:2,amount:1.12,description:'otherdescription'}]}我需要我生成的json是camelCase('cashFlows'而不是'cash_flows'

  10. ruby - 使用 JSON gem 将自定义对象转换为 JSON - 2

    我正在学习如何使用JSONgem解析和生成JSON。我可以轻松地创建数据哈希并将其生成为JSON;但是,在获取一个类的实例(例如Person实例)并将其所有实例变量放入哈希中以转换为JSON时,我脑袋放屁。这是我遇到问题的例子:require"json"classPersondefinitialize(name,age,address)@name=name@age=age@address=addressenddefto_jsonendendp=Person.new('JohnDoe',46,"123ElmStreet")p.to_json我想创建一个.to_json方法,这样我就可以获

随机推荐