gateway = $gateway; } public function displayFormReact(): HttpResponse { return ViewHttpResponse::react("views/SampleForm.tsx", []); } public function displayFormTwig(): HttpResponse { return ViewHttpResponse::twig('sample_form.html.twig', []); } /** * @param array $form * @param callable(array>): ViewHttpResponse $response * @return HttpResponse */ private function submitForm(array $form, callable $response): HttpResponse { return Control::runCheckedFrom($form, [ "name" => [Validators::lenBetween(0, 32), Validators::name("Le nom ne peut contenir que des lettres, des chiffres et des accents")], "description" => [Validators::lenBetween(0, 512)], ], function (HttpRequest $req) use ($response) { $description = htmlspecialchars($req["description"]); $this->gateway->insert($req["name"], $description); $results = ["results" => $this->gateway->listResults()]; return call_user_func_array($response, [$results]); }, false); } /** * @param array $form * @return HttpResponse */ public function submitFormTwig(array $form): HttpResponse { return $this->submitForm($form, fn(array $results) => ViewHttpResponse::twig('display_results.html.twig', $results)); } /** * @param array $form * @return HttpResponse */ public function submitFormReact(array $form): HttpResponse { return $this->submitForm($form, fn(array $results) => ViewHttpResponse::react('views/DisplayResults.tsx', $results)); } }