摘要: 第一课中搭建的基本的 框架模型, 只有一个 index.php 作为执行文件,按这种方式最不稳定的因素就是路径的问题。我们经常需要通过合适的参数,比如 load_class('output') 或 $this->load->libraray('email') 等函数就可以加载到相应的类,所以本课将回归到 CI 整个目录体系结构,以 system 和 application ,重新对代码进行组织。1. 对 index.php 进行重新组织,定义基本的常量,并分离出核心的 CodeIgniter 类_ci_ob_level = ob_get_level( 阅读全文
posted @ 2013-08-28 10:27 风影无忌 阅读(5521) 评论(1) 推荐(0) 编辑
摘要: 在完成了CI框架的类库扩展后,很自然我们就会想到函数库的扩展。函数库的扩展在 CI 中称为 helper函数与类有不同的地方,它不能继承,只能覆盖或者添加新的函数,或者直接完全新定义的一组函数。由于扩展的方式与之前非常类似,下面直接用代码进行介绍/** * Loader Helper * * This function loads the specified helper file. * * @param mixed * @return void */ public function helper($helpers = array... 阅读全文
posted @ 2013-08-27 23:28 风影无忌 阅读(1819) 评论(0) 推荐(0) 编辑
摘要: 上一节简单实现了 CI 的类库扩展模型,所以 _ci_load_class 和 _ci_init_class 写的不是很完备。根据上节课的分析,当 system/libraries 目录下存在 Email.php, 然后在 application/libraies 目录下存在 My_Email.php 时就可以实现扩展类库的功能。除了扩展之外,我们还需要:1)直接覆盖原始类2)完全自定义类很简单,按照约定,当不存在MY_开头的类库文件,加载类库的情况必定属于以上两种,如下所示// 直接加载代码 $is_duplicate = FALSE; forea... 阅读全文
posted @ 2013-08-27 00:23 风影无忌 阅读(1762) 评论(0) 推荐(0) 编辑
摘要: 通过前面几节的内容,我们从零开始搭建了一个非常方便的MVC框架,理解了 CodeIgniter 框架最核心的部分。然而一个框架的便利不仅仅在于提供一个MVC就可以了,它还必须具有较高的扩展性。下面将从 CodeIgniter 的官方文档中的顺序一步一步充实我们这个“丑陋” 的框架。本课将实现 CodeIgniter 类库加载的模式,对应于http://codeigniter.org.cn/user_guide/general/libraries.html1. library 函数首先类库加载设计在 Loader 类中,函数命名为 library,如下所示public function libr 阅读全文
posted @ 2013-08-26 17:51 风影无忌 阅读(3446) 评论(1) 推荐(0) 编辑
摘要: 一般Javascript书在讲解对象时,都指出Javascript中的对象可以作为哈希表,存储键值数据。通常情况下,键为字符串,如果键是数字的话,实际上在内部也会转换为字符串。比如var o = { name: 'zzy', 5: 'honghu'};那么可以测试 o[5] 或 o['5'] 的值都是 'honghu'那么是不是意味着 对象的键只能为字符串呢?由此我们定义一个函数function f() { return 'function';}然后定义 o[f] = 40;通过 alert 输出 f 和 o[f] 阅读全文
posted @ 2013-08-23 13:55 风影无忌 阅读(596) 评论(0) 推荐(0) 编辑
摘要: 1. 问题如果大家看过北风网CJ讲师的Javascript视频教程,就可以看到其封装了一个很强的事件添加和删除函数,如下所示 1 function addEvent(obj, evtype, fn) { 2 //符合W3C的事件模型 3 if (obj.addEventListener) { 4 obj.addEventListener(evtype,fn,false); 5 return obj; 6 } 7 8 //IE或Opera浏览器 9 if (!obj.functions) obj.func... 阅读全文
posted @ 2013-08-23 08:12 风影无忌 阅读(2410) 评论(0) 推荐(0) 编辑
摘要: 视图函数在控制器中通过 $this->load-view() 来调用,从而输出 html,有时候为了调试或附加处理的需要,我们需要打印出这些输出,而不是直接通过浏览器输出,这在 php 中是通过缓冲区来实现的,详细的函数参考http://www.php.net/manual/zh/ref.outcontrol.php所以我们在 _ci_load 函数中可以看到ob_start(); include($_ci_path); // 如果需要返回数据,则从缓冲区中返回数据 if ($_ci_return === TRUE) { $buf... 阅读全文
posted @ 2013-08-21 10:29 风影无忌 阅读(2995) 评论(0) 推荐(0) 编辑
摘要: 1. 实现过程 1) 上一节讲述了 View 视图的加载过程,它是在 Loader 类中加载的,并通过 Include 语句进行包含。那么为了在 View 中传递变量,只需要在 include 语句所在环境的变量列表中加入这些变量即可。 2) 另外必须考虑到可以加载多个视图,所以还要保证在前面加载视图传入的变量,后面也可以访问。// 非常重要 if (is_array($_ci_vars)) { $this->_ci_cached_vars = array_merge($this->_ci_cached_vars, $_ci_vars); ... 阅读全文
posted @ 2013-08-16 15:14 风影无忌 阅读(1429) 评论(0) 推荐(0) 编辑
摘要: 1. 控制器将模型类获得的数据,传递给视图进行显示,所以视图必须负责接收数据,另外重要的一点是当模型和视图分开后,多个模型的数据可以传递给一个视图进行展示,也可以说一个模型的数据在多个不同的视图中进行展示。所以CodeIgniter 框架视图的接口有两个重要参数,public function view($view, $vars = array(), $return = FALSE)$view 即使加载哪一个视图,$vars 即是传入的数据, $return 即表示是直接输出还是返回(返回可以用于调试输出)2. 为了达到很好的讲述效果,我们直接参看 CodeIgniter类中的 代码funct 阅读全文
posted @ 2013-08-14 08:39 风影无忌 阅读(5223) 评论(0) 推荐(0) 编辑
摘要: CodeIgniter 框架采用MVC模式,而MVC模式中起纽带作用的就是C(控制器),在控制器的中通过加载模型获得数据,将数据传到视图中进行展示。本课将实现在控制器中加载模型。1. 控制器的实现CodeIgniter 中控制器的作用很强大,通过继承CI_Controller 类就可以 $this->input 获得Input类的实例,其模型的调用方法是 $this->load->model('model'), 之后就可以通过 $this->model_name->调用相应模型的方法获取数据了。那么如何实现的呢?请看 CodeIgniter 中 C 阅读全文
posted @ 2013-08-12 22:48 风影无忌 阅读(11747) 评论(0) 推荐(1) 编辑