如何在 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()) {
等进行此操作。
几个小时以来我一直在寻找解决方案。我正在使用 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()) {
等进行此操作。