您可以使用
json
列为数据创建实体:
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
class Test
{
private $id;
private $data;
public function getId(): ?int
{
return $this->id;
}
public function getData(): ?array
{
return $this->data;
}
public function setData(?array $data): self
{
$this->data = $data;
return $this;
}
}
有两种表单:第一种是用于实体,第二种是用于数据收集项:
App\Form\Test
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type as FormType;
class Test extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('data', FormType\CollectionType::class, [
'allow_add' => true,
'allow_delete' => true,
'entry_type' => 'App\\Form\\Data',
'label' => 'Data',
])
->add('save', FormType\SubmitType::class, [
'label' => 'Save',
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => 'App\\Entity\\Test',
]);
}
}
应用程序\Form\数据
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type as FormType;
class Data extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('from', FormType\TextType::class, [
'label' => 'from',
])
->add('to', FormType\TextType::class, [
'label' => 'to',
]);
}
public function configureOptions(OptionsResolver $resolver)
{
}
}
在控制器中
$test = $this->getDoctrine()->getRepository('App:Test')->find(1);
$form = $this->createForm(\App\Form\Test::class, $test, []);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
dump($form->getData());
$this->getDoctrine()->getManager()->flush();
}
{{ form_start(form) }} {{ form_row(form) }}
但是在浏览器中看不到字段。 - undefined{% for fields in form.data %}-
{{ form_errors(fields) }}
{{ form_widget(fields) }}
{% endfor %}
{{ form_end(form) }}[{"to": "01/16/2010", "from": "12/31/2009"}, {"to": "02/16/2011", "from": "02/10/2011"}]
。还要清除Doctrine元数据缓存php ./bin/console doctrine:cache:clear-metadata
。 - undefined