Symfony 2.5.6 打破登录?
Posted
技术标签:
【中文标题】Symfony 2.5.6 打破登录?【英文标题】:Symfony 2.5.6 breaking login? 【发布时间】:2014-10-24 16:00:09 【问题描述】:我遵循登录/安全约定,Symfony 2.3 到 2.55 一切正常,直到我更新到 2.5.6。现在正在显示登录网址:
属性“_username”和方法“getUsername()”、“username()”、“isUsername()”、“hasUsername()”、“__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;
【问题讨论】:
去掉下划线。很惊讶它在 2.3 中工作。 Twig widget_attributes 块被覆盖,以便能够更改输入的名称。用户和登录不再使用 _username、_password 作为实体属性/输入 ID。但仍然使用 _username 等,作为交响乐登录所需的输入名称。现在 2.5.6 版本正在运行 ;) 【参考方案1】:字段的名称是可配置的。您可以将_username
和_password
字段更改为您想要的任何内容,并将它们设置在security.yml
中。例如,当我使用自定义 LoginType(别名 login_form
)时,我在 security.yml
中有这个:
security:
firewalls:
secured_area:
username_parameter: login_form[username]
password_parameter: login_form[password]
这允许我在登录模型中拥有$username
和$password
变量。
【讨论】:
【参考方案2】:Symfony 标准登录需要您提交一个 _username 和 _password 命名的输入。 最初我的实体用户属性是用户名和密码。 不幸的是,我发现 twig 忽略了从表单类型生成器发送的 attrname='_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 %
【讨论】:
很高兴你能成功。您还可以将参数名称从 _username 更改为与默认表单内容更好匹配的名称,从而避免与 twig 混淆。 form_login: username_parameter: cerad_tourn_account_user_login[用户名] symfony.com/doc/current/reference/configuration/… 好主意。无论如何,我不明白为什么默认用户名不起作用,除非我覆盖 Twig,因此我认为我的解决方案不是一个坏的(尽管它已被投票否决),因为它甚至增加了覆盖默认名称属性的灵活性. 投票率低总是很烦人。通常这意味着投反对票的人不理解问题或答案,所以不要个人认为。 :) 谢谢,我只是害怕错过一些重要的点。以上是关于Symfony 2.5.6 打破登录?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Symfony 路由从 .htaccess 重写 URL
Symfony 5:/lucky/number 应用程序的 404 页面
使用 localhost 从主机访问 Vagrant 机器上的 symfony Web 服务器
Symfony 5 - 使用 json_login 登录;登录过程不起作用;