-->

Symfony的Form类:重命名字段名称属性的值(Symfony Form Class: rena

2019-08-16 19:55发布

有没有办法在FormBuilder设置各个表单字段的名字吗?

我的意思,通常你是为form_name[field_name]或者如果FORM_NAME是一个空字符串你field_name

现在我要问,如果有可能重命名各个字段的名称和形式仍然有效。 事情是这样的:

第一字段name="form_name[field_name]"
第二个字段name="renamed_fildname"
第三字段name="form_name[field_name]"
等等...

所以,这可能吗?

更多的解释:这就是我想实现: symfony默认用户实体与Form类
我想通了,默认的登录需要一个名为输入字段: _username_password ,但形式不构建。 但形式是有效的需求_token领域。

现在,如果我尝试将名称添加到窗体:

public function getName(){ return '_'; }

它将但所有的名字为这种形式: _[field_names]这是很好的令牌,但不利于我的用户名和密码字段。 它需要被_username_password但它实际上是_[username]_[password]这是对我不好,也不安全套件简单地抛出我坏凭据。

Answer 1:

你把事情的方式复杂。 你的窗体类是无用的登录表单。 Form类,当你与实体工作的好工具,但你只需要提交两个领域,并将它们传递到登录检查。 所以,你不更新或创建的实体。 但是,这是你真正需要一个窗体类。

阅读文档: http://symfony.com/doc/current/book/forms.html#creating-form-classes


你说你想了解这一点,但你了解它的错误的方式。 当他们在这里劝你http://symfony.com/doc/current/book/security.html#using-a-traditional-login-form你应该使用一个简单的树枝模板登录表单的形式无类。


在表单字段的逻辑实际上是,这种形式是对象和在括号中的名称是属性,以便:

product[description]

是表示形式处理“产品”实体和具体领域,这是“说明”要你输入一个描述文本表单字段。


使用FOSUserBundle: https://github.com/FriendsOfSymfony/FOSUserBundle不推倒重来;)



Answer 2:

正如@mvrhov提到你应该默认防火墙,以配合您的自定义表单类型的参数,这里是马丽娟文章演示这一点。

您可以通过改变你的防火墙来匹配该这样做:

security:
firewalls:
    my_firewall:
        pattern:    ^/
        form_login:
            username_parameter: "form_name[username_field_name]"
            password_parameter: "form_name[password_field_name]"
            csrf_parameter: "form_name[_token]"
            csrf_provider: form.csrf_provider
            intention: authentication

此外更改setDefaultOptions您的自定义窗体的符合此( intention同上):

$resolver->setDefaults(array(
        'intention' => 'authentication'
    ));

最后,表单的名字:

public function getName()
{
    return 'form_name';
}


Answer 3:

另一件事是,你可以很容易地与形式的名称,如配置登录参数

username_parameter: "account_login[username]"
password_parameter: "account_login[password]"
csrf_parameter: "account_login[_token]"


文章来源: Symfony Form Class: rename fields name attribute's value