想象一下,我有一个文章实体 并且在此实体中有一个report属性,它是一个json_array类型。
Json_array的数据可能像是
{" KEY1":"值1"" KEY2" {" K1":" V1"&#34 ; K2"" V2" ...}," KEY3":[" V1"" V2"&#34 ; V3" ...] ...}
。
我的意思是json_array可能包含简单的键:值
或者值也可能包含键:vaule
或值可能是数组。
现在我不知道如何使用symfony表单来渲染和保存这些json_array,就像其他普通属性(例如标题)一样。
同时,我想管理密钥标签名称意思名称就像更改标题字段的标签一样
如何实现这一点,我感到非常困难。
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;
}
答案 0 :(得分:1)
也许你可以使用json_decode从json传递到数组,然后以你可以使用的形式传递:
->add('someField', null, array('mapped' => false))
成功地用这个值做了一些事情
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// some awesome code here
}
希望这可以帮到你。
罗杰
答案 1 :(得分:1)
您可以创建数据类型来管理报告字段:
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';
}
}
然后声明新数据类型:
# 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 }
最后在表单中使用这个新的dataType:
->add('reports',
'collection',
array(
'type'=>'report',
'prototype'=>true,
'allow_add'=>true,
'allow_delete'=>true,
'options'=>array(
)
)
)