Symfony
来源:互联网 发布:神优化大型单机游戏 编辑:程序博客网 时间:2024/04/24 20:51
参考链接: http://symfony.com/doc/current/forms.html#forms-type-reference
声明:本文中的所有代码示例均来自Symfony官网
创建表单
在Symfony中创建表单的流程大致是:
- 创建表单对应的Entity
- 在Controller中使用Form组件创建和设置表单
- 在视图中渲染表单
创建Entity
Entity中的属性应当与表单中的字段一致。例如,假设我们要创建一个todo list,流程大致是:
- 用户填写task名称
- 设置完成日期
- 提交
所以,Task的Entity结构大致如下:
class Task{ protected $task; protected $dueDate; public function getTask() { return $this->task; } public function setTask($task) { $this->task = $task; } public function getDueDate() { return $this->dueDate; } public function setDueDate(\DateTime $dueDate = null) { $this->dueDate = $dueDate; }}
创建和设置Form表单
创建Form表单的流程大致是:
- 实例化Entity,因为表单的创建依赖于Entity
- 创建、设置表单
- 生成完整的Form,作为参数,传递给视图
代码逻辑如下:
class DefaultController extends Controller{ public function newAction(Request $request) { // create a task and give it some dummy data for this example $task = new Task(); $task->setTask('Write a blog post'); $task->setDueDate(new \DateTime('tomorrow')); $form = $this->createFormBuilder($task) ->add('task', TextType::class) ->add('dueDate', DateType::class) ->add('save', SubmitType::class, array('label' => 'Create Post')) ->getForm(); return $this->render('default/new.html.twig', array( 'form' => $form->createView(), )); }}
渲染表单
渲染表单的流程
- form_start 渲染开始标签,包括对enctype的设置,例如:上传文件
- form_widget 渲染所有字段,包括field字段本身、label标签、对应的错误验证信息(validation error messages)
- form_end 渲染结束标签。可以在此加入hidden fields,以及防CSRF攻击的token
twig示例:
验证表单
验证流程
用户提交表单数据,接下来就要把数据设置为对应的Entity属性值。
表单验证的逻辑大致是:
- 将用户请求写入Form对象
- Form对象判断用户请求是否为Form的Submit动作
- 是,则验证数据有效性;有效,则更新Entity
代码示例:
public function newAction(Request $request){ // just setup a fresh $task object (remove the dummy data) $task = new Task(); $form = $this->createFormBuilder($task) ->add('task', TextType::class) ->add('dueDate', DateType::class) ->add('save', SubmitType::class, array('label' => 'Create Task')) ->getForm(); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { // $form->getData() holds the submitted values // but, the original `$task` variable has also been updated $task = $form->getData(); // ... perform some action, such as saving the task to the database // for example, if Task is a Doctrine entity, save it! // $em = $this->getDoctrine()->getManager(); // $em->persist($task); // $em->flush(); return $this->redirectToRoute('task_success'); } return $this->render('default/new.html.twig', array( 'form' => $form->createView(), ));}
验证机制
Form组件根据Entity中针对属性所做的设置来验证字段的有效性,这里包含两个重点
- Entity中的属性需要被设置,例如非空、数据类型、字节数等等
- Form表单中字段的有效行,实际上是Entity中属性的有效性
设置Entity属性,示例:
namespace AppBundle\Entity;use Symfony\Component\Validator\Constraints as Assert;class Task{ /** * @Assert\NotBlank() */ public $task; /** * @Assert\NotBlank() * @Assert\Type("\DateTime") */ protected $dueDate;}
(完)
0 0
- symfony
- symfony
- Symfony
- symfony
- symfony
- symfony
- symfony
- Symfony
- Symfony
- Symfony简介
- symfony plugins
- Symfony 介绍
- 安装symfony
- symfony概述
- SYMFONY 命令
- symfony 学习
- symfony常用命令
- SYMFONY 助手
- apache-felix实例
- 关于在eclipse中 在工程,项目,文件,包,类前面出现红色感叹号的问题
- taskkill命令
- ActiveMQ简单介绍以及安装
- 点击按钮获取验证码,倒计时。
- Symfony
- [leetcode]198. House Robber
- tensorflow 的使用流程
- char字符对应的ASCII码值
- leetcode41. First Missing Positive
- [译]自动重命名Android versionName (通过创建自定义Gradle插件)
- Mysql 导入/导出数据
- C++服务器 多线程锁
- PHP读写操作Excel