Php Symfony表单类:重命名字段名称属性';s值

Php Symfony表单类:重命名字段名称属性';s值,php,symfony,symfony-2.1,Php,Symfony,Symfony 2.1,有没有办法在FormBuilder中设置各个表单字段的名称 我的意思是,通常你得到的是form\u name[field\u name],或者如果form\u name是一个空字符串,你得到的是field\u name 现在我想问一下,是否可以重命名单个字段名,并且表单仍然有效。 大概是这样的: 第一个字段name=“form\u name[字段名称]” 第二个字段name=“重命名的\u fildname” 第三个字段name=“form\u name[字段名称]” 等等 那么这可能吗 更多解

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

我的意思是,通常你得到的是
form\u name[field\u name]
,或者如果form\u name是一个空字符串,你得到的是
field\u name

现在我想问一下,是否可以重命名单个字段名,并且表单仍然有效。 大概是这样的:

第一个字段
name=“form\u name[字段名称]”

第二个字段
name=“重命名的\u fildname”

第三个字段
name=“form\u name[字段名称]”

等等

那么这可能吗

更多解释:这就是我试图实现的目标:
我发现默认登录需要一个名为:
\u username
\u password
的输入字段,但表单没有构建该字段。但是要使表单有效,它需要
\u标记
字段

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

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

它将把所有的名字都输入这个表单:
[field\u names]
,这对令牌很好,但对我的用户名和密码字段不好。它必须是
\u用户名
\u密码
,但实际上它是
\u用户名
\u密码
,这对我不好,对安全包也不好,它只会给我丢坏凭证。

你让事情变得复杂起来。您的表单类对于登录表单是无用的。当您使用实体时,表单类是一个很好的工具,但是您只需要提交两个字段并将它们传递给登录检查。因此,您不会更新或创建实体。但这实际上是需要一个表单类的地方

阅读文件:


你说你想学,但你学错了。正如他们在这里建议您的,您应该使用一个简单的细枝模板作为登录表单,而不是表单类


表单字段中的逻辑实际上是,表单是对象,括号中的名称是属性,因此:

product[description]
是一个表单字段,显示表单正在处理“产品”实体,而“说明”特定字段希望您输入说明文本



使用FOSUserBundle:不要重新发明轮子;)

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

阅读文件:


你说你想学,但你学错了。正如他们在这里建议您的,您应该使用一个简单的细枝模板作为登录表单,而不是表单类


表单字段中的逻辑实际上是,表单是对象,括号中的名称是属性,因此:

product[description]
是一个表单字段,显示表单正在处理“产品”实体,而“说明”特定字段希望您输入说明文本



使用FOSUserBundle:不要重新发明轮子;)

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

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

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

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

正如@mvrhov所提到的,您应该使用防火墙的默认参数来匹配您的自定义表单类型,下面是演示这一点的greate

您可以通过更改防火墙来实现这一点:

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
,以匹配此设置(
意图与上述相同):

最后,您的表单名称:

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

正如@mvrhov所提到的,您应该使用防火墙的默认参数来匹配您的自定义表单类型,下面是演示这一点的greate

您可以通过更改防火墙来实现这一点:

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
,以匹配此设置(
意图与上述相同):

最后,您的表单名称:

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

是的,我知道我把一些事情弄得很复杂,但这是我知道如何学习新东西和极限的唯一方法。感谢您明确地回答我正在尝试做的事情是不可能的。我同意这是这个用例的正确答案,但是在symfony中,您需要能够做到这一点。在这种情况下,您可以只使用{form_row(form.name,{'full_name':'name'}}}}},但不要期望在以后将请求绑定到表单。在与angularJs合作管理数据模型时,我会在某些情况下使用它。是的,我知道我会使一些事情变得复杂,但这是我知道如何学习新东西和限制的唯一方法。感谢您明确地回答我正在尝试做的事情是不可能的。我同意这是这个用例的正确答案,但是在symfony中,您需要能够做到这一点。在这种情况下,您可以只使用{form_row(form.name,{'full_name':'name'}}}}},但不要期望在以后将请求绑定到表单。在使用angularJs管理数据模型时,我会在某些情况下使用它。