【问题标题】:Symfony 4 - passing response to another view after form submitSymfony 4 - 提交表单后将响应传递给另一个视图
【发布时间】:2021-01-29 19:13:39
【问题描述】:

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

我不断收到错误,但奇怪的是我的响应在第一种方法中运行正常,但在第二种方法中我不断收到错误:

无法解析参数 $date of “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
    ]);
}

当我在第一个方法中转储响应时它成功返回它但是当我尝试将它传递给另一个方法时它返回此错误。也许有一个选项可以在第一种方法中呈现第二个视图? 有人可以帮忙吗?谢谢

【问题讨论】:

  • 我不清楚你想要完成什么。 $this->render($date->format('Y-m-d'));返回一个 Response 对象,但您将其丢弃。然后重定向告诉浏览器发出一个新请求。您期望第二种方法中的 $date 来自哪里?
  • 这不是一个线索/ :) 我怎样才能将它传递给其他控制器方法? @Cerad

标签: php symfony render symfony4


【解决方案1】:

这里的问题是您正在重新定义 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'));
}

【讨论】:

    猜你喜欢
    • 2018-09-18
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    相关资源
    最近更新 更多