1

有没有办法在 FormBuilder 中设置单个表单字段名称?

我的意思是通常你得到的是form_name[field_name],或者如果 form_name 是你得到的空字符串field_name

现在我想问是否可以重命名单个字段名称并且表单仍然有效。像这样的东西:

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

那么这可能吗?

更多解释:这就是我想要实现的目标:带有表单类的默认 Symfony 用户实体
我发现默认登录需要名为的输入字段:_usernameand _password,但表单不会构建它。但要使其有效的表格需要该_token字段。

现在,如果我尝试在表单中添加名称:

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

它会将所有名称都输入这种形式:_[field_names]这对令牌有利,但对我的用户名和密码字段不利。它需要_username_password但它实际上是_[username]_[password]这对我不利,对安全捆绑包也没有好处,它只会给我抛出错误的凭据。

4

3 回答 3

4

你让事情变得复杂。您的表单类对登录表单毫无用处。当您使用实体时,表单类是一个很好的实用程序,但您只需要提交两个字段并将它们传递给登录检查。因此,您无需更新或创建实体。但这是你真正需要一个表单类的地方。

阅读文档: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不要重新发明轮子;)

于 2013-02-08T15:01:21.490 回答
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';
}
于 2014-07-09T08:26:25.403 回答
0

另一件事是您可以使用表单名称轻松配置登录参数,例如

username_parameter: "account_login[username]"
password_parameter: "account_login[password]"
csrf_parameter: "account_login[_token]"
于 2013-02-08T15:14:23.903 回答