Symfony 2.5.6中断登录?
我遵循登录/安全约定,Symfony 2.3到2.55的一切正常,直到我更新到2.5.6。现在,登录url将显示: 属性“\u username”或方法“getUsername()”、“username()”、“isUsername()”、“hassusername()”、“\u get()”都不存在,并且在类“Acme\DemoBundle\Entity\Login”中都没有公共访问权限 有办法解决这个问题吗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
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,因此我认为我的解决方案不是一个坏的解决方案(尽管它被投了反对票),因为它甚至增加了覆盖默认名称属性的灵活性。路过投票总是令人讨厌。通常这意味着投反对票的人不理解问题或答案,所以不要把它当回事。:)谢谢,我只是害怕错过一些重要的一点。