qnixdev
@qnixdev
Junior PHP Developer

Как отправить POST запрос на другой Route после проверки form Symfony?

Есть форма, которая создает paymentOrder:
Twig

<form name="order_form" method="post">
    <input type="number" id="order_form_amount" name="order_form[amount]" required />
</form>



Form

public function buildForm(FormBuilderInterface $builder, array $options): void
{
    $builder
        ->add('amount', MoneyType::class, [
             'currency' => 'USD',
        ])
    ;
}


Controller

/**
 * @Route("/add", name="add_fund", methods={"GET","POST"})
 */
public function addFund(
    PaymentOrderFactory $orderFactory,
    Request $request
): Response {
    $orderModel = new OrderModel();
    $form = $this->createForm(OrderFormType::class, $orderModel);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $amount = (float) $form['amount']->getData() ?? null;
        $paymentOrder = $orderFactory->createOrder($amount);

        // TODO: Send $paymentOrder of POST method to another route
    }

    return $this->render('fund/add.html.twig', [
        'orderForm' => $form->createView(),
    ]);
}



OrderModel

class OrderModel
{
    /**
     * @Assert\NotBlank(
     *     message="This field cannot be blank"
     * )
     * @var float
     */
    public $amount;
}



PaymentOrderFactory

public function createOrder(float $amount): PaymentOrder
{
    $order = new PaymentOrder();
    $order
        ->setAmount($amount * 100)
        ->setStatus(PaymentOrder::STATUS_CREATED)
        ->setCreatedAt(new \DateTimeImmutable('now'))
    ;

    $this->em->persist($order);
    $this->em->flush();

    return $order;
}


В конечном итоге у меня есть $paymentOrder. Мне же нужно взять из него id, добавить нужные другие поля не из ордера и отправить POST запросом (только POST) на другой роутер, который получает данные из $request->request->get('field') и перенаправляет на страницу оплаты.

То есть по сути есть такая логика, пользователь заполняет поля формы, оправляет форму, мне нужно из формы и создать ордер, и отправить дальше данные.

Пробовал
return $this->redirectToRoute('payment-client_stripe_payment', [], 307);
но от не срабатывает и просто отправляет на главную стр.

Какие есть варианты отправить данные из $request; на указанный роут методом пост?
  • Вопрос задан
  • 73 просмотра
Решения вопроса 2
deniev
@deniev
return $this->redirectToRoute('payment-client_stripe_payment', [‘request’ => $request]);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы