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的文件,然后输入下列代码: 复制代码
-
- class Jayjun extends CI_Controller {
-
- public function __construct()
- {
- parent::__construct();
- }
- }
- ?>
接着我们在控制器中写一个方法,就命名为index()吧。如下:
复制代码
-
- class Jayjun extends CI_Controller {
-
- public function __construct()
- {
- parent::__construct();
- }
-
- public function index()
- {
- echo "This is a test!";
- }
- }
- ?>
现在使用浏览器输入http://ci_demo/index.php/jayjun/index ,如果你做的没错,你应该看到页面输出This is a test!。
以上我们需要注意以下几点:
a、类名必须以大写字母开头。以下才是有效的:
复制代码
-
- class Jayjun extends CI_Controller {
- }
- ?>
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文件。代码如下:
复制代码
-
-
-
- 创建一个简单的视图
-
-
- 大家好,我是军哥!欢迎光临PHPer小站。
-
考大家一个问题:军哥的外号是什么?
-
答案:排骨哥。源自‘男追女煮红烧肉,女追男烧排骨’。哈哈~~
-
-
(2)、接着载入视图。
由于我们写的控制器继承了父控制器,所以我们可以在方法中调用下面的函数来装载一个视图。
$this->load->view("需要载入的视图文件名称");
此时注意一下的是如果你的视图文件扩展名是.php的,那加载视图的文件中不用专门写上扩展名。除非你用的是其它扩展名(如.html、.tpl等)。
例如,刚才我们写的hello.php文件,可以这样来加载:
$this->load->view("hello");
(3)、给视图添加动态数据。
这里讲的动态数据可以是变量、数组、多维数组或对象。好了,让我们一起在控制器中试试:
复制代码
-
- class Jayjun extends CI_Controller {
-
- function index()
- {
- //这里是使用变量的示例
- $data['title'] = "创建一个简单的视图";
-
- //这里是使用数组的示例
- $data['content'] = array(
- "name" => "军哥",
- "welcome" => "欢迎光临PHPer小站。",
- "question" => "军哥的外号是什么?",
- "answer" => "排骨哥。源自‘男追女煮红烧肉,女追男烧排骨’。哈哈~~",
- );
- //这里是使用对象的示例,这时类变量会转变为数组元素,由于下面的类是随便写的一个类,这里只是展示一下,为了避免报错,就给注释了
- //$data['other_content'] = new SomeClass();
- $this->load->view('hello', $data);
- }
- }
- ?>
现在打开你刚创建的hello.php,将其中的文本换成在控制器中写好的动态数据。如下所示:
复制代码
刚才军哥说过,动态数据不仅仅局限于简单变量、一维数组,也可以是多维数组。这是我们经常会遇到的情况,例如:你从数据库里面取出数据就是典型的多维数据。
我们将上例中添加了一些军哥的个人信息,如下:
复制代码
-
- class Jayjun extends CI_Controller {
-
- function index()
- {
- //这里是使用变量的示例
- $data['title'] = "创建一个简单的视图";
-
- //这里是使用数组的示例
- $data['content'] = array(
- "jayjun" => array(
- "军哥",
- "26岁",
- "安徽人",
- "至今在兄弟连单身",
- ),
- "welcome" => "欢迎光临PHPer小站。",
- "question" => "军哥的外号是什么?",
- "answer" => "排骨哥。源自‘男追女煮红烧肉,女追男烧排骨’。哈哈~~",
- );
- //这里是使用对象的示例,这时类变量会转变为数组元素,由于下面的类是随便写的一个类,这里只是展示一下,为了避免报错,就给注释了
- //$data['other_content'] = new SomeClass();
- $this->load->view('hello', $data);
- }
- }
- ?>
那我们的视图文件也需要改变一下:
复制代码
上张截图看下效果:
3、完成“Hello World!”。这个简单例子就不用军哥带大家写了吧,呵呵~~~
好,今天我们共同学习了CI框架中的控制器和视图,并带大家写了一些小例子。然而,我们还没有讲到模型。这将是我们下一讲的内容。