SYMFONY表单构造和持久化数据

1、

    public function indexAction(Request $request){
        $person=new Person();  //实体类

        $form=$this->createFormBuilder($person)
            ->add('full_name','text')         //表单字段
            ->add('description','textarea')   //表单字段
            ->getForm();
        if($request->isMethod('POST'))  //如果是POST数据
        {
            $form->handleRequest($this->get('request'));  //获得句柄
            if($form->isValid()){         //验证表单内容是否有效
                $person=$form->getData(); //获取表单值
                $person->setSourceDate(new \DateTime('now',new \DateTimeZone('UTC'))); //设置值
                $em=$this->getDoctrine()->getManager();  //获得ORM管理对象
                $em->persist($person);   //准备持久化数据
                $em->flush();            //同步操作到数据库里

//                 return new Response('Created Person id:'.$person->getID()); //返回数据库表中的新增数据ID
            }
        }else{

        }
        return array('form'=>$form->createView()); //将构造的表单赋值给form变量传入twig模版
    }



2、

a)创建表单类型类

namespace Blogger\BlogBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
class EnquityType extends AbstractType{
    public function builderForm(FormBuilder $builder,array $options){
        $builder->add('name');
        $builder->add('email','email');
        $builder->add('subject');
        $builder->add('body','textarea');
    }
    public function  getName(){
        return 'contact';
    }
}

b)构造表单

$enquiry=new Enquiry();
$form=$this->createForm(new EnquityType(),$enquiry);

return array('form'=>$form->createView());      //或者:
//return $this->render('BloggerBlogBundle:Page:contact.html.twig', array(
        'form' => $form->createView()
    ));
使用
/**
* @Template()
*/后,不需要再写$ths->render(……,因为这个注释语法会自动加载该bundle下对应的twig文件


TWIG模版

<form action="{{ path('contact') }}" method="post" {{ form_enctype(form) }}>
        {{ form_widget(form) }}
        <input type="submit"/>
    </form>



你可能感兴趣的:(SYMFONY表单构造和持久化数据)