array实体类型和保存使用形式

array实体类型和保存使用形式

本文介绍了symfony的渲染json_array实体类型和保存使用形式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

想象一下,我有一篇文章的实体。结果
而在这个实体有一个报告属性,这是一个json_array类型。

Json_array的数据可能会喜欢的结果
{KEY1:值1,KEY2:{K1:V1,K2,第2版...},KEY3:[V1,V2,V3 ...] ...}。结果
我的意思是json_array可能包含简单的键:值结果或值可能也包含键:vaule结果或值可能的数组结果

现在我不知道怎么用symfony的形式来呈现和保存这些json_array像其他正常的属性(如标题)。结果,同时,我想与意义的名字来管理密钥标签名称就像更改标题字段的标签。结果
如何实现这一点,我觉得很困难。

 类文章
{
    / **
     * @var INT
     *
     * @ORM \\列(名称=ID,类型=​​整数)
     * @ORM \\标识
     * @ORM \\ GeneratedValue(策略=AUTO)
     * /
    私人的$ id;    / **
     * @var串
     *
     * @ORM \\列(名称=标题,键入=字符串,长度= 255)
     * /
    私人$称号;    / **
     * @var阵列
     *
     * @ORM \\列(名称=报告,键入=json_array)
     * /
    私人$报告;}


解决方案

您可以创建一个数据类型来管理报表字段:

 命名空间的Acme \\ TestBundle \\表格\\型号;使用的Symfony \\分量\\表格\\ AbstractType;
使用的Symfony \\分量\\表格\\ FormBuilderInterface;
使用的Symfony \\分量\\ OptionsResolver \\ OptionsResolverInterface;    类扩展的ReportType AbstractType
    {
        公共职能buildForm(FormBuilderInterface $建设者,数组$选项)
        {
            $建设者
                 - >添加('键1',TextType ::类,阵列('标签'=>'K1'))
                 - >添加(键2,TextType ::类,阵列('标签'=>'K2'))
            ;
        }        公共职能的getName()
        {
            回报报告;
        }
    }

然后宣布新的数据类型:

 #的src / Acme的/ TestBundle /资源/配置/ services.yml
服务:
    acme_test.form.type.report:
        类:ACME \\ TestBundle \\表格\\型号\\的ReportType
        标签:
             - {名称:form.type,别名:报告}

终于在您的形式使用这个新的数据类型:

   - >添加('报告',
            '采集',
            阵列(
                '型'= GT;报告,
                '原型'= GT;真实的,
                allow_add'=>真实的,
                allow_delete'=>真实的,
                '选项'=>阵列(
                )
            )
        )

Imagine I have an Article entity.
And in this entity have a report attribute which is an json_array type.

Json_array's data may like
{"key1":"value1","key2":{"k1":"v1","k2","v2"...},"key3":["v1","v2","v3"...]...}.
I mean the json_array may contains simple key:value
or the value may also contains key:vaule
or the value may an array.

Now I don't know how to use symfony form to render and save these json_array like other normal attribute(e.g.,title).
At the same time,I want to manage the key label name with an meaning name just like change the title field's label.
How to achieve this,I feel very difficult.

class Article
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="title", type="string", length=255)
     */
    private $title;

    /**
     * @var array
     *
     * @ORM\Column(name="report", type="json_array")
     */
    private $report;

}
解决方案

you can create a data type to manage your report field :

namespace Acme\TestBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

    class ReportType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('key1',TextType::class,array('label' => 'K1'))
                ->add('key2',TextType::class,array('label' => 'K2'))
            ;
        }

        public function getName()
        {
            return 'report';
        }
    }

Then declare the new data type :

# src/Acme/TestBundle/Resources/config/services.yml
services:
    acme_test.form.type.report:
        class: Acme\TestBundle\Form\Type\ReportType
        tags:
            - { name: form.type, alias: report }

And finally use this new dataType in your form :

->add('reports',
            'collection',
            array(
                'type'=>'report',
                'prototype'=>true,
                'allow_add'=>true,
                'allow_delete'=>true,
                'options'=>array(
                )
            )
        )

这篇关于symfony的渲染json_array实体类型和保存使用形式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-03 10:19