gpt4 book ai didi

php - 如何将模型加载到 MVC 中的 Controller 中

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:45:38 27 4
gpt4 key购买 nike

我正在构建一个轻量级 MVC,主要用于学习过程,但我希望它足够好以最终使用。

下面是基本 Controller 外观的基本示例/演示,我们假设 URI 已被处理并路由到此 Controller 和这 2 个方法。

1) 我需要从数据库/缓存/等获取数据...在我的模型类中,我只需要有关如何将我的模型加载到下面的示例 Controller 中的帮助,您可以看到我在下面添加了这个$profileData = $this->model->getProfile($userId) 只是编造的,不存在的,我怎么能得到这样的东西呢?或者我应该以不同的方式将模型加载到类中吗?

2) 许多页面都需要用户登录网站。我是否应该在 Controller 中处理下面的部分以检查用户是否已登录,例如,在构建配置文件页面之前,检查用户是否已登录,如果没有则构建一个登录页面并将这些检查添加到每个 Controller 方法中/页?

/**
* Example Controller
*/
class User_Controller extends Core_Controller {

// domain.com/user/id-53463463
function profile($userId)
{
//GET data from a Model
$profileData = $this->model->getProfile($userId);

$this->view->load('userProfile', $profileData);
}

// domain.com/user/friends/
function friends()
{
//GET data from a Model
$friendsData = $this->model->getFriendlist();

$this->view->load('userFriends', $friendsData);
}
}

核心

abstract class Core_Controller {
protected $view;
protected $model;

function __construct(DependencyContainer $dependencyContainer){
$this->view = new Core_View();
//$this->view = $dependencyContainer->get(view);


}
}

最佳答案

可能有很多方法可以完成您正在尝试的事情。

“最简单的”可能就是覆盖构造函数并直接实例化模型。

在 User_Controller 中:

public function __construct(DependencyContainer $dc) {
parent::__construct($dc);

$this->model = new User_Model();
}

不过我猜您正在寻找自动化程度更高的东西。如果您希望模型与 Controller 同名减去“_Controller”,只需在构造函数中使用 get_class($this) 并使用 PHP 的字符串函数解析出您想要的内容。一旦将其放入变量中,就可以使用该变量来实例化模型:

在 Core_Controller 中:

public function __construct(DependencyContainer $dc) {
$this->view = new Core_View();

// $model_class should be 'User_Model' now
$model_class = str_replace('_Controller', '_Model', get_class($this));

// now instantiate the model
$this->model = new $model_class();
}

我实际上还没有使用过任何只能让一个模型与每个 Controller 相关联的框架(CakePHP 除外?我不记得了)。使用 Symfony,模型和 Controller 完全分离,因此您可以将任何模型与任何 Controller 一起使用。您只需根据需要实例化模型。 Symfony 使用 Doctrine ORM,例如,在 Controller 操作中,如果您需要一个模型,您可以这样做:

$model = Doctrine::getTable('User');

为了促进解耦设计,考虑更像这样的设计可能是值得的,我保证在某个时候您会想要在某个 Controller 中使用多个模型。

2.) 就身份验证而言。似乎相当普遍的事情是有某种设置(无论是在配置文件中还是在成员变量中)来说明当前操作是否需要对用户进行身份验证。每次 Action 运行时都会处理(Yii 称这些东西为过滤器)。如果用户需要登录,它会存储他们试图访问的页面,然后将他们重定向到登录页面(您只需要创建一个)。一旦他们正确地进行身份验证,它就会将他们重定向回他们最初前往的地方。

关于php - 如何将模型加载到 MVC 中的 Controller 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7328188/

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