首页 > 解决方案 > 如何在 Symfony 表单中通过会话获取表单数据

问题描述

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

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

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

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

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

控制器:

    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 个字母后显示自动完成数据列表,我们可以选择其中一项工作。

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

在此先感谢您的帮助,

标签: phpsymfony

解决方案


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


推荐阅读