第二课 初始MVC
$route['default_controller'] = "welcome";
$route['default_controller'] = "calculate";
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/*
* 计算控制器,类名首字母必须大写,所有的控制器必须继承自CI_Controller类
*/
class Calculate extends CI_Controller {
// 构造方法
function __construct() {
parent::__construct();
}// 默认方法
function index() {
// 加载calculate_view视图
$this->load->view('calculate_view');
}
}/* End of file calculate.php */
/* Location: ./application/controllers/calculate.php */
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>网页计算器</title>
<style type="text/css">
#calculators {
margin: 10% auto;
width:430px;
border:1px solid #000;
}
</style>
</head><body>
<div id="calculators">
<form action="/CI_02/index.php/calculate/count" method="post">
<input type="text" name="num1" id="num1" />
<select name="operate" id="operate">
<option value="+">+</option>
<option value="-">-</option>
<option value="x">x</option>
<option value="÷">÷</option>
</select>
<input type="text" name="num2" id="num2" />
<input type="submit" value="计算" />
</form>
</div>
</body>
</html>
在上面的表单中,我们的提交路径指向的其实是calculate类中的一个方法,这个方法的名字就是count,关于CI框架路径的规则,我将在下一讲中详细介绍。接下来,我们来书写controller中对应的代码,在calculate控制器中加入如下的函数:
function count() {
// 使用输入类接收参数
num1 =this->input->post('num1');
op =this->input->post('operate');
num2 =this->input->post('num2');
if (is_numeric(num1) && is_numeric(num2)) {
// 如果两个数输入均为数字,则调用calculate_model模型下的count方法
result =this->calculate_model->count(num1,num2, $op);
}
}
我们看到在控制器的代码中,调用了calculate_model模型下面的count方法,但是在调用模型之前,控制器必须先要加载函数,所以,需要在控制器的构造函数中,加入如下代码:
$this->load->model(‘calculate_model’);
接下来,我们就按照控制器里面的调用,创建我们的calculate_model模型和count方法,所有的模型都是放在models文件夹下的,所以,我们需要在models文件夹下创建一个名为calculate_model.php的文件,创建好后,我们来书写model端的代码:
<?php
/**
* 计算模型,类名首字母必须大写,所有的模型必须继承自CI_Model类
*/
class Calculate_model extends CI_Model {
function __construct() {
parent::__construct();
}
/*
* 计算函数
*/
function count(num1,num2, op) {
if (op == "+") {
return num1 +num2;
}else if (op == "-") {
returnnum1 - num2;
}else if (op == "x") {
return num1 *num2;
}else if (op == "÷" &&num2 != 0) {
return num1 / 1.0 /num2;
}else {
return FALSE;
}
}
}
/* End of file calculate_model.php */
/* Location: ./application/models/calculate_model.php */
现在,已经进行到了模型将计算结果返回给了控制器,还剩最后一步,就构成了一个标准的、完整的MVC框架执行过程,那就是控制器再次加载视图来显示计算结果。我们需要在views文件夹下创建一个视图(PHP文件),取名为result_view.php,代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>网页计算器</title>
<style type="text/css">
#calculators {
margin: 10% auto;
width:430px;
border:1px solid #000;
}
</style>
</head>
<body>
<div id="calculators">
<?php
// 从控制器接收数据并对数据进行操作
if (is_numeric(num1) && is_numeric(num2) && op &&result && result != FALSE) {
echonum1." ".op." ".num2." = ".$result."<br />";
}else {
echo "计算错误<br />";
}
?>
<a href="/CI_02">返回首页</a>
</div>
</body>
</html>
大家可以注意到,在这个视图中,出现了PHP代码,而且出现了一些变量,这些变量是哪来的呢?这就是今天要讲到的另一个重点,给视图添加动态数据。在视图的使用中,可以通过控制器给视图添加动态数据,这些数据在控制器里都是以数组键值对的形式定义的,在控制器加载视图的同时,数据数组做为参数传递给视图;在视图中,我们只需要知道数据在数组中的键名就可以取到想要的数据。比如,在控制器里定义的数据数组是:
$data = array('num1' => 1, 'num2' => 2, 'op' => +, 'result' => 3);
那么在视图中,只需要知道键名,就可以取得相对应的数据,比如:
echo num1." ".op." ".num2." = ".result."<br />";
写好了用于显示计算结果的视图,也学会了怎样给视图添加动态数据,现在只需要稍微修改一下前面写好的控制器的count函数,计算结果就可以显示在result_view视图上了,对count函数修改后的代码如下:
function count() {
// 使用输入类接收参数
num1 =this->input->post('num1');
op =this->input->post('operate');
num2 =this->input->post('num2');
if (is_numeric(num1) && is_numeric(num2)) {
// 如果两个数输入均为数字,则调用calculate_model模型下的count方法
result =this->calculate_model->count(num1,num2, op);
// 生成要传给视图的数据data = array('num1' => num1, 'num2' =>num2, 'op' => op, 'result' =>result);
// 加载视图
this->load->view('result_view',data);
}
}
怎么测试呀
额~没明白,什么怎么测试?
哎呦,不错哦!欢迎互访,诚交友链! http://www.xevip.cn
请问CI_Controller这个类是在哪里的呀
这个是CI框架的提供的类,在system/core下的Controller.php文件里
action=”/CI_02/index.php/calculate/count” 这里出错,跳不过去
不会啊,这个代码是可运行的啊
可以的 正常运行了
CI_02是要改为自己的项目名称的
很棒
hi·可不可以请教一下,我按照你这篇说的做的,但是似乎当是option那里value=÷时,就会显示计算错误,其他符号都不会,可以指导一下吗?
你加我QQ吧,我需要看一下你的代码
编码问题
写的灰常好,逻辑清晰,表述明了,文字功底深厚![太开心]