PHP 支持 MVP 模式吗?

2023-12-10

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

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


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

(Note, its not exactly MVP as described in its original paper, but a variation for web)

MVC 和 MVP 之间的区别在于,视图是完全被动的并且不知道模型层。而在MVC它不是被动的并且了解模型层。在适当的MVP, View类(如果是的话)也不应该实现一个构造函数。

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

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

如何使用 PHP 实现模型-视图-呈现器的示例

Note: A model in real-world scenario is not class, but abstraction layer, that contain a lot of classes to deal with application logic. I'd call it "Model" for demonstration purposes.

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

文件:模板.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 的应用程序SHOULD还实现诸如:路由器、SPL 类自动加载器等功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 支持 MVP 模式吗? 的相关文章

  • 生成大随机数 php [重复]

    这个问题在这里已经有答案了 我想使用 PHP 生成一个包含 75 个字符的数字 我到处寻找 但一无所获 除了这个 http dailycoding com tools RandomNumber aspx http dailycoding c
  • Woocommerce 让产品显示在存档页面中

    我正在尝试让所有产品显示在我商店的存档页面中 我想知道他们的id我正在使用我的一个钩子 它在 wp head 上运行并检查 if is product category 我想以某种方式访问 产品的查询并获取它们的 ID if is prod
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • PHP严格标准:声明应该兼容

    我有以下类层次结构 class O Base class O extends O Base abstract class A Abstract public function save O Base obj class A extends
  • 如何在 MVC3 Razor 视图中呈现数据表

    我在 xls 电子表格 1 之间有一个可靠且经过测试的导入方法 该方法返回DataTable 我已将其定位在我的服务层中 而不是数据中 因为只有工作簿作为上传文件保存 但现在我想知道在哪里以及如何生成此内容的 HTML 表示形式DataTa
  • 蛋糕控制台 2.2.1:烘焙错误

    运行 MAMP 的 OSX 机器 CakePHP 2 2 1 已正确安装和配置 这意味着当我浏览到 Index php 文件时 所有绿色条都显示出来 我已经完成了博客教程 并且正在开发我的第二个应用程序 其中脚手架已启动并运行 现在我第一次
  • 是否可以使用 PHP 重定向发送 POST 数据?

    更新 这不是重复的如何使用 PHP 发送 POST 请求 https stackoverflow com questions 5647461 how do i send a post request with php 那里的解决方案对我不起
  • 如何在原则 2 迁移中删除外键

    我想在原则 2 迁移中删除外键 但没有 dropForeignKeyConstraint 有谁知道怎么丢掉吗 public function down Schema schema table schema gt getTable table
  • 如何从asp net core中的AuthorizationFilter重定向到登录页面?

    当我回来时ForbidResult 它重定向到AccessDenied启动时指定的页面 我想做同样的事情UnauthorizedResult 但重定向到Login page P S 我没有使用标准Authorize控制器中的属性我有自己的
  • 交换关联数组中的两个项目

    Example arr array apple gt sweet grapefruit gt bitter pear gt tasty banana gt yellow 我想调换一下柚子和梨的位置 这样数组就变成了 arr array ap
  • VSTS/TFS设置环境变量ASP.NET core

    我正在尝试使用 VSTS 将 ASP NET Core 应用程序部署到 IIS 并执行以下任务 然而 经过多次谷歌搜索和浏览 MS 文档后 我找不到为部署设置环境变量的方法 我在环境范围的发布定义中设置的变量未设置为环境变量 知道如何实现这
  • 同时从2个表中删除?

    我正在使用 asp net 和 sql 服务器 我有 2 个表 类别和产品 在产品表中 我的categoryId 为FK 我想要做的是 当我从类别表中删除类别时 我希望该类别中的所有产品都将在产品表中删除 如何才能做到这一点 我更喜欢使用存
  • 通过 $_SESSION 从一个脚本发送到另一个脚本期间数据丢失

    我正在尝试将一个充满属性的对象从一个 PHP 发送到另一个 PHP SESSION object obj where obj是一个用 foreach 循环指定的对象 foreach array of objects as obj SESSI
  • PHP 中只保留数组的前 N ​​个元素? [复制]

    这个问题在这里已经有答案了 有没有办法只保留数组的前 N 个 例如 10 个 元素 我知道有array pop 但是有没有更好 更优雅的方法呢 您可以使用array slice http php net array slice or arr
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • 表单计算器脚本基本价格未加载 OnLoad

    我的表单中有一个计算器来计算我的下拉选项选择 function select calculate on change calc input type checkbox calculate on click calc function cal
  • PHP HEREDoc (EOF) 语法在 Sublime Text 3 上突出显示与正斜杠的差异

    我不熟悉 Sublime Text 3 如何使用语法突出显示 例如 如果它纯粹依赖于主题 或者它内置于主题运行的标准中 但就我而言 使用 PHP 的 HERE 文档和转发存在一些语法突出显示差异斜线 一旦出现正斜杠 ST3 就会认为以下所有
  • 如何使用 PHPExcel 库从 Excel 获取日期

    我正在尝试使用 PHPExcel 从 Excel 获取日期 但我没有得到日期 我得到的字符串值不是 1970 以来的秒数 我尝试过的代码是 InvDate trim excel gt getActiveSheet gt getCell B
  • post php mysql 的拆分关键字

    我有一个表存储帖子 ID 它的标签如下 Post id Tags 1 keyword1 keyword2 keyword3 我想循环遍历该表中的每一行并执行以下操作 将关键字1 关键字2 关键字3放入新表中 word id word val
  • 对具有混合类型值的数组进行数字排序

    我有一个像这样的混合数组 fruits array lemon Lemon 20 banana apple 121 40 50 然后申请sort 其功能如下 sort fruits SORT NUMERIC foreach fruits a

随机推荐

  • XCode:为什么我的活动没有添加到日历中?

    我已将以下代码添加到我的应用程序中 NSDate selected DatePicker date NSString date selected description NSDateComponents components NSCalen
  • Flash 使视图变为全屏

    我需要一个链接来调用 Flash 影片 使用 JavaScript 该影片将视图全屏显示并显示页面内容 就像用户按下了 F11 一样 有这样的flash电影吗 Edit这与 YouTube 和其他视频网站上的 Flash 播放器的不同之处在
  • 安装和导入后,colaboratory 将不会承认 arviz

    在Google的合作实验室中 安装了arviz然后导入arviz没有错误 但在代码单元中 pm plot posterior samples 得到错误 arviz未安装 尝试绘制贝叶斯代码 pm plot posterior samples
  • “模块是用不兼容的 Kotlin 版本编译的。其元数据的二进制版本是 1.5.1,预期版本是 1.1.16”

    当我尝试构建应用程序时出现以下错误 C Users Lenovo gradle caches transforms 2 files 2 1 32f0bb3e96b47cf79ece6482359b6ad2 jetified kotlin s
  • python networkx - 通过着色来标记边缘以进行图形绘制

    我正在使用 networkx 来研究图论实现 我想知道是否有一种方法可以标记给定图中的某些边 例如 假设我有一个图 G 并且我找到了从节点 x 到节点 y 的最短路径 我如何标记该路径 以便在绘制图时它将以不同的颜色绘制 标记边缘可以通过设
  • 关闭 BufferedReader 和 System.in

    Reader rdr new InputStreamReader System in BufferedReader br new BufferedReader rdr String s s br readLine br close Scan
  • 选择可变参数模板最后一个参数的有效方法

    我知道如何选择可变参数模板的第一个参数 template lt class Args gt struct select first template lt class A class Args gt struct select first
  • Python 中奇怪的前导字符 utf-8/utf-16 编码

    我写了一个简化版本来演示这个问题 我正在以 utf 8 和 UTF 16 格式对特殊字符进行编码 使用 utf 8 编码没有问题 当我使用 UTF 16 编码时 我得到一些奇怪的前导字符 我尝试删除所有尾随和前导字符 但错误仍然存 在 代码
  • jquery 每个循环内的 Ajax 调用

    这是一个我必须通过 ajax 调用写入 xml 文件的函数 第一次进行 ajax 调用时 代码可以正常工作 在第二个each 循环中 根本不进行ajax 调用 我不知道为什么 我将 asyn 指定为 false 但这没有帮助 无论如何 这似
  • Q-Learning 值太高

    我最近尝试在 Golang 中实现基本的 Q Learning 算法 请注意 我对强化学习和人工智能总体来说是新手 所以这个错误很可能是我的 以下是我如何在 m n k 游戏环境中实施解决方案 在每个给定的时间t 代理持有最后的状态动作 s
  • MVC 3 - 模型绑定表中的列表,每个记录是一列而不是行

    我可以找到有关如何在 MVC 3 中模型绑定项目列表的各种文章 甚至可以在表中进行模型绑定 但在每个示例中 行代表列表中的一条记录 我的观点的要求是每条记录必须是一列 我无法从以下文章中获得任何技巧 http blog stevensand
  • 根据列表中的条件合并列表项

    我有一个项目清单 例如 a IP 123 84 apple mercury IP 543 65 killer parser goat IP 549 54 pineapple django python 我想根据条件合并列表项 即合并所有项目
  • iOS:如何关闭弹出窗口[重复]

    这个问题在这里已经有答案了 可能的重复 如何关闭故事板弹出窗口 我有一个 iPad 故事板 将一个视图中的栏按钮项按住 Control 键拖动到另一个视图 并选择弹出框样式 当我按下按钮时 新的弹出窗口视图将显示在弹出窗口中 但我有两个问题
  • 使用 Java 中的 ImageIO 编写 TIFF 的平铺输出

    我拥有的是大量的帧 需要将它们放在一起形成更大的图像 如马赛克 所需的图像位置是已知的 图像数量非常多 因此将它们全部加载到内存中是不切实际的 根据这里的一些其他答案 我能够覆盖 RenderedImage 中的方法 特别是getData
  • 厨师食谱中使用了哪些 ruby​​ 功能?

    我刚开始使用 Chef 对 ruby 不太了解 我无法理解食谱中使用的语言语法 比如说 我在食谱中的recipes default rb 中创建一个目录 如下所示 directory home test mydir do owner tes
  • 确定 C++ 应用程序是否作为 UWP 应用程序运行并具有旧版支持

    我的第一个想法是使用GetPackageFamilyName 并寻找ERROR SUCCESS vs APPMODEL ERROR NO PACKAGE 但是 我需要支持 Windows 7 这使得GetPackageFamilyName
  • jQuery validate - 如何防止自动提交?

    我热衷于使用 jQuery 验证器插件来验证我的代码 但我想禁用自动提交表单 我宁愿自己使用 jQuery 发送它 post method 事实上 考虑到我的按钮不是类型 我不太确定为什么要提交表单submit但只是
  • java进程间通信

    是否可以使用在命令行中运行java类来运行正在运行的swing中的某个类或函数 例如 当java Test asd将setText一个正在运行的swing Jlabel设置为asd 这两个程序在不同的进程中运行 您需要在进程之间创建一个接口
  • 在正则表达式中获取非法字符范围:java

    我有一个简单的正则表达式模式来验证名称 但是当我运行它时 我收到非法字符范围错误 我认为通过转义 s 它将允许一个空格 但编译器仍然抱怨 public boolean verifyName String name String namePa
  • PHP 支持 MVP 模式吗?

    有很多使用 ASP NET 解释 MVP 模式的示例 但没有找到任何使用 PHP 的示例 我是 PHP 程序员 想知道在哪里可以获得 MVP 模式 PHP 示例 简短的回答是 是的 PHP 可以 Note its not exactly M