O PHP suporta o padrão MVP?

Existem muitos exemplos que explicam o padrão MVP usando ASP.NET mas não encontrei nada usando PHP.

Eu sou programador de PHP e quer saber onde posso obter exemplos de PHP padrão MVP?

Author: Ven, 2010-12-25

4 answers

A resposta curta é: Sim PHP faz .

(Nota, não é exatamente MVP como descrito em seu papel original, mas uma variação para web)

A diferença entre MVC e MVP é que, uma vista é totalmente passiva e inconsciente da camada modelo. Enquanto em MVC não é passivo e consciente da camada modelo. In proper MVP, View class (if it is) also SHOULD NOT implement a constructor.

Um exemplo típico de MVP will consistem nestas partes:

  1. Camada de acesso aos dados (DataMappers, ORM etc)
  2. lógica empresarial (como validação e cálculos)
  3. Classe de visão passiva (pode ser um modelo, mas seria melhor ficar com uma classe)
  4. o apresentador que liga Modelo e Vista

Um exemplo de como implementar Model-View-Presenter com PHP

Nota: um modelo no cenário do mundo real não é classe, mas camada de abstração, que contém um muitas aulas para lidar com a lógica de Aplicação. Eu chamaria de "modelo" para fins de demonstração.

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);
     }
}

Ficheiro: modelo.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>

E a utilização é:

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

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

echo $presenter->indexAction();

Note que, este é um exemplo muito simplificado. No cenário do mundo real, qualquer aplicação baseada em MVP deve {[7] } também implementar coisas como: Router, SPL class autoloader.

 10
Author: Yang, 2013-11-10 14:15:37

MVP e MVC ambos são realmente significados para aplicações GUI. A maioria dos frameworks PHP usam " MVC " mais como buzzword . A implementação real com modelos burros (apenas banco de dados), vistas não-ativas (= modelos) e controladores orquestrando já corresponde a MVP. E controladores de funcionalidade geralmente funcionam como apresentadores de qualquer forma, lançando dados de modelos para vistas. (In proper MVC the model and view interact more, with the view actually being the active componente).

[[1]} mas de qualquer forma, há alguns frameworks que estão realmente cientes da terminologia e padrão mais recentes.
 10
Author: mario, 2017-05-23 12:32:24

Verifique esta biblioteca

 0
Author: Poelinca Dorin, 2010-12-25 10:40:07
Na minha opinião, o enquadramento Lion (www.lionframework.org) é a implementação mais madura de MVP hoje em dia.
 0
Author: Antonio, 2010-12-26 16:04:37