问题描述
我的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 App\Controller\ItController::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'));
}