Symfony 4-在表单提交后将响应传递给另一个视图



我的symfony项目中有两个方法。有了一个,我正在构建一个表单,在提交时需要用它的响应重定向到新的视图中。

我一直收到一个错误,但更糟糕的是,我的响应在第一个方法上运行得像它应该运行的一样,但在第二个方法上,我一直收到错误:

无法解析的参数$date"App\Controller\ItController::render((",也许你忘记将控制器注册为服务或错过了标记用";controller.service_arguments";?

public function getIt(Request $request)
{
$form = $this->createFormBuilder()
->add('startDate', DateTimeType::class, [
'data' => new DateTime('first day of this month'),
'widget' => 'single_text',
'html5' => false,
])
->add(
'save',
SubmitType::class,
[
'label' => 'Generate Billing Report',
'attr' => ['class' => 'btn-submit btn-primary action-save']
]
)
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$startDate = $data['date'];
$this->render($date->format('Y-m-d'));

return $this->redirectToRoute('rr');
}
return $this->render('details.html.twig', [
'form' => $form->createView()
]);

另一种需要生成第二个带有响应的视图的方法:

/**
* @Route("/test", name="rr")
*/
public function render($date)
{
$response = $this->someService('route/defined/from/other/external/service, $date);
dump($response);
return $this->render('response.html.twig', [
'response' => $response
]);
}

当我在第一个方法中转储响应时,它成功地返回了它,但当我试图将它传递给另一个方法时,它返回了这个错误。也许在第一种方法中有渲染第二个视图的选项?有人能帮忙吗?感谢

这里的问题是,您正在重新定义AbstractController::render方法,而它用错误的参数类型调用自己。

public function render($date)
{
$response = $this->someService('route/defined/from/other/external/service', $date);
dump($response);
// next line calls this method that we are in AppControllerItController::render($date) and throws the error
return $this->render('response.html.twig', [
'response' => $response
]);
}

将其更改为

public function renderExternalResponse($date)
{
$response = $this->someService('route/defined/from/other/external/service', $date);
return $this->render('response.html.twig', [
'response' => $response
]);
}

然后更改您处理提交表单的方式,如下所示:

if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$startDate = $data['date'];
return $this->renderExternalResponse($date->format('Y-m-d'));
}

最新更新