【问题标题】:Display user information via model?通过模型显示用户信息?
【发布时间】:2022-01-06 11:39:11
【问题描述】:

我有以下问题/问题。我正在开发我的 Webshop 项目(Plain PHP + MySQL),到目前为止,我已经使用 MVC 模式/模型构建了注册、登录、产品等。当用户登录时,它会将email only保存到session$_SESSION[ $customerRepository->getEmail() ] ),然后重定向到仪表板。问题是,我想显示一些信息(例如名字和姓氏),并在仪表板中为用户制作欢迎消息。

我做了这个功能,它会寻找登录的用户。

public function userData(string $email)
{
    return $this->customerRepository->getByEmail($email);
}

随后在 Dashboard Controller 内部调用:

public function dashboard(): void {
    $this->loginService->accessDashboard();     
      //Get E-Mail from session 
    $getLoginInfo=$_SESSION['login'];   
      //Look for users with particular email 
    $firstName=$this->loginService->userData($getLoginInfo);    
      //Render to View
    $this->render('dashboard', ['firstName'=>$firstName]); }

存储库:

public function getByEmail(string $email)
{
    $tableName = $this->setTableName();
    $className = $this->setClassName();
    $statement = $this->connection->prepare("SELECT * FROM `$tableName` WHERE email=:email");
    $statement->execute(['email' => $email]);
    //Customer Model -> id, first name, last name, password, email 
    $statement->setFetchMode(PDO::FETCH_CLASS, $className);
    return $statement->fetch(PDO::FETCH_CLASS);
}

我想要的是,通过视图
$customer->getFirstName() 中的模型(类)访问信息,而不是作为对象 $customer->名字。
现在,只有 E-Mail 方法可以从模型中访问:$customer->getEmail()

感谢您的宝贵时间!

【问题讨论】:

  • 那么您是否将这些吸气剂添加到模型中?
  • 是的,我做到了!所有的 getter 和 setter 都在模型内部。就像我说的,我只能从模型 smh 获得电子邮件。
  • 您需要尽量避免像SELECT * 这样的查询,因为这会加载与该记录相关的所有信息,包括敏感信息,如密码。问题:1.如果结果集很大,不必要的列会占用大量资源,2.这样的查询降低了应用程序的安全性,因为假设数据以某种方式被转储出去,敏感信息可能会泄露给黑客备选方案:您可以只选择您需要的列而不是所有列。

标签: php model-view-controller


【解决方案1】:

您正在通过

获取用户
    $statement = $this->connection->prepare("SELECT * FROM `$tableName` WHERE email=:email");
    $statement->execute(['email' => $email]);

但你从不存储它。获取结果,如下所示:

// select a particular user by id
$stmt = $pdo->prepare("SELECT <YOUR COLUMNS HERE> FROM `$tableName` WHERE email=:email");
$stmt->execute(['email' => $email]); 
$user = $stmt->fetch();

因此,您将拥有一个 $user 变量,其中包含您需要的所有信息。因此,您将需要实例化您的模型class 并调用其设置器以根据您在$user 中的内容设置其值。一旦你有了这样一个实例,你就可以使用它并通过调用一些 getter 来获取它的属性。

【讨论】:

  • 我现在所做的,我创建了另一个模型(NameModel),并且完全相同的代码可以正常工作。但我认为这在实践中并不是那么好。 Nagyon szepen koszonom 一个 segitsegedet! @Lajos :)
  • @dnyprcy nagyon szívesen,további kellemes kódolást! (不客气,编码愉快!)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
  • 2017-04-21
  • 2023-04-02
  • 1970-01-01
  • 2012-01-12
  • 1970-01-01
相关资源
最近更新 更多