在silex中获取用户数据的最佳做法是什么?

时间:2015-06-01 22:29:01

标签: authentication silex usermanager

我已经用silex启动了一个项目......我做了身份验证,一切正常。但现在,我想获取一些用户的数据,我在自定义UserProvider中使用的User类(来自此示例Silex doc - Defining a custom User Provider)是最终的,因此我无法覆盖它。 我打算在loadUserByUsername()中使用查询来获取所有信息,以限制对数据库的访问。

以正确的方式覆盖Symfony \ Component \ Security \ Core \ User,还是必须创建另一个用户管理器,如果是这样,如何以正确的方式执行?

由于

1 个答案:

答案 0 :(得分:3)

通过添加

等方法,覆盖自定义UserProvider是一种正确的方法
  • 找到($用户ID)
  • 的findAll()
  • 保存($用户)
  • 删除($用户ID)

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模式。