首页 > 后端开发 > 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板