1. 实现过程

  1) 上一节讲述了 View 视图的加载过程,它是在 Loader 类中加载的,并通过 Include 语句进行包含。那么为了在 View 中传递变量,只需要在 include 语句所在环境的变量列表中加入这些变量即可。

  2) 另外必须考虑到可以加载多个视图,所以还要保证在前面加载视图传入的变量,后面也可以访问。

  1. // 非常重要
  2. if (is_array($_ci_vars)) {
  3. $this->_ci_cached_vars = array_merge($this->_ci_cached_vars, $_ci_vars);
  4. }
  5. extract($this->_ci_cached_vars);

  注意必须定义成员变量 $_ci_cached_vars

2. 测试

修改 test_view.php ,在标题下输出 $info

  1. <html>
  2. <head>
  3. <title>My First View</title>
  4. </head>
  5. <body>
  6. <h1>Welcome, we finally met by MVC, my name is Zhangzhenyu!</h1>
  7. <p><?php echo $info ?></p>
  8. </body>
  9. </html>

那么相应在控制器函数中,也要改为

  1. class welcome extends CI_Controller {
  2.  
  3. function hello() {
  4. echo 'My first Php Framework!';
  5. }
  6.  
  7. function saysomething($str) {
  8. $this->load->model('test_model');
  9.  
  10. $info = $this->test_model->get_test_data();
  11.  
  12. $data['info'] = $info;
  13.  
  14. $this->load->view('test_view', $data);
  15. }
  16. }

3. 测试

访问 http://localhost/learn-ci/index.php/welcome/hello

可以看到输出如下

Welcome, we finally met by MVC, my name is Zhangzhenyu!

People you want in our model is Zhangzhenyu

一步一步重写 CodeIgniter 框架 (7) —— Controller执行时将 Model获得的数据传入View中,实现MVC的更多相关文章

  1. 一步一步重写 CodeIgniter 框架 (9) —— 使用 CodeIgniter 类库

    通过前面几节的内容,我们从零开始搭建了一个非常方便的MVC框架,理解了 CodeIgniter 框架最核心的部分.然而一个框架的便利不仅仅在于提供一个MVC就可以了,它还必须具有较高的扩展性.下面将从 ...

  2. 一步一步重写 CodeIgniter 框架 (6) —— 实现在控制器Controller中加载View

    1. 控制器将模型类获得的数据,传递给视图进行显示,所以视图必须负责接收数据,另外重要的一点是当模型和视图分开后,多个模型的数据可以传递给一个视图进行展示,也可以说一个模型的数据在多个不同的视图中进行 ...

  3. 一步一步重写 CodeIgniter 框架 (5) —— 实现Controller,并加载Model

    CodeIgniter 框架采用MVC模式,而MVC模式中起纽带作用的就是C(控制器),在控制器的中通过加载模型获得数据,将数据传到视图中进行展示.本课将实现在控制器中加载模型. 1. 控制器的实现 ...

  4. 一步一步重写 CodeIgniter 框架 (4) —— load_class 管理多个对象实例的思路

    我们使用CodeIgniter 框架最主要是想利用其 MVC 特性,将模型.视图分开,并通过控制器进行统一控制.在尝试实现 MVC 模式之前,我们将实现其中一个对程序结构非常有用的技巧,就是 load ...

  5. 一步一步重写 CodeIgniter 框架 (3) —— 用面向对象重构代码

    前面两篇文章为了重点突出 CodeIgniter 框架的原理,程序的结构很乱,有很多全局变量,在这一课中我们采用面向对象的方法对原先代码进行重构. 到目前为止,程序主要完成的就是 URL 分析,并根据 ...

  6. 一步一步重写 CodeIgniter 框架 (1) —— url 如何映射到具体的方法

    CodeIgniter 框架最显著的特征就是 MVC 模式,它的做法就是提取 url 中的'分段', 映射到某个类的某个方法,从而由该方法来输出最终显示的页面内容.那么我们第一课中就是实现一个这样的原 ...

  7. 一步一步重写 CodeIgniter 框架 (12) —— 代码再重构,回归 CI

    第一课中搭建的基本的 框架模型, 只有一个 index.php 作为执行文件,按这种方式最不稳定的因素就是路径的问题. 我们经常需要通过合适的参数,比如 load_class('output') 或 ...

  8. 一步一步重写 CodeIgniter 框架 -- 原因和思路

    CodeIgniter 是一个非常轻量级的 PHP 框架,说是轻量级,最新版的代码只有不到2M. 其最重要的特点就是 MVC 模式来编写代码,如果大家看过一些用 PHP 来编写网站的书籍或教程,无一例 ...

  9. 一步一步重写 CodeIgniter 框架 (11) —— 使用 CodeIgniter 函数库

    在完成了CI框架的类库扩展后,很自然我们就会想到函数库的扩展.函数库的扩展在 CI 中称为 helper 函数与类有不同的地方,它不能继承,只能覆盖或者添加新的函数,或者直接完全新定义的一组函数. 由 ...

随机推荐

  1. TreeView控件例子

    XmL文件代码: <?xml version="1.0" encoding="utf-8" ?> <Area> <Province ...

  2. 基于Visual C++2013拆解世界五百强面试题--题5-自己实现strstr

    请用C语言实现字符串的查找函数strstr, 找到则返回子字符串的地址,没有找到返回为空,请用数组操作与指针操作实现 看到题目想到最简单的方法就是母字符串和子字符串比较,如果不同,将指向母字符串的指针 ...

  3. 过河(bfs)

    Problem 2188 过河I Accept: 112    Submit: 277 Time Limit: 3000 mSec    Memory Limit : 32768 KB  Proble ...

  4. 将文件从数据库(MySQL)中进行读取

    package com.play; import java.io.FileOutputStream; import java.io.OutputStream; import java.sql.Blob ...

  5. LeetCode :Word Ladder II My Solution

    Word Ladder II Total Accepted: 11755 Total Submissions: 102776My Submissions Given two words (start  ...

  6. phpmyadmin出现空password登录被禁止

    在Windows或者Linux下mysql安装后默认的password为空,又当我们又安装了mysql的管理工具 phpmyadmin后登陆时出现"空password登陆呗禁止(參见同意pa ...

  7. c++ 输出虚函数表内容

    class Base{ public: virtual void f(){cout<<"Base::f"<<endl;} virtual void g(){ ...

  8. 工作流管理系统 jBPM

    工作流管理系统 jBPM 运行环境: 授权方式:BSD 软件大小:M 下载量:589 更新日期:2014-04-04 来源地址: 联系作者:Linux     jBpm是一个灵活可扩展的工作流管理系统 ...

  9. JavaScripts+jquery

    选择器 参数 element 一个用于搜索的元素.指向DOM节点的标签名. <div>div1</div> <div>div2</div> <sp ...

  10. Ants (POJ 1852)

    题目描述: Description An army of ants walk on a horizontal pole of length l cm, each with a constant spe ...