微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 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'));
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。