PHP支持MVP模式吗?

时间:2010-12-25 10:32:34

标签: php asp.net mvp design-patterns

有许多使用ASP.NET解释MVP模式的例子,但没有使用PHP找到任何东西。

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

4 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:10)

简短的回答是:是PHP确实

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

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

MVP的典型示例包括以下部分:

  1. 数据访问层(DataMappers,ORM等)
  2. 业务逻辑(如验证和计算)
  3. 被动视图类(可能是模板,但最好坚持使用类)
  4. 连接模型和视图的演示者
  5. 如何使用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 :(得分:0)

检查此库Mutant Vole PHP

答案 3 :(得分:0)

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