Symfony-使用控制器中的发布数据重定向

时间:2019-02-07 22:12:22

标签: php symfony http

目标是通过POST方法发送在表单中输入的用户数据,从而在我的网站上注册闲置用户并将其重定向到支付平台。

我在POST中有一个表单,如果该表单有效,则可用于创建非活动用户。然后,我想将用户从POST中的表单中的数据发送到该URL时,将用户重定向到外部URL。该URL仅接受特定的变量名(这些变量在我的RedirectResponse的关联数组中),并且仅在POST中。

用户将在外部链接上付款,如果付款成功,我稍后将激活用户。我通过发送她的“ ID”来识别付款平台,并且她已经授权了我的域名。

我尝试使用状态为307的RedirectResponse,但我认为无法向其发送POST数据。

     * @Route("/{id<\d+>?1}/{slug}", methods={"GET", "POST"}, name="show")
     * @Security("is_granted('IS_AUTHENTICATED_ANONYMOUSLY')")
     */
    public function show(Offre $offre, $slug, Request $request): Response
    {
        if ($offre->getSlug() !== $slug) {
            return $this->redirectToRoute('site_devenir_vip_show', [
                'id'   => $offre->getId(),
                'slug' => $offre->getSlug(),
            ], Response::HTTP_MOVED_PERMANENTLY);
        }

        $utilisateur = new User();

        $form = $this->createForm(UserType::class, $utilisateur);
        $form->handleRequest($request);

        if ($form->isSubmitted() === true) {
            if ($form->isValid() === true) {
                // TODO: create the inactive User here

                // TODO: redirect the user on the payment platform
                return new RedirectResponse('https://mywebsite.com', 307, [
                    'NOM'        => $utilisateur->getNom(),
                    'PRENOM'     => $utilisateur->getPrenom(),
                    'TEL'        => $utilisateur->getTel(),
                    'EMAIL'      => $utilisateur->getEmail(),
                    'PAYS'       => $utilisateur->getPays(),
                    'ID'         => 'XXXX',
                    'ABONNEMENT' => 'XXXX',
                ]);
            }

            $this->addFlash('error', 'Le formulaire comporte des erreurs.');
        }

        return $this->render('site/pages/devenir_vip/show.html.twig', [
            'offre' => $offre,
            'form'  => $form->createView(),
        ]);
    }

我当前已重定向到RedirectResponse中的外部链接,但没有获取参数。你有个主意吗?

1 个答案:

答案 0 :(得分:1)

POST是一种请求方法,而不是响应“方法”。请求具有方法(GETPOSTPUTPATCHHEAD等),响应具有状态码(200,{ {1}},404等。

您可能需要创建付款,方法是使用php的HTTP客户端将数据发送到Gate,然后重定向用户(如果已创建付款)。付款门通常会以您应将用户重定向到的网址作为响应。请参阅您的Gate的API文档。

Symfony默认不包含HTTP客户端(无论如何都不是正确的客户端)。我推荐Guzzle

模拟代码:

500