Bonjour,
C'est fou ce que les mises à jour vont bon train et déjà à la 5.3.9 alors je sèche avec RequestStack pour la session j'essaie de cette façon:
return $this->session->getSession()->set('checkout_data', $data);
Quand je fais:
dd($data);
j'ai bien mon panier au complet mais cela me renvoi l'erreur:
Return value of App\Controller\CheckoutController::confirm() must be an instance of Symfony\Component\HttpFoundation\Response, null returned
Je ne peux pas rediriger autre part que vers ma page checkout
Je vous remercie de votre aide
Voici mon CheckoutController:
<?php
namespace App\Controller;
use App\Form\CheckoutType;
use App\Services\CartServices;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class CheckoutController extends AbstractController
{
private $requestStack;
public function __construct(RequestStack $requestStack)
{
$this->requestStack = $requestStack;
$this->session = $requestStack;
}
/**
* @Route("/checkout", name="checkout")
*/
public function index(CartServices $cartServices): Response
{
$user = $this->getUser();
$cart = $cartServices->getFullCart();
if(!isset($cart['products'])){
return $this->redirectToRoute('home');
}
if(!$user->getAddresses()->getValues()){
$this->addFlash('checkout_message','Veuillez ajouter une adresse de livraison dans votre compte avant de continuer');
return $this->redirectToRoute('address_new');
}
$form = $this->createForm(CheckoutType::class,null,['user'=>$user]);
return $this->render('checkout/index.html.twig',[
'cart' => $cart,
'checkout' => $form->createView()
]);
}
/**
* @Route("/checkout/confirm", name="checkout_confirm")
*/
public function confirm(CartServices $cartServices, Request $request):Response{
$user = $this->getUser();
$cart = $cartServices->getFullCart();
if(!isset($cart['products'])){
return $this->redirectToRoute('home');
}
if(!$user->getAddresses()->getValues()){
$this->addFlash('checkout_message','Veuillez ajouter une adresse de livraison dans votre compte avant de continuer');
return $this->redirectToRoute('address_new');
}
$form = $this->createForm(CheckoutType::class,null,['user'=>$user]);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid() || $this->session->get('checkout_data')){
if($this->session->getSession('checkout_data')){
$data = $this->session->getSession('checkout_data');
}else{
$data = $form->getData();
$this->session->set('checkout_data', $data);
}
return $this->session->getSession()->set('checkout_data', $data);
// dd($data);
if($this->session->get('checkout_data')){
$data = $this->session->getSession('checkout_data');
}else{
$data = $form->getData();
$this->session->set('checkout_data', $data);
}
// $data = $form->getData();
$address = $data['address'];
$carrier = $data['carrier'];
$informations = $data['informations'];
// dd($data);
return $this->render('checkout/confirm.html.twig',[
'cart' => $cart,
'address' => $address,
'carrier' => $carrier,
'informations' => $informations,
'checkout' => $form->createView()
]);
}
return $this->redirectToRoute('checkout');
}
}
Hello,
J'ai eu à peu près le même problème que toi... j'ai pu le régler en utilisant la class RedirectResponse.
Pour revoyer vers une url oui mais là je dois vérifier mes données et je ne sais pas comment faire car je débute et j'ai acheté une formation sur symfony 5.3.1 et il y a des différences que j'ai pu résoudre avec les sessions pour l'authentification etc. mais là je ne sais pas.
OK, est-ce qur tu peux poster plus de code stp ?
Au moins le corp de la méthode executée par la route...
J'ai édité le code plus haut
Le poblème est là: return $this->session->getSession()->set('checkout_data', $data);
Bonsoir,
qques problèmes dans ton code :