ホームページ >バックエンド開発 >PHPチュートリアル >Symfony 2の構築と処理フォーム
イラストには、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
メソッドを含む<code class="language-twig">{% extends "AcmeDemoBundle::layout.html.twig" %} {% block content %} <h1>Form values</h1> {% if name is defined %} <p>Name: {{ name }} </p> {% endif %} <form method="post" action="%7B%7B%20path('_form1')%20%7D%7D"> <label for="name">Name:</label> <input type="text" id="name" name="name"><br> <input type="submit" name="submit" value="Submit"> </form> {% endblock %}</code>
WelcomeController
<code class="language-php">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]); }</code>
routing.yml
このアプローチは機能的ですが、複雑な形式やデータの持続性にはあまり適していません。
src/Acme/DemoBundle/Resources/config
<code class="language-yaml">_form1: path: /form1 defaults: { _controller: AcmeDemoBundle:Welcome:form1 }</code>このセクションでは、Symfonyエンティティのフォームの作成と処理を示しています(例:
)。 5つのファイルを使用します。コントローラー、/form1
、2つのビューファイル(form1Action
、
フォームタイプクラス。
src/Acme/DemoBundle/Form
にあります)<code class="language-twig">{% extends "AcmeDemoBundle::layout.html.twig" %} {% block content %} <h1>Form values</h1> {% if name is defined %} <p>Name: {{ name }} </p> {% endif %} <form method="post" action="%7B%7B%20path('_form1')%20%7D%7D"> <label for="name">Name:</label> <input type="text" id="name" name="name"><br> <input type="submit" name="submit" value="Submit"> </form> {% endblock %}</code>
<code class="language-php">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]); }</code>
<code class="language-yaml">_form1: path: /form1 defaults: { _controller: AcmeDemoBundle:Welcome:form1 }</code>
<code class="language-php"><?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'; } }</code>
<code class="language-php">// ... 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'); } </code>このアプローチは、より堅牢で保守可能なソリューションを提供するために、Symfonyの機能を活用しています。 フォームの複雑さとデータ処理のニーズに最適な方法を選択してください。 複雑なフォームまたはデータベースの相互作用の場合、エンティティ/フォームアプローチを強くお勧めします。
以上がSymfony 2の構築と処理フォームの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。