Bonjour,
J'ai un souci avec redirectResponse avec Symfony 7.1 et 7.2. Ça marche normalement avec Symfony 6.4.
Si j'appelle la redirection directement, tout se passe normalement (route "redirection" ci dessous).
Si la redirection est appellée en réponse à un formulaire, ça ne marche pas (route "formulaire" ci dessous).
Voici un exemple de code :
<?php
namespace App\Controller;
use App\Form\TestType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class TestController extends AbstractController
{
#[Route(path: '/redirection', name: 'redirection')]
public function redirection(): RedirectResponse
{
return new RedirectResponse('https://example.com');
}
#[Route(path: '/formulaire', name: 'formulaire')]
public function index(Request $request): RedirectResponse|Response
{
$form = $this->createForm(TestType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
return new RedirectResponse('https://example.com');
}
return $this->render('frontend/stripe/test.html.twig', [
'form' => $form,
]);
}
}
// Le formulaire (un simple bouton submit).
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class TestType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('submit', SubmitType::class, [])
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
]);
}
}
Si je consulte la route "redirection", la redirection se passe comme prévu.
Si je consulte la route "formulaire", ça coince. J'ai un message d'erreur "Blocage d’une requête multiorigines (Cross-Origin Request) : la politique « Same Origin » ne permet pas de consulter la ressource distante située sur https://example.com/. Raison : l’en-tête CORS « Access-Control-Allow-Origin » est manquant. Code d’état : 501."
Est-ce que quelqu'un a une idée de ce qui se passe ? Il y a une configuration à faire quelque part ?
D'avance merci pour votre aide !
Ash
J'ai (enfin) trouvé la solution.
il faut modifier l'appel au formulaire dans le template
{{ form_start(form, { 'attr': {'data-turbo': 'false'} } ) }}
Ça pourrait aider quelqu'un un jour !