Heim > Backend-Entwicklung > PHP-Tutorial > Bau- und Verarbeitungsformulare in Symfony 2

Bau- und Verarbeitungsformulare in Symfony 2

Jennifer Aniston
Freigeben: 2025-02-21 09:33:12
Original
221 Leute haben es durchsucht

Building and Processing Forms in Symfony 2

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:

  • Symfony 2 bietet zwei Hauptmethoden zur Erstellung und Handhabung von Formular: Manuelles HTML-Einbettung in die Ansicht mit Controller-basierter Verarbeitung und objektorientiertes Formsystem von Symfony.
  • Nicht-Entfaltungsformulare werden erstellt, indem Standard-HTML-Formularelemente zu einer Symfony-Ansichtsdatei hinzugefügt werden. Dies beinhaltet eine Ansichtsdatei mit dem Formular HTML, einer Controller -Methode für die Logikbehandlung (Rendering, Verarbeitung) und eine Routenzuordnung, die eine URL auf die Controller -Methode zubereitet.
  • Symfony -Entitäten und -Formen bieten einen effizienteren Ansatz. Dies beinhaltet die Erstellung einer Form für eine Symfony -Entität, die den Symfony Form Builder unter Verwendung des Formulars für Formularkonstruktion, Benennung und Standardoptionen definiert. Diese Formulare werden über Controller -Methoden erstellt und angezeigt.
  • Das Formsystem von
  • Symfony ist flexibel und passt sich an verschiedene Anforderungen an. Für datenbankbezogene CRUD-Operationen wird das Symfony-Formularsystem bevorzugt. Für einfache, nicht-persistente Formen ist direkte HTML-Einbettung in der Ansicht ausreichend.

Nicht-Zentitätsformen:

Dieses Beispiel zeigt Verarbeitungsformulare, die als Standard -HTML in einer Symfony -Ansicht -Datei definiert sind. Der Prozess umfasst drei Schritte:
  1. Dateiaufstellung anzeigen: form1.html.twig a src/Acme/DemoBundle/Resources/views/Welcome Datei (befindet sich in
  2. ) enthält das HTML des Formulars:
{% 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 %}
Nach dem Login kopieren
Nach dem Login kopieren
  1. Controller -Methode: WelcomeController Die form1Action enthält eine
  2. -Methode:
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]);
}
Nach dem Login kopieren
Nach dem Login kopieren
  1. Routendefinition: routing.yml Die src/Acme/DemoBundle/Resources/config -Datei (in
  2. ) enthält:
_form1:
    path: /form1
    defaults: { _controller: AcmeDemoBundle:Welcome:form1 }
Nach dem Login kopieren
Nach dem Login kopieren

/form1 Diese Karten form1Action zur

-Methode.

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

Formular -Typ -Klasse. <🎜>
  1. articletype.php: (befindet sich in 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 %}
Nach dem Login kopieren
Nach dem Login kopieren
  1. WelcomEcontroller:
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]);
}
Nach dem Login kopieren
Nach dem Login kopieren
  1. Form2.html.twig:
_form1:
    path: /form1
    defaults: { _controller: AcmeDemoBundle:Welcome:form1 }
Nach dem Login kopieren
Nach dem Login kopieren
  1. Form2Saved.html.twig:
<?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';
    }
}
Nach dem Login kopieren
  1. routing.yml:
// ... 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');
}
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage