不同的MVC框架的通信方式不一样吗?

发布于 2022-09-01 18:50:09 字数 602 浏览 13 评论 0

这是我在阮一峰大大的博客上看到的一张图

原文地址:http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm

clipboard.png

因为公司平时用的是YII框架,所以和我理解的MVC突然就有了区别,下图是我理解的MVC

clipboard.png

图来源于书: web-application-development-with-yii-and-php

请问MVC模式的重点只是MVC三层吗?其中不同通信方式就和自身框架有关了?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

海夕 2022-09-08 18:50:09

前端控制器(路由)并不是MVC必需的设计模式.
MVC的核心思想是分离界面(View),逻辑(Controller),数据(Model).
比如浏览器访问页面控制器,控制器处理输入,调用模型获取数据,载入视图输出数据.

/post.php?id=1024 //页面控制器(输入ID,输出文章)
<?php
if(!defined('APP_ROOT')) define('APP_ROOT', './'); //定义入口
require APP_ROOT.'include/common.php'; //加载模型(比如functions.php)
$data = get_post(intval($_GET['id'])); //处理输入,调用模型获取数据
$view = render('post.php', $data);     //载入视图输出数据
echo $view;
//在控制器中获取视图需要的所有数据,并封装到$data数组中,传入模板.
//如果你想在视图里直接调用模型数据,可以把render函数改为require.
//这样视图跟控制器都在全局作用域,灵活性更强,但也要注意尽量不要在视图里写具体逻辑.
//视图应该专注于调用并输出数据.

/include/functions.php里的render()函数:

function render($template, array $data = array()) {
    global $app;
    ob_start();
    require APP_ROOT.'themes/'.$app['theme'].'/'.$template;
    $view = ob_get_contents();
    ob_end_clean();
    return $view;
}
调妓 2022-09-08 18:50:09

mvc只是一种思想 不同的语言和框架都有各自的实现和改进 就像阮老师写的 他们只是在m v c三个层的侧重点不同

ゝ偶尔ゞ 2022-09-08 18:50:09

阮一峰的也不对,或者他有他的理解。 mvc并不是单向的。 m v c 之间的线估计会很多。 and mvc 就是mvc 。其他的db request router就不要扯进来了。
建议一开始不要扯什么mvc概念,找个框架用着用着,你自然就明白了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文