我正在Symfony建造一个简单的汽车租赁应用程序,用于我大学的编程课程。
在URL /搜索中,我向用户显示一个表单。现在,当提交表单时,用户再次/搜索,但会呈现不同的模板
这是表单代码:
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,因此用户可以将此链接发送给某人并收到相同的结果。在/结果我再次使用魔杖渲染表格,这次填写了提交的搜索参数并在下面呈现可用的汽车。
我不知道它是否是处理此问题的最佳方法,当前解决方案有效,但链接无法发送给其他人。
修改
我将代码更改为fallowing:
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);
}
因此我收到了网址./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:
没关系,我的推理很糟糕。
答案 0 :(得分:0)
不确定,但可能使用此示例。
$this->redirect($this->generateUrl('default', array('pickupCity' => $pickupCity, 'returnCity' => $returnCity, 'pickupDateTime' => $pickupDateTimepickupDateTime)));
使用您自己的参数,您可以在其中放置评论
/* Some logic here */
答案 1 :(得分:0)
您可以使用getQueryString()
功能。
样品:
if ($form->isSubmitted() && $form->isValid()) {
return $this->redirect('results?'.$request->getQueryString());
}