具有现有用户类

时间:2016-01-29 09:32:20

标签: symfony doctrine-orm fosuserbundle symfony-security

我正在尝试使用(并了解)安全性如何在Symfony中运行。我创建了一个登录表单,它适用于硬编码用户。

现在我想在我的数据库中使用现有的用户表。该表包含所有必需的字段,但具有不同的列名。该实体也存在,也有不同的名称(例如“customUserId”而不是“id”)。

类似(使用“MAGIC_MAPPING”):

/**
 * @ORM\Table(name="custom_user_table")
 * @ORM\Entity
 */
class User implements UserInterface, \Serializable
{
    /**
     * @ORM\Column(name="customUserId", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     * @MAGIC_MAPPING so it links this to the mandatory "id" field
     */
    private $customUserId;

    ...
}

有没有办法映射现有字段,以便Symfony将它们用于登录目的?或者至少我可以在不改变数据库结构(仅实体类)的情况下使其工作吗?

我已经尝试了从这个论坛和Symfony文档中的几个动作,但它总是以我无法修复的丑陋错误结束。

任何想法或主角?非常感谢你的帮助,我一直在努力奋斗几个小时......

3 个答案:

答案 0 :(得分:1)

您必须更改security.yml文件中的提供程序配置

这是一个例子,我使用管理员实体的电子邮件字段,我想你可以对你的实体做同样的事情

providers: administrator: entity: { class: Entity:Administrator, property: email }

答案 1 :(得分:0)

尝试更改该表的ORM文件。 使用Command promt创建一个ORM文件。 然后编辑orm文件。

    <mapped-superclass name="FOS\UserBundle\Entity\User" table="your_table_name">
    /.../
   </mapped>

答案 2 :(得分:0)

Benoît的回答帮助我解决了问题。我过分关注Symfony文档的创建过程,我忘记了必要的:UserInterface。无需映射任何内容,只需实现此接口和定义的方法,如:

public function getUsername() {
    return $this->customLogin;
}

然后更新提供者配置(感谢Benoit):

providers:          

    db_sam_provider:
        entity:
            class: AppBundle:User
            property: customLogin 

其他部分符合Symfony文档:herehere