不同的MVC框架的通信方式不一样吗?
这是我在阮一峰大大的博客上看到的一张图
原文地址: http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm
因为公司平时用的是YII框架,所以和我理解的MVC突然就有了区别,下图是我理解的MVC
图来源于书: web-application-development-with-yii-and-php
请问MVC模式的重点只是MVC三层吗?其中不同通信方式就和自身框架有关了?
九尾小狐狸
9 years, 3 months ago
Answers
前端控制器(路由)并不是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;
}
NoelLoo
answered 9 years, 3 months ago