Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Step rendering with Hotwired/Turbo #405

Open
akincer opened this issue Aug 31, 2022 · 2 comments
Open

Step rendering with Hotwired/Turbo #405

akincer opened this issue Aug 31, 2022 · 2 comments

Comments

@akincer
Copy link

akincer commented Aug 31, 2022

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));`

@mpiot
Copy link

mpiot commented Oct 25, 2022

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;
    }
}

@lukepass
Copy link

Thanks @mpiot that solved the problem perfectly!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants