热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《军哥谈CI框架》之入门教程之第三讲:我们都懂的例子——“HelloWorld!”

Hello,Everyone!有些日子没见了,很庆幸玛雅人的世界末日预言不是真的,还可以让大家伙继续听军哥来唠叨下去,呵呵~~~
Hello,Everyone ! 有些日子没见了,很庆幸玛雅人的世界末日预言不是真的,还可以让大家伙继续听军哥来唠叨下去,呵呵~~~
今天我们来学习CI框架中的控制器、方法和视图,然后我们一起完成一个大家都懂的例子——“Hello World!”。


【本讲内容】
一、控制器、方法;
什么是控制器?如何来创建一个简单的控制器和方法以及书写一个控制器和方法时需要注意哪些要求?


二、视图;
如何创建和载入视图?如何给视图添加动态数据(包括变量、数组和多位数组)?


三、完成“Hello World!”例子。
根据上面的学习,现学现用,用控制器和视图完成一个简单的例子。


【具体内容】
1、控制器、方法。

(1)、什么是控制器呢?
我们都知道,控制器指的是模型(model)-视图(view)-控制器(controller),即M-V-C模式中的C层,主要负责接受用户的输入并调用模型和视图去完成用户的需求,本身不输出任何东西和做任何处理的。其实讲白一点,控制器就是一个类文件,不过这时其文件命名跟你的URL关联在一起了。这一点应该很好理解的,只要你还记得上一讲中我们对CI如何处理URL进行的一个分析。


假设有这样一个URL:


ci_demo/index.php/jayjun/


在上面的例子中,CodeIgniter 将尝试寻找并装载一个名为 jayjun.php的控制器。



(2)、创建一个简单的控制器、方法。
在application/controllers/ 目录下新建一个名为jayjun.php的文件,然后输入下列代码:
  1. class Jayjun extends CI_Controller {
  2.           
  3.     public function __construct()
  4.     {
  5.          parent::__construct();
  6.     }
  7. }
  8. ?>
接着我们在控制器中写一个方法,就命名为index()吧。如下:
  1. class Jayjun extends CI_Controller {
  2.           
  3.      public function __construct()
  4.      {
  5.          parent::__construct();
  6.      }
  7.             
  8.      public function index()
  9.      {
  10.          echo "This is a test!";
  11.      }
  12. }
  13. ?>


现在使用浏览器输入http://ci_demo/index.php/jayjun/index ,如果你做的没错,你应该看到页面输出This is a test!。


以上我们需要注意以下几点:

a、类名必须以大写字母开头。以下才是有效的:
  1.      class Jayjun extends CI_Controller {
  2. }
  3. ?>

b、确保你的控制器扩展自父控制器类(名为CI_Controller),以便它能够继承其所有的方法。


c、URL会在控制器中默认载入index()方法。
上例中,正好有index()方法,我们在浏览器输入http://ci_demo/index.php/jayjun也是可以访问到。


d、保留字。
为了便于编程,CodeIgniter使用了一系列的函数和名称来完成操作。所以,有些名称不能被程序员使用。下面是不能被程序员使用的保留字列表。
因为你的控制器类将继承主程序控制器,所以你的函数命名一定不能和主程序控制器类中的函数名相同,否则你的局部函数将会覆盖他们。下面列出了已经保留的名称,请不要将你的控制器命名为这些:
Controller
CI_Base
_ci_initialize
Default
index
另外,也请不要将你的方法命名为这些:


is_really_writable()
load_class()
get_config()
config_item()
show_error()
show_404()
log_message()
_exception_handler()
get_instance()

当然还有一些常量和变量也是不能重名的,想了解更多的话,你可以查一下官网上关于保留字的介绍。


刚才我们介绍了M-V-C中的控制器C层,接下来介绍视图(views)V层。



2、视图。
在M-V-C模式中,视图是是用户看到并与之交互的界面。讲通俗一点,一个视图就是一个网页,或者是网页的部分,如头部,底部,侧边栏等等。
(1)、首先创建视图。
在application/views/ 目录新建一个名为hello.php文件。代码如下:
  1.   
  2.       
  3.       
  4.   
  5.   
  6.         大家好,我是军哥!欢迎光临PHPer小站。
  7.         

    考大家一个问题:军哥的外号是什么?

  8.         

    答案:排骨哥。源自‘男追女煮红烧肉,女追男烧排骨’。哈哈~~

  9.   

(2)、接着载入视图。
由于我们写的控制器继承了父控制器,所以我们可以在方法中调用下面的函数来装载一个视图。


$this->load->view("需要载入的视图文件名称");
此时注意一下的是如果你的视图文件扩展名是.php的,那加载视图的文件中不用专门写上扩展名。除非你用的是其它扩展名(如.html、.tpl等)。


例如,刚才我们写的hello.php文件,可以这样来加载:

$this->load->view("hello");


(3)、给视图添加动态数据。
这里讲的动态数据可以是变量、数组、多维数组或对象。好了,让我们一起在控制器中试试:
  1. class Jayjun extends CI_Controller {
  2.     
  3. function index()
  4. {
  5.     //这里是使用变量的示例
  6.     $data['title'] = "创建一个简单的视图";
  7.   
  8.     //这里是使用数组的示例
  9.     $data['content'] = array(
  10.                           "name" => "军哥",
  11.                           "welcome" => "欢迎光临PHPer小站。",
  12.                           "question" => "军哥的外号是什么?",
  13.                           "answer" => "排骨哥。源自‘男追女煮红烧肉,女追男烧排骨’。哈哈~~",
  14.                     );
  15.     //这里是使用对象的示例,这时类变量会转变为数组元素,由于下面的类是随便写的一个类,这里只是展示一下,为了避免报错,就给注释了
  16.     //$data['other_content'] = new SomeClass();
  17.     $this->load->view('hello', $data);
  18. }
  19. }
  20. ?>
现在打开你刚创建的hello.php,将其中的文本换成在控制器中写好的动态数据。如下所示:
  1.   
  2.       
  3.       
  4.   
  5.   
  6.         大家好,我是
  7.         

    考大家一个问题:

  8.         

    答案:

  9.   


刚才军哥说过,动态数据不仅仅局限于简单变量、一维数组,也可以是多维数组。这是我们经常会遇到的情况,例如:你从数据库里面取出数据就是典型的多维数据。


我们将上例中添加了一些军哥的个人信息,如下:
  1. class Jayjun extends CI_Controller {
  2.       
  3. function index()
  4. {
  5.     //这里是使用变量的示例
  6.     $data['title'] = "创建一个简单的视图";
  7.     
  8.     //这里是使用数组的示例
  9.     $data['content'] = array(
  10.                           "jayjun" => array(
  11.                                         "军哥",
  12.                                         "26岁",
  13.                                         "安徽人",
  14.                                         "至今在兄弟连单身",
  15.                                     ),
  16.                           "welcome" => "欢迎光临PHPer小站。",
  17.                           "question" => "军哥的外号是什么?",
  18.                           "answer" => "排骨哥。源自‘男追女煮红烧肉,女追男烧排骨’。哈哈~~",
  19.                     );
  20.     //这里是使用对象的示例,这时类变量会转变为数组元素,由于下面的类是随便写的一个类,这里只是展示一下,为了避免报错,就给注释了
  21.     //$data['other_content'] = new SomeClass();
  22.     $this->load->view('hello', $data);
  23. }
  24. }
  25. ?>

那我们的视图文件也需要改变一下:
  1.   
  2.       
  3.     
  4.   
  5.         
  6.             大家好,我是            
  7.   
  8. ,             
  9.             
  10.         
  11.         
  12. 考大家一个问题:

            
  13. 答案:



上张截图看下效果:


3、完成“Hello World!”。
这个简单例子就不用军哥带大家写了吧,呵呵~~~


好,今天我们共同学习了CI框架中的控制器和视图,并带大家写了一些小例子。然而,我们还没有讲到模型。这将是我们下一讲的内容。





推荐阅读
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文介绍了一种处理AJAX操作授权过期的全局方式,以解决Asp.net MVC中Session过期异常的问题。同时还介绍了基于WebImage的图片上传工具类。详细内容请参考链接:https://www.cnblogs.com/starluck/p/8284949.html ... [详细]
  • 本文介绍了自动化测试专家Elfriede Dustin在2008年的文章中讨论了自动化测试项目失败的原因。同时,引用了IDT在2007年进行的一次软件自动化测试的研究调查结果,调查显示很多公司认为自动化测试很有用,但很少有公司成功实施。调查结果表明,缺乏资源是导致自动化测试失败的主要原因,其中37%的人认为缺乏时间。 ... [详细]
author-avatar
冲动王子2502901503
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有