Php 使用MVC帮助将模型放入我的控制器
一段时间以来,我一直在为自己的学习体验构建图书馆/框架。MVC是我花了一段时间才真正理解的东西之一,但我最终还是“明白了” 下面是PHP中基本MVC设置的一些示例代码。到目前为止,我认为我的方向是正确的,我需要一些帮助,在靠近底部的“示例控制器”中,您将看到我可以在哪里创建视图,我只需要找出如何最好地将数据从模型文件获取到该控制器类中。如果可以的话,请用示例代码帮助我,希望我能理解 此外,我也欢迎对任何守则提出任何意见/建议 抽象控制器类。。。Php 使用MVC帮助将模型放入我的控制器,php,model-view-controller,model,Php,Model View Controller,Model,一段时间以来,我一直在为自己的学习体验构建图书馆/框架。MVC是我花了一段时间才真正理解的东西之一,但我最终还是“明白了” 下面是PHP中基本MVC设置的一些示例代码。到目前为止,我认为我的方向是正确的,我需要一些帮助,在靠近底部的“示例控制器”中,您将看到我可以在哪里创建视图,我只需要找出如何最好地将数据从模型文件获取到该控制器类中。如果可以的话,请用示例代码帮助我,希望我能理解 此外,我也欢迎对任何守则提出任何意见/建议 抽象控制器类。。。 /** * MVC Example Projec
/**
* MVC Example Project
*/
/**
* Extend this class with your Controllers
* Reference to the model wrapper / loader functions via $this->model
* Reference to the view functions via $this->view
*/
abstract class Core_Controller {
protected $view;
protected $model;
function __construct($dependencyContainer){
$this->view = new Core_View();
//$this->view = $dependencyContainer->get(view);
}
}
抽象模型类
/**
* MVC Example Project
*/
/**
* Extend this class with your Controllers
* Reference to the model wrapper / loader functions via $this->model
* Reference to the view functions via $this->view
*/
abstract class Core_Controller {
protected $view;
protected $model;
function __construct($dependencyContainer){
$this->view = new Core_View();
//$this->view = $dependencyContainer->get(view);
}
}
/**
* Extend this class with your models and reference to the database object via $this->$db
*/
abstract class Core_Model {
protected $db;
protected $session;
function __construct($dependencyContainer) {
$this->db = $dependencyContainer->get(database);
$this->session = $dependencyContainer->get(session);
}
}
视图类,也可能使其抽象
class Core_View {
protected $data;
# Load a view file (views/$view.php);
# $param data this gets extracted and be thus be used inside the view
# When loading another view from inside the view file the data is 'cached' so you
# don't have to pass them again
public function load($view,$data = null) {
if($data) {
$this->data = $data;
extract($data);
} elseif($this->data != null) {
extract($this->data);
}
require(APP_PATH . "Views/$view.php");
}
public function set($data = null) {
if($data) {
$this->data = $data;
extract($data);
} elseif($this->data != null) {
extract($this->data);
}
}
}
把它放在一起的例子
/**
* Example Controller
*/
class User_Controller extends Core_Controller {
public function profile()
{
$profileData = array();
$profileData = //GET from Model
$this->view->load('userProfile', $profileData);
}
}
?>
您会使用数据访问层(DAL)/对象关系映射(ORM)吗?看看,或者 我想说的是,您缺少了应用程序中操纵模型的部分。它可能是你的控制器,但不是一个好的做法。所以我们需要一个模型映射器 从控制器获取模型数据的最佳方法就是调用它。但通常我们使用一种“指针”,它知道如何填充对象模型。此指针称为“映射器”(): 此函数将执行数据库查询,并用数据填充一个特定模型。例如,您还可以为“列表”操作获取对象数组 然后将此模型传递给视图 我想你应该看看Zend Framewok快速入门。它会给你一些想法
也请看这个问题:我的建议是根本不要将视图和模型绑定到控制器。让它们可以从控制器代码实例化,就像任何其他类一样。然后,您可以以标准的面向对象方式获取模型数据(并将其传递给视图)。那么,Zend Framework、CakePHP和Symfony这样做是错误的吗?=]不,他们没有错。这只是一个不同的观点和偏好:灵活与严格。我认为这是最好的选择,而不仅仅是“严格”。如果你正在构建一个web应用程序,如果你使用“灵活”的方式,你会在同一个视图实例化中一遍又一遍地重复你的自我。这就是大多数被广泛采用的框架不这样做的原因。但是你不能有嵌套视图功能,视图可以被认为是容器而不是容器,就像包含面板/框架的表单一样。这就是为什么我更喜欢灵活的方式,因为我不需要重复doctype、title、菜单等(但它们仍然可以参数化,例如突出显示活动菜单)这不适用。您可以执行相同的操作,并将视图绑定到控制器。实际上,这是上述框架中的一个常见特性。不同的概念。+1我认为为学习目的构建内部框架始终是一个好的做法。我从中学到了很多。您好,我不打算使用DAL或ORM。我试图决定在哪里包括/实例化模型对象,可能在我的核心控制器类中?或者在我的core_controller类中创建一个loader方法,然后在像user_controller这样的实际控制器中,我可以调用loader方法并将模型的名称传递给控制器中的loadeyes。但您必须填充这些模型。这不是一个很好的实践,用一个控制器方法来完成这一切。即使您不使用ORM和DAL,我也建议您使用数据映射器。因此,您将从控制器调用映射器,这些映射器将填充您的模型并将其返回给控制器。类似于:
Core\u DataMapper
以及getUserById($id)