symfony不用FormBuilder可以?

发布于 2022-09-02 19:46:43 字数 81 浏览 22 评论 0

表单的话可以使用前端设计好的页面来进行嵌套?还是只能用FormBuilder来进行表单创建?如果用自己写的页面post过来的数据如何进行验证跟处理?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

哆兒滾 2022-09-09 19:46:43

我感觉用FormBuilder来创建表单更好

  1. 有防止CSRF攻击的token

  2. 结合对象获取数据更方便

  3. Validation更方便

可能刚开始接触时, 是感觉FormBuilder有点麻烦, 熟悉之后感觉还是蛮好用的

月牙弯弯 2022-09-09 19:46:43

最好用他提供的,其实不管你要什么样的布局,都可以自定义的,可以修改表单的主题的,可以自定义一些字段的,如果自己弄的话,自己验证吧!

如若梦似彩虹 2022-09-09 19:46:43

先回答前两个问题,复杂度很高的表单当然可以用前端设计好的页面来做,FormBuilder不一定是非用不可的。

第三个问题,@xxfaxy 说的要自己验证,在我看来,Symfony已经提供了Validation组件,用Validation的话,我觉得不完全算是自己验证吧。参考Symfony官网,滚动到页面最后,看Validating Values and Arrays这一小节。

我觉得框架虽然提供了很多功能,但那些功能毕竟是具有通用性的,在一些特例的时候,就不要被框架框住了。

别靠近我心 2022-09-09 19:46:43

完全可以!

其实你的问题的核心在于 如何把 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文