render('admin/forms.html.twig', [ 'forms' => $this->forms->all(), 'types' => FormRepository::TYPES, 'submissions' => $this->forms->submissions($request->query->getInt('seite', 1)), ]); } #[Route('/%kant.admin_path%/forms/{slug}', name: 'admin_form_save', requirements: ['slug' => '[a-z0-9-]{1,80}|neu'], methods: ['POST'])] public function save(Request $request, string $slug): Response { $this->denyAccessUnlessGranted('ROLE_EDITOR'); if (!$this->isCsrfTokenValid('forms', $request->request->getString('_csrf_token'))) { return $this->back('Deine Sitzung ist abgelaufen. Bitte melde dich erneut an.'); } $fields = []; foreach ($request->request->all('fields') as $row) { if (!is_array($row) || '' === trim((string) ($row['label'] ?? ''))) { continue; } $fields[] = [ 'name' => (string) ($row['name'] ?? ''), 'type' => (string) ($row['type'] ?? 'text'), 'label' => (string) $row['label'], 'required' => '' !== (string) ($row['required'] ?? ''), 'help' => (string) ($row['help'] ?? ''), 'options' => array_map(trim(...), explode(',', (string) ($row['options'] ?? ''))), ]; } try { $this->forms->save( 'neu' === $slug ? $request->request->getString('slug') : $slug, $request->request->getString('name'), $fields, [ 'recipient' => $request->request->getString('recipient'), 'subject' => $request->request->getString('subject'), 'success' => $request->request->getString('success'), 'replyToField' => $request->request->getString('replyToField'), ], $request->request->getInt('expectedVersion', -1), ); } catch (InvalidForm|StaleWrite $e) { return $this->back($e->getMessage()); } return $this->back('Das Formular wurde gespeichert.', 'success'); } private function back(string $message, string $type = 'error'): Response { $this->addFlash($type, $message); return $this->redirectToRoute('admin_forms'); } }