【发布时间】: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.这样的查询降低了应用程序的安全性,因为假设数据以某种方式被转储出去,敏感信息可能会泄露给黑客备选方案:您可以只选择您需要的列而不是所有列。