Dieses Tutorial untersucht zwei Ansätze zur Form des Handlings in Symfony. 2. Das erste zeigt, dass Formularelemente direkt in der Ansicht einbettet und sie im Controller manuell verarbeiten. Die zweite verwendet Symfonys Formularsystem für objektorientierte Formularerklärung und automatisierte Verarbeitung und Persistenz.
Wir werden Symfonys Standard AcMedemobundle zur Illustration verwenden. Der vollständige Code ist in [dieses Repository] verfügbar (Repository_Link_here - Ersetzen Sie, falls verfügbar).
.Schlüsselkonzepte:
Nicht-Zentitätsformen:
Dieses Beispiel zeigt Verarbeitungsformulare, die als Standard -HTML in einer Symfony -Ansicht -Datei definiert sind. Der Prozess umfasst drei Schritte:
form1.html.twig
a src/Acme/DemoBundle/Resources/views/Welcome
Datei (befindet sich in {% extends "AcmeDemoBundle::layout.html.twig" %} {% block content %} <h1>Form values</h1> {% if name is defined %} <p>Name: {{ name }} </p> {% endif %} <form method="post" action="{{ path('_form1') }}"> <label for="name">Name:</label> <input type="text" id="name" name="name" /><br> <input type="submit" name="submit" value="Submit" /> </form> {% endblock %}
WelcomeController
Die form1Action
enthält eine use Symfony\Component\HttpFoundation\Request; // ... other code ... public function form1Action(Request $request) { $name = 'Not submitted yet'; if ($request->isMethod('POST') && $request->request->has('submit')) { $name = $request->request->get('name'); } return $this->render('AcmeDemoBundle:Welcome:form1.html.twig', ['name' => $name]); }
routing.yml
Die src/Acme/DemoBundle/Resources/config
-Datei (in _form1: path: /form1 defaults: { _controller: AcmeDemoBundle:Welcome:form1 }
/form1
Diese Karten form1Action
zur
Dieser Ansatz ist zwar funktional, ist aber weniger für komplexe Formen oder Datenpersistenz geeignet.
Symfony -Entitäten und -formen:
Article
In diesem Abschnitt wird das Erstellen und Verarbeitung eines Formulars für eine Symfony -Entität (z. B. routing.yml
) veranschaulicht. Wir verwenden fünf Dateien: den Controller, form2.html.twig
, zwei Ansichtsdateien (form2saved.html.twig
, ArticleType.php
) und eine
src/Acme/DemoBundle/Form
) {% extends "AcmeDemoBundle::layout.html.twig" %} {% block content %} <h1>Form values</h1> {% if name is defined %} <p>Name: {{ name }} </p> {% endif %} <form method="post" action="{{ path('_form1') }}"> <label for="name">Name:</label> <input type="text" id="name" name="name" /><br> <input type="submit" name="submit" value="Submit" /> </form> {% endblock %}
use Symfony\Component\HttpFoundation\Request; // ... other code ... public function form1Action(Request $request) { $name = 'Not submitted yet'; if ($request->isMethod('POST') && $request->request->has('submit')) { $name = $request->request->get('name'); } return $this->render('AcmeDemoBundle:Welcome:form1.html.twig', ['name' => $name]); }
_form1: path: /form1 defaults: { _controller: AcmeDemoBundle:Welcome:form1 }
<?php namespace Acme\DemoBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; class ArticleType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('title', 'text', ['label' => 'Title']) ->add('body', 'textarea') ->add('save', 'submit') ; } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(['data_class' => 'Acme\DemoBundle\Entity\Article']); } public function getName() { return 'article'; } }
// ... other uses ... use Acme\DemoBundle\Entity\Article; use Acme\DemoBundle\Form\ArticleType; // ... other methods ... public function form2Action(Request $request) { $article = new Article(); $form = $this->createForm(ArticleType::class, $article); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $em = $this->getDoctrine()->getManager(); $em->persist($article); $em->flush(); $this->addFlash('message', 'Article saved!'); return $this->redirectToRoute('_form2saved'); } return $this->render('AcmeDemoBundle:Welcome:form2.html.twig', ['form' => $form->createView()]); } public function form2savedAction() { return $this->render('AcmeDemoBundle:Welcome:form2saved.html.twig'); }
Dieser Ansatz nutzt die Funktionen von Symfony für eine robustere und wartbarere Lösung. Wählen Sie die Methode aus, die am besten für die Komplexität und die Datenbearbeitung Ihres Formulars geeignet ist. Für komplexe Formen oder Datenbankinteraktionen wird der Entität/Form -Ansatz dringend empfohlen.
Das obige ist der detaillierte Inhalt vonBau- und Verarbeitungsformulare in Symfony 2. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!