有没有办法在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]
这是对我不好,也不安全套件简单地抛出我坏凭据。
你把事情的方式复杂。 你的窗体类是无用的登录表单。 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不推倒重来;)
正如@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';
}
另一件事是,你可以很容易地与形式的名称,如配置登录参数
username_parameter: "account_login[username]"
password_parameter: "account_login[password]"
csrf_parameter: "account_login[_token]"