Rumah > pembangunan bahagian belakang > tutorial php > Borang bangunan dan pemprosesan dalam Symfony 2

Borang bangunan dan pemprosesan dalam Symfony 2

Jennifer Aniston
Lepaskan: 2025-02-21 09:33:12
asal
224 orang telah melayarinya

Building and Processing Forms in Symfony 2

Tutorial ini meneroka dua pendekatan untuk membentuk pengendalian dalam Symfony 2. Yang pertama menunjukkan unsur -unsur bentuk membenamkan secara langsung dalam pandangan dan memprosesnya secara manual dalam pengawal. Yang kedua menggunakan sistem bentuk Symfony untuk pengisytiharan bentuk berorientasikan objek dan pemprosesan dan ketekunan automatik.

Kami akan menggunakan acmedemobundle lalai Symfony untuk ilustrasi. Kod Lengkap boleh didapati di [Repositori ini] (Repository_Link_here - ganti dengan pautan sebenar jika tersedia).

Konsep Utama:

    Symfony 2 menawarkan dua kaedah utama untuk penciptaan dan pengendalian bentuk: manual HTML embedding dalam pandangan dengan pemprosesan berasaskan pengawal, dan sistem bentuk berorientasikan objek Symfony.
  • Borang bukan entiti dicipta dengan menambahkan elemen bentuk HTML standard ke fail paparan simfoni. Ini melibatkan fail paparan yang mengandungi HTML bentuk, kaedah pengawal untuk pengendalian logik (rendering, pemprosesan), dan laluan pemetaan URL ke kaedah pengawal.
  • entiti dan bentuk Symfony menawarkan pendekatan yang lebih cekap. Ini melibatkan membuat bentuk untuk entiti Symfony, menggunakan pembina bentuk Symfony, dan menentukan kaedah untuk pembinaan bentuk, penamaan, dan pilihan lalai. Bentuk -bentuk ini dibina dan dipaparkan melalui kaedah pengawal.
  • sistem bentuk Symfony adalah fleksibel, menyesuaikan diri dengan pelbagai keperluan. Untuk operasi CRUD yang berkaitan dengan pangkalan data, sistem bentuk Symfony lebih disukai. Untuk bentuk yang mudah, tidak berterusan, langsung HTML membenamkan dalam pandangan adalah mencukupi.

Borang bukan entiti:

Contoh ini menunjukkan borang pemprosesan yang ditakrifkan sebagai HTML standard dalam fail paparan Symfony. Proses ini melibatkan tiga langkah:

  1. Lihat Penciptaan Fail: A Fail (terletak di form1.html.twig) mengandungi html borang: src/Acme/DemoBundle/Resources/views/Welcome
{% 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 %}
Salin selepas log masuk
Salin selepas log masuk
  1. kaedah pengawal: termasuk kaedah WelcomeController: form1Action
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]);
}
Salin selepas log masuk
Salin selepas log masuk
  1. definisi laluan: fail (dalam routing.yml) termasuk: src/Acme/DemoBundle/Resources/config
_form1:
    path: /form1
    defaults: { _controller: AcmeDemoBundle:Welcome:form1 }
Salin selepas log masuk
Salin selepas log masuk
peta ini

ke kaedah /form1. form1Action

Pendekatan ini, sementara berfungsi, kurang sesuai untuk bentuk kompleks atau ketekunan data.

Entiti dan Borang Symfony:

Bahagian ini menggambarkan mencipta dan memproses borang untuk entiti simfoni (mis.,

). Kami akan menggunakan lima fail: pengawal, Article, dua fail pandangan (routing.yml, ), dan kelas jenis form2.html.twig. form2saved.html.twig

  1. articletype.php: (terletak di 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 %}
Salin selepas log masuk
Salin selepas log masuk
  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]);
}
Salin selepas log masuk
Salin selepas log masuk
  1. form2.html.twig:
_form1:
    path: /form1
    defaults: { _controller: AcmeDemoBundle:Welcome:form1 }
Salin selepas log masuk
Salin selepas log masuk
  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';
    }
}
Salin selepas log masuk
  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');
}
Salin selepas log masuk

Pendekatan ini memanfaatkan ciri -ciri Symfony untuk penyelesaian yang lebih mantap dan boleh dipelihara. Pilih kaedah yang paling sesuai dengan keperluan kerumitan dan keperluan pengendalian data anda. Untuk bentuk kompleks atau interaksi pangkalan data, pendekatan entiti/borang sangat disyorkan.

Atas ialah kandungan terperinci Borang bangunan dan pemprosesan dalam Symfony 2. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan