PHP是否支持MVP模式?

5

有很多例子用ASP.NET解释MVP模式,但是没有找到使用PHP的例子。

我是PHP程序员,想知道在哪里可以找到MVP模式的PHP示例?


你是不是指的是MVC? - Roopesh Shenoy
1
@Roopesh Shenoy:http://en.wikipedia.org/wiki/Model_View_Presenter - Felix Kling
4个回答

13
短答案是:是的,PHP可以
(注意,它并不完全符合原始论文中描述的MVP模式,而是一种Web变体)
MVC和MVP之间的区别在于,视图是完全被动的,不知道模型层。而在MVC中,它不是被动的,并且知道模型层。在适当的MVP中,View类(如果有)也不应该实现构造函数。
MVP的典型示例将由以下几部分组成:
1. 数据访问层(DataMappers、ORM等) 2. 业务逻辑(如验证和计算) 3. 被动视图类(它可以是一个模板,但最好坚持使用类) 4. 桥接模型和视图的Presenter 下面是一个使用PHP实现Model-View-Presenter的示例:
(注:在真实场景中,模型不是一个类,而是抽象层,包含很多类来处理应用程序逻辑。我为了演示目的称其为“Model”)
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();  

        // Variables are set now, render the HTML
        // And returns as a string
        return $this->view->render('path/to/template.phtml', $data);
     }
}

文件:template.phtml

<!DOCTYPE html>
<html>
<head>
  <title>...</title>
</head>

<body>

  <?php foreach($vars as $key => $value): ?>
      <p><?php echo $key; ?> : <?php echo $value; ?></p>
  <?php endforeach; ?>

</body>
</html>

使用方法如下:

$model   = new Model();
$view    = new View();

$presenter = new Presenter($service, $view);

echo $presenter->indexAction();

请注意,这只是一个非常简化的例子。在实际场景中,任何基于MVP的应用程序应该还要实现诸如:路由器、SPL类自动加载器等功能。

10

MVP和MVC都是为GUI应用程序设计的实际上。大多数PHP框架将"MVC"更多地用作流行语。使用愚蠢模型(只有数据库)、非活动视图(=模板)和编排控制器的实际实现已经匹配了MVP。就功能而言,控制器通常也充当演示者的角色,将数据从模型传输到视图中。 (在正确的MVC中,模型和视图之间的交互更多,视图实际上是活动组件)。

但无论如何,有一些框架实际上已经意识到了新术语和模式。


lionframework.org和Openlight的第一个链接指向的页面目前已经不存在了。 - Julian Moreno
@JulianMoreno 感谢您的留言!已使用互联网档案馆版本更新链接。 - mario

0

0
在我看来,Lion Framework(www.lionframework.org)是目前最成熟的MVP实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接