Php Symfony2-在登录时对非对象调用成员函数getPassword()

Php Symfony2-在登录时对非对象调用成员函数getPassword(),php,symfony,Php,Symfony,我用symfony实现了一个简单的标准登录。该错误仅在我输入正确的凭据时出现,这是完整错误: 错误:在C:\BitNami\wamp\apache2\htdocs\Scouter\front\src\Scouter\UserBundle\Entity\User.php第422行对非对象调用成员函数getPassword 堆栈跟踪的屏幕截图可在此处找到: security.yml encoders: Scouter\UserBundle\Entity\User: algor

我用symfony实现了一个简单的标准登录。该错误仅在我输入正确的凭据时出现,这是完整错误:

错误:在C:\BitNami\wamp\apache2\htdocs\Scouter\front\src\Scouter\UserBundle\Entity\User.php第422行对非对象调用成员函数getPassword

堆栈跟踪的屏幕截图可在此处找到:

security.yml

encoders:
    Scouter\UserBundle\Entity\User:
        algorithm: bcrypt
        cost:      15

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

providers:
    scouter_users:
        entity: { class: UserBundle:User }

firewalls:
    secured_area:
        pattern:    ^/
        form_login:
            check_path: /user/login_check
            login_path: /user/login
        logout:
            path:   /user/logout
            target: /
        anonymous: ~
        remember_me:
            key:      "%secret%"
            lifetime: 31536000
            path:     /
            domain:   ~
我已经分离了和实体,因为我想稍后实现oauth。密码存储在我的成员实体中,用户名存储在用户实体中。

更新:我一直在调试和转储symfony核心代码中所有可能的变量。该错误是由于保存在AbstractToken中的用户返回的是成员ID而不是成员对象。我还是不知道为什么。。。因此,请随意提出可能的解决方案

我前一段时间就开始工作了。我不知道出了什么问题。谁有什么想法


提前谢谢

如上所述,您的成员实体中没有唯一的主键id,我不知道,可能是我错了,可能是您没有将实体的完整版本上载到github。。。如果您忘记添加,只需添加它,条令会使用它获取对对象的引用。

请发布您的身份验证处理程序的代码。我想我没有自定义的身份验证处理程序。我正在使用Symfony的标准用户/身份验证提供商?如果我错了:我在哪里找到这段代码?也许你忘了添加一个use-Scouter\UserBundle\Entity\Member,并在用户类中的构造函数中实例化它?Member是什么?它在哪里居住?它当前为空,这就是错误的原因。我编辑了我的问题Noy Gabay。在扩展UserProviderInterface的用户存储库中,当我在refreshUser方法中转储用户实体时,成员已正确加载。主键映射到user\u id列。。。或者这是不可能的,因为它也是与用户的一对一关系table@HelenaStandaert您需要向成员实体添加唯一主键,并在用户实体中受保护的$Member上方指定它。因为,默认情况下,条令按id引用对象,这是一个流行的名称,如果在模式定义中对其进行了不同的调用,则需要在映射信息中指定它。我从来没有使用过注释映射,下面是一个示例,说明如何以xml格式进行此操作:
public function getPassword()
{
    return $this->getMember()->getPassword();
}

public function getSalt()
{
   return $this->getMember()->getPassword();
}