12.表单处理

来源:互联网 发布:阿里云别名解析 编辑:程序博客网 时间:2024/05/29 17:34

1.构成表单元素
这里写图片描述
这里写图片描述
这里写图片描述


2.创建一个基本表单

public function indexAction()    {        $user = new User();        $form = $this->createFormBuilder($user)                ->add('email')                ->add('password')                ->add('age')                ->add('submit','submit')                ->getForm();        $form->handleRequest($this->getRequest());        if ($form->isValid()) {            $em = $this->getDoctrine()->getManager();            $em->persist($user);            $em->flush();        }        $content = 'test';        return array('content'=>$content, 'form'=>$form->createView());    }

这里写图片描述
这里写图片描述
这里写图片描述


这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

$user = new User();        $form = $this->createFormBuilder($user)                ->add('email','email',array('label'=>'用户名'))                ->add('password')                ->add('age')                ->add('submit','submit')                ->getForm();        //$form = $this->createForm('text');        $form->handleRequest($this->getRequest());        if ($form->isValid()) {            $em = $this->getDoctrine()->getManager();            $em->persist($user);            $em->flush();        }

这里写图片描述

https://symfony.com/doc/2.7/reference/forms/types/entity.html#basic-usage

http://symfony.com/doc/current/forms.html

https://symfony.com/doc/current/form/form_collections.html

在表单中嵌入另外一个entity fields

$user = new User();        $bulder = $this->createFormBuilder($user);        $form = $bulder->add('email','email',array('label'=>'用户名'))                       ->add('password')                       ->add('age')                       ->add(                            $bulder->create('profile','form')                                   ->add('mobile_number','integer')                            )                       ->add('submit','submit')                       ->getForm();        //$form = $this->createForm('text');        $form->handleRequest($this->getRequest());        if ($form->isValid()) {            $em = $this->getDoctrine()->getManager();            $em->persist($user);            $em->flush();        }        $content = 'test';        return array('content'=>$content, 'form'=>$form->createView());

这里写图片描述
这里写图片描述
这里写图片描述


3.修改表单样式
这里写图片描述

{{ form(form) }} //等同于下面3行{{ form_start(form) }}{{ form_widget(form) }}{{ form_end(form) }}{{ form_start(form) }} //等同于上面{{ form_label(form.email) }}{{ form_errors(form.email) }}{{ form_widget(form.email) }}{{ form_label(form.password) }}{{ form_errors(form.password) }}{{ form_widget(form.password) }}...{{ form_end(form) }}

这里写图片描述
这里写图片描述
这里写图片描述


4.表单提交
这里写图片描述

//会帮我们判断是否是 post 提交        $form->handleRequest($this->getRequest());//        $form->submit($data); //手动提交

这里写图片描述


5.表单验证
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

阻止html5验证:
这里写图片描述

https://symfony.com/doc/master/reference/constraints.html#main

$user = new User();        $bulder = $this->createFormBuilder($user);        $form = $bulder->add('email','email',array('label'=>'用户名'))                       ->add('password')                       ->add('age','integer',array('constraints'=>new GreaterThanOrEqual(18)))                       ->add('submit','submit')                       ->getForm();

这里写图片描述

 $user = new User();        $bulder = $this->createFormBuilder($user);        $form = $bulder->add('email','email',array('label'=>'用户名'))                       ->add('password')                       ->add('age','integer',array('constraints'=>array(new GreaterThanOrEqual(18),new LessThanOrEqual(20))))                       ->add('submit','submit')                       ->getForm();大于18 小于20

6.处理通过验证的表单数据

$user = new User();        $bulder = $this->createFormBuilder($user);        $form = $bulder->add('email','email',array('label'=>'用户名'))                       ->add('password')                       ->add('age','integer',array('constraints'=>array(new GreaterThanOrEqual(18),new LessThanOrEqual(20))))                       ->add('submit','submit')                       ->add('submit_and_addnew','submit')                       ->getForm();        $form->handleRequest($this->getRequest());        if ($form->isValid()) {            $form->get('email')->isValid();//单独判断字段            //这里可以对数据进行处理,处理完再放入数据库            $click_action = $form->get('submit_and_addnew')->isClicked();            if ($click_action) {                echo 'submit_and_addnew';            } else {                echo 'submit';            }            $em = $this->getDoctrine()->getManager();            $em->persist($user);            $em->flush();        }

总结:

CSRF 验证:

会在session 中做验证;可以在 配置文件中关闭

这里写图片描述

$user = new User();        $bulder = $this->createFormBuilder($user);        $form = $bulder->setAction($this->generateUrl('page')  //设置 提交的url                        ->setMethod('GET')  //设置method                        ->add('email','email',array('label'=>'用户名'))                       ->add('password')                       ->add('age','integer',array('constraints'=>array(new GreaterThanOrEqual(18),new LessThanOrEqual(20))))                       ->add('submit','submit')                       ->add('submit_and_addnew','submit')                       ->add('file','file')                       ->getForm();        $form->handleRequest($this->getRequest());        if ($form->isValid()) {            $form->get('file')->getData()->move($dir.$filename);//从临时文件夹放到指定目录            $user->setAvatar($dir.$filename);            $form->get('email')->isValid();//单独判断字段            //这里可以对数据进行处理,处理完再放入数据库            $click_action = $form->get('submit_and_addnew')->isClicked();            if ($click_action) {                echo 'submit_and_addnew';            } else {                echo 'submit';            }            $em = $this->getDoctrine()->getManager();            $em->persist($user);            $em->flush();        }
0 0