【问题标题】:Does PHP supports MVP pattern?PHP 是否支持 MVP 模式?
【发布时间】:2010-12-25 10:32:33
【问题描述】:

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

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

【问题讨论】:

标签: php asp.net mvp design-patterns


【解决方案1】:

简短的回答是:是的 PHP 可以

(注意,它并不完全是原始论文中描述的 MVP,而是 Web 的变体)

MVC 和 MVP 的区别在于,视图是完全被动的,不知道模型层。在 MVC 中,它不是被动的并且知道模型层。在正确的 MVP 中,View 类(如果是)也不应该实现构造函数。

MVP 的典型示例将由以下部分组成:

  1. 数据访问层(DataMappers、ORM 等)
  2. 业务逻辑(如验证和计算)
  3. 被动视图类(可以是模板,但最好坚持使用类)
  4. 连接模型和视图的演示者

一个例子,说明如何使用 PHP 实现 Model-View-Presenter

注意:现实场景中的模型不是类,而是抽象层,其中包含很多类来处理应用程序逻辑。出于演示目的,我将其称为“模型”。

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 类自动加载器。

【讨论】:

    【解决方案2】:

    MVP 和 MVC 对于 GUI 应用程序都是 actually meant。大多数 PHP 框架更多地使用“MVC”作为buzzword。使用哑模型(只是数据库)、非活动视图(= 模板)和编排控制器的实际实现实际上已经与 MVP 匹配。无论如何,功能明智的控制器通常充当演示者,将数据从模型中铲到视图中。 (在正确的 MVC 中,模型和视图交互更多,视图实际上是活动组件)。

    但无论如何,有一些框架实际上知道更新的术语和模式。

    【讨论】:

    • lionframwork.org 和 Openlight 的第一个链接指向当前不存在的页面。
    • @JulianMoreno 感谢您的注意!更新了互联网档案版本的链接。
    【解决方案3】:

    检查这个库Mutant Vole PHP

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2011-06-23
        • 2013-09-05
        • 2019-12-10
        • 2016-03-16
        • 2011-07-22
        • 2015-08-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多