如何在 Symfony Form 中通过会话获取表单数据

How to get form data with session in Symfony Form

几个小时以来我一直在寻找解决方案。我正在使用 Symfony 3.2。

我正在使用 Symfony 表单来显示数据-table(在表单中选择了不同的过滤器)Ajax => 没有提交按钮。

我可以访问数据的不同结果-table以查看更多信息。

我想要的是,当我通过单击按钮离开详细信息页面并返回研究页面时,我可以将我选择的所有过滤器保留在历史记录中。

我想使用会话,但实际上,它似乎没有影响。下面是一些代码。

控制器:

    public function indexAction(Request $request)
        {
            $form = $this->createSearchForm();
    
            $request->getSession()->set('form_data', $form->getData());

            $form->handleRequest($request);

            $form->setData($request->getSession()->get('form_data'));
   
            $this->datatable($form->getData());
    
            return $this->render('backend/jobOffer/index.html.twig', [
                'form' => $form->createView()
            ]);
        }

表格类型

 public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('publicationState', ChoiceType::class, [
                'label'                     => 'backend.job_offer.publication_state',
                'required'                  => false,
                'choices'                   => JobOffer::getPublicationStateChoices(),
                'choice_translation_domain' => 'choices',
            ])
            ->add('job', Select2EntityType::class, [
                'label'         => 'backend.job',
                'required'      => false,
                'class'         => 'AppBundle:Job',
                'text_property' => 'label',
                'remote_route'  => 'job_autocomplete',
            ])
            ->add('ids', HiddenType::class, [
                'required'                  => false,
            ])
   }

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults([
        'csrf_protection' => false,
        'method'          => 'GET',
    ]);
}

我有一个问题,在我的表单生成器中有一个名为“job”的 EntityType(或 Select2EntityType)字段,但我无法在我的会话中获取该字段的内容。此字段显示输入 2 个字母后的自动完成数据列表,我们可以选择其中一个工作。

而且,当我刷新页面时,我丢失了所有过滤器,但我应该将它们存储在会话中?

在此先感谢您的帮助,

是的,您可以使用 $form->getData(),但要做到这一点,您需要根据文档 here 使用 if ($form->isSubmitted() && $form->isValid()) { 等进行此操作。