イラストには、SymfonyのデフォルトのAcmedemobundleを使用します。 完全なコードは[This Repository](repository_link_here-利用可能な場合は実際のリンクに置き換えます)で利用できます。
重要な概念:
Symfony 2は、フォームの作成と取り扱いのための2つの主要な方法を提供します。コントローラーベースの処理を使用して、ビューに手動HTML埋め込み、およびSymfonyのオブジェクト指向フォームシステム。
非エンティティフォームは、Symfonyビューファイルに標準のHTMLフォーム要素を追加することにより作成されます。これには、Form HTML、ロジック処理のためのコントローラーメソッド(レンダリング、処理)、およびコントローラーメソッドへのURLをマッピングするルートを含むビューファイルが含まれます。ファイルの作成:aファイル(
にある)には、フォームのhtml:に含まれています。
form1.html.twig
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
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
このアプローチは機能的ですが、複雑な形式やデータの持続性にはあまり適していません。
src/Acme/DemoBundle/Resources/config
_form1: path: /form1 defaults: { _controller: AcmeDemoBundle:Welcome:form1 }
)。 5つのファイルを使用します。コントローラー、/form1
、2つのビューファイル(form1Action
、
フォームタイプクラス。
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'); }
以上がSymfony 2の構築と処理フォームの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。