几天后,我找到了自己问题的答案.赏金并没有帮助它更快,但嘿,有一个解决方案! ; O)
事实证明它非常简单.我实际上并没有在这个特定问题上找到很多东西,所以如果你需要类似的东西,这里就是.
在具有此json_array的实体类中,定义所有需要的键,如下所示:
/**
* @var array
*
* @ORM\Column(name="questionnaire", type="json_array", nullable=true)
*/
private $questionnaire = [
'favPet'=>'',
'favFood'=>'',
'favColor'=>''
];
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('email', EmailType::class)
->add('phone')
->add('address')
->add('favPet',TextType::class,[
'label'=>'Fav pet',
'property_path'=>'questionnaire[favPet]'
])
->add('favFood',TextType::class,[
'label'=>'Fav food',
'property_path'=>'questionnaire[favFood]'
])
->add('favColor',TextType::class,[
'label'=>'Fav color',
'property_path'=>'questionnaire[favColor]'
])
;
}
而symfony将处理剩下的事情.因为我们使用json_array作为类型,symfony将处理json_encode / json_decode事物.为了让symfony在编辑模式下映射/填充值,属性必须定义它的键.否则你会收到错误:
PropertyAccessor requires a graph of objects or arrays to operate on, but it found type “NULL” while trying to traverse path
然后在twig模板中你可以这样做:
{{ user.questionnaire.favPet }}
就是这样! :O))
至于JSON或实体.我知道我没有写任何实体,但我没有下定决心.经过一些IRC对话,阅读和https://stackoverflow.com/a/4013207/531099我可能会选择EAV.因此,如果您在JSON与实体之间做出决定,请将EAV添加到比赛中.