Open akincer opened 2 years ago
If needed, here is a custom AbstractController
to add a renderFlow()
method:
/**
* @method User getUser()
*/
abstract class AbstractController extends \Symfony\Bundle\FrameworkBundle\Controller\AbstractController
{
/**
* Renders a view and sets the appropriate status code when a flow is listed in parameters.
*/
protected function renderFlow(string $view, array $parameters = [], Response $response = null): Response
{
$response = $this->renderForm($view, $parameters, $response);
foreach ($parameters as $v) {
if (!$v instanceof FormFlowInterface) {
continue;
}
if (200 === $response->getStatusCode() && $v->getStepsDoneCount() >= 1) {
$response->setStatusCode(422);
}
}
return $response;
}
}
Thanks @mpiot that solved the problem perfectly!
I've already solved this but wanted to point out to anyone using Hotwired/Turbo that step rendering is broken unless you send a 422 status. You can do something like this:
`if ($this->flow->getStepCount() === $this->flow->getCurrentStepNumber() && $form->isSubmitted() && $form->isValid()) { $statusCode = 200; // The last step has been executed so redirect or whatever you want here } else { $statusCode = 422; }
return $this->renderForm('your template', [ 'form' => $form, 'flow' => $this->flow, ], new Response(null, $statusCode));`