Symfony 2.5.6中断登录?

Symfony 2.5.6中断登录?,symfony,login,Symfony,Login,我遵循登录/安全约定,Symfony 2.3到2.55的一切正常,直到我更新到2.5.6。现在,登录url将显示: 属性“\u username”或方法“getUsername()”、“username()”、“isUsername()”、“hassusername()”、“\u get()”都不存在,并且在类“Acme\DemoBundle\Entity\Login”中都没有公共访问权限 有办法解决这个问题吗 namespace Acme\DemoBundle\Entity; class L

我遵循登录/安全约定,Symfony 2.3到2.55的一切正常,直到我更新到2.5.6。现在,登录url将显示:

属性“\u username”或方法“getUsername()”、“username()”、“isUsername()”、“hassusername()”、“\u get()”都不存在,并且在类“Acme\DemoBundle\Entity\Login”中都没有公共访问权限

有办法解决这个问题吗

namespace Acme\DemoBundle\Entity;

class Login {
    protected $_username;
    protected $_password;
    protected $_remember_me;

    public function get_Username() {
        return $this->_username;
    }

    public function set_Username($username) {
        $this->_username = $username;
    }

    public function get_Password() {
        return $this->_password;
    }

    public function set_Password($password) {
        $this->_password = $password;
    }

    public function get_RememberMe() {
        return $this->_remember_me;
    }

    public function set_RememberMe($remember) {
        $this->_remember_me = $remember;
    }
}

Symfony标准登录需要您提交一个名为输入的_用户名和_密码。 最初,我的实体用户属性是用户名和密码。 不幸的是,我发现twig忽略了从formtype生成器发送的attr{name=''u username'}来呈现输入。因此,我采用了将实体属性重命名为下划线版本的快捷方式。 然后一切正常,直到我将Symfony更新到2.5.6版本。 然后,正如Cerad所建议的,我去掉了实体下划线和表单id。。。但是仍然需要传递带有下划线的输入名称。因此,我覆盖了这个假发块,只是将名称分配从第一行更改为最后一行:

{% block widget_attributes -%}
id="{{ id }}"
{%- if read_only %} readonly="readonly"{% endif -%}
{%- if disabled %} disabled="disabled"{% endif -%}
{%- if required %} required="required"{% endif -%}
{%- for attrname, attrvalue in attr -%}
    {{- " " -}}
    {%- if attrname in ['placeholder', 'title'] -%}
        {{- attrname }}="{{ attrvalue|trans({}, translation_domain) }}"
    {%- elseif attrvalue is sameas(true) -%}
        {{- attrname }}="{{ attrname }}"
    {%- elseif attrvalue is not sameas(false) -%}
        {{- attrname }}="{{ attrvalue }}"
    {%- endif -%}
{%- endfor -%}
name={{full_name}}
{%- endblock widget_attributes %}

字段的名称是可配置的。您可以将
\u username
\u password
字段更改为您想要的任何内容,并在
security.yml
中进行设置。例如,当我使用自定义登录类型(别名
login\u form
)时,我在
security.yml
中有这样的内容:

security:
    firewalls:
         secured_area:
             username_parameter: login_form[username]
             password_parameter: login_form[password]

这允许我在登录模型中使用
$username
$password
变量。

Git去掉下划线。令人惊讶的是,它在2.3.Twig widget_attributes块中工作,因为能够更改输入的名称而被覆盖。用户和登录不再使用_用户名、密码作为实体属性/输入id。但仍然使用_用户名等作为symphony登录工作所需的输入名称。现在2.5.6版本正在运行;)很高兴你让它工作了。您还可以将参数名称从_username更改为更符合默认表单内容的名称,从而避免弄乱twig。表单\登录名:用户名\参数:cerad\ u tourn\ u帐户\用户\登录名[用户名]好主意。无论如何,我不明白为什么默认用户名不起作用,除非我覆盖了Twig,因此我认为我的解决方案不是一个坏的解决方案(尽管它被投了反对票),因为它甚至增加了覆盖默认名称属性的灵活性。路过投票总是令人讨厌。通常这意味着投反对票的人不理解问题或答案,所以不要把它当回事。:)谢谢,我只是害怕错过一些重要的一点。