您的位置:首页 > 其它

[codeigniter 三]、例子——“Hello World!”

2015-07-16 23:40 267 查看
今天我们来学习CI框架中的控制器、方法和视图,然后我们一起完成一个大家都懂的例子——“Hello
World!”。

1、控制器、方法。

(1)、什么是控制器呢?

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

假设有这样一个URL:
http://IP:PORT/ci_demo/index.php/Welcome/
在上面的例子中,CodeIgniter 将尝试寻找并装载一个名为 Welcome.php的控制器。

(2)、创建一个简单的控制器、方法。

在application/controllers/ 目录下新建一个名为Welcome.php的文件,然后输入下列代码:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller
{
function __construct()
{
parent::__construct();
}
}
?>


接着我们在控制器中写一个方法,就命名为index()吧。如下:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller
{
function __construct()
{
parent::__construct();
}
public function index()
{
echo "This is a test!";
}
}
?>


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

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

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


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

3)、URL会在控制器中默认载入index()方法。

上例中,正好有index()方法,我们在浏览器输入http://IP:PORT/ci_demo/index.php/Welcome也是可以访问到。

4)、保留字。

为了便于编程,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文件。代码如下:

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>创建一个简单的视图</title>
</head>
<body>
<h1>大家好,我是Sulley007!</h1>
<p>考大家一个问题:我的QQ是什么?</p>
<p>答案:xxxxxx ^_^</p>
</body>


(2)、接着载入视图。

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

$this->load->view("需要载入的视图文件名称");

此时注意一下的是如果你的视图文件扩展名是.php的,那加载视图的文件中不用专门写上扩展名。除非你用的是其它扩展名(如.html、.tpl等)。

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

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

(3)、给视图添加动态数据。

这里讲的动态数据可以是变量、数组、多维数组或对象。好了,让我们一起在控制器中试试:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller
{
function __construct()
{
parent::__construct();
}
public function index()
{
//这里是使用变量的示例
$data['title'] = "创建一个简单的视图";

//这里是使用数组的示例
$data['content'] = array(
"name" => "Sulley007",
"question" => "我的QQ是多少?",
"answer" => "xxxxxx ^_^",
);
//这里是使用对象的示例,这时类变量会转变为数组元素,由于下面的类是随便写的一个类,这里只是展示一下,为了避免报错,就给注释了
//$data['other_content'] = new SomeClass();
$this->load->view('hello', $data);
}
}
?>


现在打开你刚创建的hello.php,将其中的文本换成在控制器中写好的动态数据。如下所示:

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title><?php echo $title; ?></title>
</head>
<body>
<h1>大家好,我是<?php echo $content['name']; ?>!</h1>
<p>考大家一个问题:<?php echo $content['question'] ?></p>
<p>答案:<?php echo $content['answer'] ?></p>
</body>
</html>


上张截图看下效果:



3、完成“Hello World!”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: