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:
Borang bukan entiti:
Contoh ini menunjukkan borang pemprosesan yang ditakrifkan sebagai HTML standard dalam fail paparan Symfony. Proses ini melibatkan tiga langkah:
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 %}
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]); }
routing.yml
) termasuk: src/Acme/DemoBundle/Resources/config
_form1: path: /form1 defaults: { _controller: AcmeDemoBundle:Welcome:form1 }
ke kaedah /form1
. form1Action
Entiti dan Borang Symfony:
Bahagian ini menggambarkan mencipta dan memproses borang untuk entiti simfoni (mis.,). Kami akan menggunakan lima fail: pengawal, 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!Article
, dua fail pandangan (routing.yml
, form2.html.twig
. form2saved.html.twig
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');
}