表单的话可以使用前端设计好的页面来进行嵌套?还是只能用FormBuilder来进行表单创建?如果用自己写的页面post过来的数据如何进行验证跟处理?
欢迎选择我的课程,让我们一起见证您的进步~~
我感觉用FormBuilder来创建表单更好
有防止CSRF攻击的token
结合对象获取数据更方便
Validation更方便
可能刚开始接触时, 是感觉FormBuilder有点麻烦, 熟悉之后感觉还是蛮好用的
最好用他提供的,其实不管你要什么样的布局,都可以自定义的,可以修改表单的主题的,可以自定义一些字段的,如果自己弄的话,自己验证吧!
先回答前两个问题,复杂度很高的表单当然可以用前端设计好的页面来做,FormBuilder不一定是非用不可的。
第三个问题,@xxfaxy 说的要自己验证,在我看来,Symfony已经提供了Validation组件,用Validation的话,我觉得不完全算是自己验证吧。参考Symfony官网,滚动到页面最后,看Validating Values and Arrays这一小节。
我觉得框架虽然提供了很多功能,但那些功能毕竟是具有通用性的,在一些特例的时候,就不要被框架框住了。
完全可以!
其实你的问题的核心在于 如何把 post 过来的数据(Array类型) 映射到 实体(Entity类型)。
Form 是对 Entity 与 Request 对象的抽象,也就是说,你 Entity 中的 username 在经过 Form 组件抽象之后,输出是类似于 <input name="entityName[property]" /> 这种格式,其中 property 就是你 entity 中的属性(字段名),在 handleRequest 时,前端提交过来的的值,会被自动映射到 entity 的 property 属性中去,你可以理解为 Form 就是把你的 Entity 变的可交互。
那么如果不使用 Form 组件的话怎么办呢?
Symfony 也提供了 Serializer 组件也可以将 Array 映射到 Entity:
你的前端页面:
<form> <input type="text" name="username" /> <input type="text" name="password" /> <button type="submit">Submit</button> </form>
你的 Entity:
<?php namespace AppBundle\Entity; use Symfony\Component\Validator\Constraints as Assert; class User { /** * @Assert\NotBlank */ protected $username; /** * @Assert\NotBlank */ protected $password; public funciton setUsername($username) { $this->username = $username; return $this; } public function getUsername() { return $this->username; } // ... }
将你的 FORM 映射到实体:
/** * $params 就是: * array( * 'username' => '狗剩', * 'password' => '123456' * ) */ $params = $request->request->all(); $entity = $this->get('serializer') ->denormalize($params , 'AppBundle\Entity\User');
像使用了 Form 那样去证一个 Entity:
$errors = $this->get('validator') ->validate($entity);
参考:http://symfony.com/doc/current/components/serializer.html#deserializing-an-object
我感觉用FormBuilder来创建表单更好
有防止CSRF攻击的token
结合对象获取数据更方便
Validation更方便
可能刚开始接触时, 是感觉FormBuilder有点麻烦, 熟悉之后感觉还是蛮好用的
最好用他提供的,其实不管你要什么样的布局,都可以自定义的,可以修改表单的主题的,可以自定义一些字段的,如果自己弄的话,自己验证吧!
先回答前两个问题,复杂度很高的表单当然可以用前端设计好的页面来做,FormBuilder不一定是非用不可的。
第三个问题,@xxfaxy 说的要自己验证,在我看来,Symfony已经提供了Validation组件,用Validation的话,我觉得不完全算是自己验证吧。参考Symfony官网,滚动到页面最后,看Validating Values and Arrays这一小节。
我觉得框架虽然提供了很多功能,但那些功能毕竟是具有通用性的,在一些特例的时候,就不要被框架框住了。
完全可以!
其实你的问题的核心在于 如何把 post 过来的数据(Array类型) 映射到 实体(Entity类型)。
Form 是对 Entity 与 Request 对象的抽象,也就是说,你 Entity 中的 username 在经过 Form 组件抽象之后,输出是类似于 <input name="entityName[property]" /> 这种格式,其中 property 就是你 entity 中的属性(字段名),在 handleRequest 时,前端提交过来的的值,会被自动映射到 entity 的 property 属性中去,你可以理解为 Form 就是把你的 Entity 变的可交互。
那么如果不使用 Form 组件的话怎么办呢?
Symfony 也提供了 Serializer 组件也可以将 Array 映射到 Entity:
你的前端页面:
你的 Entity:
将你的 FORM 映射到实体:
像使用了 Form 那样去证一个 Entity:
参考:http://symfony.com/doc/current/components/serializer.html#deserializing-an-object