首頁 > 後端開發 > php教程 > Symfony 2中的建築和處理形式

Symfony 2中的建築和處理形式

Jennifer Aniston
發布: 2025-02-21 09:33:12
原創
221 人瀏覽過

Building and Processing Forms in Symfony 2

>本教程探討了在Symfony 2中形成處理的兩種方法。第一個演示直接在視圖中嵌入形式元素,並在控制器中手動處理它們。第二個利用Symfony的表單系統進行面向對象的表單聲明和自動處理和持久性。

>我們將使用Symfony的默認acmedemobundle進行插圖。 完整的代碼可在[此儲存庫](repositority_link_here-替換為實際鏈接)中可用

密鑰概念:

Symfony 2提供了兩種用於形式創建和處理的主要方法:通過基於控制器的處理在視圖中嵌入手冊HTML,以及Symfony的面向對象的表單系統。 通過將標準的HTML表單元素添加到Symfony View文件中,可以創建

>非實現表單。這涉及一個包含形式HTML的視圖文件,邏輯處理(渲染,處理)的控制器方法以及將URL映射到控制器方法的路由。
    > Symfony實體和表格提供了一種更有效的方法。 這涉及使用Symfony Form Builder為Symfony實體創建形式,以及定義形式構造,命名和默認選項的方法。 這些表格是通過控制器方法來構建和顯示的。
  • Symfony的表單系統是靈活的,可以適應各種需求。對於數據庫相關的CRUD操作,首選Symfony表單系統。對於簡單的,非持久的形式,視圖中直接嵌入的HTML就足夠了。
  • 非實體表格:
  • 這個示例演示了Symfony View文件中定義為標準HTML的處理表格。 該過程涉及三個步驟:
>

>查看文件創建: afile(位於>中)包含表單的html:

  1. 控制器方法:form1.html.twig src/Acme/DemoBundle/Resources/views/Welcome包括
  2. 方法:
>
{% 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 %}
登入後複製
登入後複製
  1. 路由定義:WelcomeControllerform1Action
  2. file(in
)包括:
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]);
}
登入後複製
登入後複製
>
  1. 此地圖routing.yml方法。 src/Acme/DemoBundle/Resources/config>
  2. 這種方法雖然功能不適合複雜形式或數據持久性。
>
_form1:
    path: /form1
    defaults: { _controller: AcmeDemoBundle:Welcome:form1 }
登入後複製
登入後複製

symfony實體和表格:/form1form1Action>

>本節說明了為符號實體創建和處理形式(例如,

)。我們將使用五個文件:控制器,

,兩個視圖文件(

),>表單類型類別。

  1. articletype.php:(位於src/Acme/DemoBundle/Form
  2. >>
{% 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 %}
登入後複製
登入後複製
  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]);
}
登入後複製
登入後複製
  1. form2.html.twig:
_form1:
    path: /form1
    defaults: { _controller: AcmeDemoBundle:Welcome:form1 }
登入後複製
登入後複製
  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';
    }
}
登入後複製
    > routing.yml:
  1. 這種方法利用Symfony的功能來實現更健壯和可維護的解決方案。 選擇最適合您表格的複雜性和數據處理需求的方法。 對於復雜的形式或數據庫交互,強烈建議使用實體/形式方法。

以上是Symfony 2中的建築和處理形式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板