现有用户 class 的 Symfony 登录表单
Symfony Login form with existing user class
我正在尝试使用(并理解)Security 在 Symfony 中的工作原理。我创建了一个登录表单,它适用于硬编码用户。
现在我想使用数据库中的现有用户 table。 table 包含所有必填字段,但列名不同。该实体也存在,但名称不同(例如 "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 使用它们进行登录?或者至少我可以在不更改数据库结构的情况下使其工作(仅实体class)吗?
我已经从这个论坛和 Symfony 文档中尝试了一些操作,但它总是以我无法修复的丑陋错误结束。
有什么想法或线索吗?非常感谢您的帮助,我已经为此苦苦挣扎了几个小时...
您必须更改 security.yml 文件中的提供程序配置
这是一个示例,我使用我的管理员实体的电子邮件字段,我认为您可以对您的实体执行相同的操作
providers:
administrator:
entity: { class: Entity:Administrator, property: email }
尝试更改 table 的 ORM 文件。
使用命令提示符创建 ORM 文件。
然后编辑orm文件。
<mapped-superclass name="FOS\UserBundle\Entity\User" table="your_table_name">
/.../
</mapped>
Benoît 的回答帮我弄明白了。我过于关注 Symfony 文档的创建过程,以至于我忘记了最重要的:UserInterface
。不需要映射任何东西,只需实现这个接口和定义的方法,如:
public function getUsername() {
return $this->customLogin;
}
然后更新提供商配置(感谢 Benoit):
providers:
db_sam_provider:
entity:
class: AppBundle:User
property: customLogin
我正在尝试使用(并理解)Security 在 Symfony 中的工作原理。我创建了一个登录表单,它适用于硬编码用户。
现在我想使用数据库中的现有用户 table。 table 包含所有必填字段,但列名不同。该实体也存在,但名称不同(例如 "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 使用它们进行登录?或者至少我可以在不更改数据库结构的情况下使其工作(仅实体class)吗?
我已经从这个论坛和 Symfony 文档中尝试了一些操作,但它总是以我无法修复的丑陋错误结束。
有什么想法或线索吗?非常感谢您的帮助,我已经为此苦苦挣扎了几个小时...
您必须更改 security.yml 文件中的提供程序配置
这是一个示例,我使用我的管理员实体的电子邮件字段,我认为您可以对您的实体执行相同的操作
providers:
administrator:
entity: { class: Entity:Administrator, property: email }
尝试更改 table 的 ORM 文件。 使用命令提示符创建 ORM 文件。 然后编辑orm文件。
<mapped-superclass name="FOS\UserBundle\Entity\User" table="your_table_name">
/.../
</mapped>
Benoît 的回答帮我弄明白了。我过于关注 Symfony 文档的创建过程,以至于我忘记了最重要的:UserInterface
。不需要映射任何东西,只需实现这个接口和定义的方法,如:
public function getUsername() {
return $this->customLogin;
}
然后更新提供商配置(感谢 Benoit):
providers:
db_sam_provider:
entity:
class: AppBundle:User
property: customLogin