gpt4 book ai didi

php - 熟悉 MVC - 我如何使用 session 逻辑、附加类和后台逻辑

转载 作者:可可西里 更新时间:2023-10-31 23:54:14 27 4
gpt4 key购买 nike

在编写 PHP 代码时,我决定从意大利式代码转向尝试实现 MVC。为了实现 MVC 框架,我发泄到 this article文章开了个好头,我设法创建了我的网站,并开发了前端。现在,我正在尝试使用 session 和其他成员(member)区功能来实现后端。我的大脑因新信息而沸腾,我的问题多于答案。

我不知道如何实现额外的类,例如 user 类。例如,如果没有 MVC,我可以在我的 includes 目录中创建新的 user.php 类文件,然后包含它,实例化它,并为对象分配适当的值并将 objest 放入 session 中。

我想寻求专家建议。

我对很多事情感到困惑:

  • 我在哪里添加用户类
  • 如何向我的 MVC 添加和包含用户类
  • 我如何在我的应用程序中携带用户类(我在 session 中理解,但 session 必须有用户对象的 acees
  • 我如何执行登录/注销逻辑以及在后台执行所需的操作

这可能是一个常见的问题,以前做过并不复杂。我也为 不是很好定义的问题 道歉,但我提前感谢你的帮助。

最佳答案

User,MVC 的上下文,是一个 domain object .然而, session 是一种存储介质形式(就像缓存、数据库或文件系统一样)。当您需要将 User 实例的数据存储在那里时,您可以使用某种类型的 data mapper去做。

$user = $this->domainObjectFactory->build('user');
$user->setName('Korben')
->setSurname('Dallas');

if ( some_condition )
{
$mapper = $this->dataMapperFactory->create('session');
$mapper->store($user);
}

这段代码应该为 session 和用户之间的交互提供一个极其简化的示例。

我在哪里添加用户类别?

作为域对象,User 实例应该在 services 中使用并使用工厂进行初始化。在 MVC 上下文中,服务是模型层中的结构,处理应用程序逻辑。它们操纵并促进域对象和存储抽象的交互。

如何向我的 MVC 添加和包含用户类?

您的所有类都应使用自动加载器添加。您应该阅读有关 spl_autoload_register() 的使用的信息, 最好同时使用 namespaces .

实例本身的初始化应该由工厂完成。这使您可以将代码与所述实例的类名分离。

如何在我的应用程序中携带用户类?

你不知道。

PHP 应用程序不会持续存在。你有一个 HTTP 请求,你用它做所有你需要的事情,发送响应并销毁应用程序。 User 类的实例都将是短暂的。

要在请求之间恢复当前用户,您可以在 session 中存储一个标识符。 不要在 session 中转储整个对象。相反,在从 session 中获取用户标识符后,您可以从其他形式的存储中恢复其余的用户帐户详细信息(如果您甚至需要的话)。

整个过程应该由模型层中的某种“识别服务”或“身份验证服务”执行和管理。

如何执行登录/注销逻辑并执行所需的操作?

登录请求首先由 Controller 处理:

public function postLogin( $request )
{
$service = $this->serviceFactory->create('recognition');
$service->authenticate( $request->getParameter('username'),
$request->getParameter('password') );
}

该服务会尝试验证用户的凭据,这会更改模型层的状态。然后, View 实例会查找该状态,然后将您作为经过身份验证的用户重定向到登录页面,或者将您重定向回登录页面并显示一条错误消息。

服务本身将通过工厂在模型 Controller 和 View 之间共享。这意味着他们只会初始化每个服务一次,然后再重用它。类似的东西:

class ServiceFactory
{
private $cache = array();

public function create( $name )
{
if ( array_key_exists($name, $this->cache) === false )
{
$this->cache[$name] = new $name;
}
return $this->cache[$name];
}
}

请记住,他的例子非常简单。

For further reading I would recommend you to go through this collection of links. Also, you might find these 3 posts somewhat useful: this, this and this.

关于php - 熟悉 MVC - 我如何使用 session 逻辑、附加类和后台逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16996516/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com