在 silex 中获取用户数据的最佳做法是什么?
What is the best practice to get user data in silex?
我已经用 silex 开始了一个项目……我进行了身份验证,一切正常。但是现在,我想获取我的一些用户数据,而我在自定义 UserProvider 中使用的用户 class(来自本示例 Silex doc - Defining a custom User Provider)是最终的,因此我无法覆盖它。
我打算使用 loadUserByUsername() 中的查询来获取所有信息,以限制对数据库的访问。
覆盖 Symfony\Component\Security\Core\User 的方式是否正确,或者我必须创建另一个用户管理器,如果是这样,如何以正确的方式进行?
谢谢
通过添加像
这样的方法来覆盖您的自定义 UserProvider 是正确的方法
- 查找($UserId)
- findAll()
- 保存($用户)
- 删除($UserId)
和
public function buildObject(array $rowFromDatabase) {
$user = new MyUser();
$user->setId($row["id"]);
$user->setUsername($row["username"]);
$user->setSalt($row["salt"]);
$user->setRole($row["role"]);
$user->setPassword($row["password"]);
return $user;
}
其中 MyUser 是您实现 UserInterface
的 POJO
那么您的 loadUserByUsername 将是
public function loadUserByUsername($username) {
$sql = "SELECT * FROM MyUserTable WHERE username = ?";
$row = $this->getDB()->fetchAssoc($sql, array($username));
if($row) {
return $this->buildDomainObject($row);
}else{
throw new UsernameNotFoundException(sprintf('User "%s" not found.', $username));
}
}
要限制与数据库的连接,您可以使用 DAO 模式。
我已经用 silex 开始了一个项目……我进行了身份验证,一切正常。但是现在,我想获取我的一些用户数据,而我在自定义 UserProvider 中使用的用户 class(来自本示例 Silex doc - Defining a custom User Provider)是最终的,因此我无法覆盖它。 我打算使用 loadUserByUsername() 中的查询来获取所有信息,以限制对数据库的访问。
覆盖 Symfony\Component\Security\Core\User 的方式是否正确,或者我必须创建另一个用户管理器,如果是这样,如何以正确的方式进行?
谢谢
通过添加像
这样的方法来覆盖您的自定义 UserProvider 是正确的方法- 查找($UserId)
- findAll()
- 保存($用户)
- 删除($UserId)
和
public function buildObject(array $rowFromDatabase) {
$user = new MyUser();
$user->setId($row["id"]);
$user->setUsername($row["username"]);
$user->setSalt($row["salt"]);
$user->setRole($row["role"]);
$user->setPassword($row["password"]);
return $user;
}
其中 MyUser 是您实现 UserInterface
的 POJO那么您的 loadUserByUsername 将是
public function loadUserByUsername($username) {
$sql = "SELECT * FROM MyUserTable WHERE username = ?";
$row = $this->getDB()->fetchAssoc($sql, array($username));
if($row) {
return $this->buildDomainObject($row);
}else{
throw new UsernameNotFoundException(sprintf('User "%s" not found.', $username));
}
}
要限制与数据库的连接,您可以使用 DAO 模式。