class Model
{
public function getSomeStuff()
{
return array('foo' => 'bar');
}
}
class View
{
public function render($path, array $vars = array())
{
ob_start();
extract($vars);
require($path);
return ob_get_clean();
}
}
class Presenter
{
private $model;
private $view;
public function __construct(Model $model, View $view)
{
$this->model = $model;
$this->view = $view;
}
public function indexAction()
{
$data = $this->model->getSomeStuff();
// Значениея установлены и теперь формируем HTML в виде строки
return $this->view->render('path/to/template.phtml', $data);
}
}
原创在这里
模型视图展示器
这种方法允许您创建视图的抽象。为此,您需要使用一组特定的属性和方法来突出显示视图界面。Presenter 反过来接收对接口实现的引用,订阅视图事件,并根据请求更改模型。如果您遇到:
我们可以假设您正在实施 MVP 模式。
MVC 和 MVP 的区别在于 View 是完全被动的,对 Model 什么都不知道。相比之下,在MVC中,视图(View)不是被动的,拥有模型的视图。
在“适当的”MVP 中,View 类(如果有的话)也不应该实现构造函数。
MVP 模式的典型实现包括:
小例子(取自这里)
模板.phtml
用法
这是一个非常简化的例子,揭示了模式的本质。