Существует множество примеров, объясняющих шаблон MVP с использованием ASP.NET, но ничего не найденного с помощью PHP.
Я программист PHP и хочу знать, где я могу получить примеры PHP-шаблонов MVP?
Короткий ответ: Да, PHP делает .
(Обратите внимание, что это не точно MVP, как описано в его оригинальной статье, но вариант для сети)
Разница между MVC и MVP заключается в том, что представление полностью пассивное и не знает о слое модели. В то время как в MVC он не пассивен и не знает модельного слоя. В правильном MVP класс View
(если он есть) также НЕ ДОЛЖЕН реализовывать конструктор.
Примечание. Модель в реальном сценарии не является классом, а абстракционным слоем, который содержит много классов для работы с логикой приложения. Я бы назвал его «Модель» для демонстрационных целей.
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 СЛЕДУЕТ также реализовывать такие вещи, как: Router, SPL class autoloader.
MVP и MVC оба предназначены для графических приложений. Большинство фреймворков PHP используют «MVC» больше как модное слово . Фактическая реализация с немыми моделями (просто база данных), неактивные представления (= шаблоны) и оркестровые контроллеры фактически соответствуют MVP. И функциональные контроллеры часто работают как ведущие в любом случае, перетаскивая данные из моделей в представления. (В правильном MVC модель и представление взаимодействуют больше, причем представление фактически является активным компонентом).
Но в любом случае есть несколько рамок, которые действительно знают о новой терминологии и шаблоне.
Проверьте эту библиотеку Mutant Vole PHP
На мой взгляд, Lion Framework (www.lionframework.org) является самой зрелой реализацией MVP в наши дни.