我已经用silex启动了一个项目......我做了身份验证,一切正常。但现在,我想获取一些用户的数据,我在自定义UserProvider中使用的User类(来自此示例Silex doc - Defining a custom User Provider)是最终的,因此我无法覆盖它。 我打算在loadUserByUsername()中使用查询来获取所有信息,以限制对数据库的访问。
以正确的方式覆盖Symfony \ Component \ Security \ Core \ User,还是必须创建另一个用户管理器,如果是这样,如何以正确的方式执行?
由于
答案 0 :(得分:3)
通过添加
等方法,覆盖自定义UserProvider是一种正确的方法和
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模式。