【发布时间】:2016-02-10 13:01:49
【问题描述】:
我正在 Symfony 中为我大学的编程课构建简单的汽车租赁应用程序。
在 URL /search 我向用户显示一个表单。现在,当表单被提交时,他的 /search 用户再次呈现了不同的模板
这是表单代码:
class SearchQueryType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('pickupCity', TextType::class)
->add('returnCity', TextType::class)
->add('pickupDateTime', DateTimeType::class, array(
'years' => range(2016,2017),
'error_bubbling' => true,
))
->add('returnDateTime', DateTimeType::class, array(
'years' => range(2016,2017),
'error_bubbling' => true,
))
->add('save', SubmitType::class, array(
'label' => 'Find Car',
'attr' => array(
'class' => 'btn-secondary btn-lg'
)))
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\SearchQuery',
));
}
}
这条路线的控制器:
class SearchController extends Controller
{
public function searchAction(Request $request)
{
$query = new SearchQuery();
$form = $this->createForm(SearchQueryType::class, $query);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
/* Some logic here */
return $this->render('AppBundle:default:results.html.twig', array(
'form' => $form->createView()
));
}
return $this->render('AppBundle:default:search.html.twig', array(
'form' => $form->createView()
));
}
}
但是,当提交表单时,我想重定向到 URL /results?SUBMITTED-PARMS-HERE,以便用户可以将此链接发送给某人并收到相同的结果。在 /results 上,我想再次呈现表单,这次填充了提交的搜索参数,并在下面呈现可用汽车。
我不知道它是否是处理此问题的最佳方法,当前的解决方案有效,但无法将链接发送给其他人。
编辑:
我把代码改成休闲:
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$session = $this->get('session');
$session->set('pickupCity', $data->getPickupCity());
$session->set('returnCity', $data->getReturnCity());
$session->set('pickupDateTime', $data->getPickupDateTime());
$session->set('returnDateTime', $data->getReturnDateTime());
return $this->redirectToRoute('results', array(
'pickupCity' => $data->getPickupCity(),
'returnCity' => $data->getReturnCity(),
'pickupDate' => $data->getPickupDateTime()->format('d-m-Y-H-i'),
'returnDate' => $data->getReturnDateTime()->format('d-m-Y-H-i'),
), 301);
}
因此,我收到了 URL ./results/Paris/Berlin/10-02-2016-10-00/17-02-2016-10-00
在routing.yml中:
results:
path: /results/{pickupCity}/{returnCity}/{pickupDate}/{returnDate}
defaults: { _controller: AppBundle:Search:result}
methods: [POST]
因为我只想在这条路线上接收 POST 请求,现在当我提交表单时,我收到错误页面:
No route found for "GET /results/Paris/Berling/01-07-2016-00-00/01-11-2016-00-00": Method Not Allowed (Allow: POST)
知道怎么解决吗?
编辑 2:
没关系,我的推理很糟糕。
【问题讨论】:
标签: symfony