首頁  >  問答  >  主體

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

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

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

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

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

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

巴扎黑巴扎黑2719 天前495

全部回覆(3)我來回復

  • 巴扎黑

    巴扎黑2017-04-10 16:10: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;
    }

    回覆
    0
  • 迷茫

    迷茫2017-04-10 16:10:09

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

    回覆
    0
  • 迷茫

    迷茫2017-04-10 16:10:09

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

    回覆
    0
  • 取消回覆