CI(CodeIgniter)框架入门教程——第二课 初始MVC
本文转载自:http://www.softeng.cn/?p=53

$route['default_controller'] = "welcome";
这行代码的作用就是配置默认的控制器,为了让大家能够更好的学习到CI框架,这里,我们将这行代码修改为
$route['default_controller'] = "calculate";
接下来,我们创建属于我们自己的calculate控制器,在controllers文件夹下,新建一个php文件,文件名是calculate.php,然后书写里面的代码
<?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="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 == "-") {
return $num1 - $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) {
echo $num1." ".$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);
}
}
CI(CodeIgniter)框架入门教程——第二课 初始MVC的更多相关文章
- CodeIgniter框架入门教程——第一课 Hello World!
本文转载自:http://www.softeng.cn/?p=45 今天开始,我将在这里连载由我自己编写的<CodeIgniter框架入门教程>,首先,这篇教程的读着应该是有PHP基础的编 ...
- CodeIgniter框架入门教程——第三课 URL及ajax
本文转载自:http://www.softeng.cn/?p=74 这节课讲一下CI框架的路由规则,以及如何在CI框架下实现ajax功能. 首先,先介绍CI框架的路由规则,因为CI框架是在PHP的基础 ...
- Go-Micro框架入门教程(一)---框架结构
Go语言微服务系列文章,使用golang实现微服务,这里选用的是go-micro框架,本文主要是对该框架的一个架构简单介绍. 1. 概述 go-micro是go语言下的一个很好的微服务框架. 1.服务 ...
- Java - Struts框架教程 Hibernate框架教程 Spring框架入门教程(新版) sping mvc spring boot spring cloud Mybatis
https://www.zhihu.com/question/21142149 http://how2j.cn/k/hibernate/hibernate-tutorial/31.html?tid=6 ...
- Elasticsearch7.X 入门学习第二课笔记----基本api操作和CRUD
原文:Elasticsearch7.X 入门学习第二课笔记----基本api操作和CRUD 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链 ...
- iOS开发 ReactiveCocoa入门教程 第二部分
ReactiveCocoa 是一个框架,它允许你在你的iOS程序中使用函数响应式(FRP)技术.加上第一部分的讲解,你将会学会如何使用信号量(对事件发出数据流)如何替代标准的动作和事件处理逻辑.你也会 ...
- ReactiveCocoa入门教程--第二部分
翻译自:http://www.raywenderlich.com/62796/reactivecocoa-tutorial-pt2 ReactiveCocoa 是一个框架,它允许你在你的iOS程序中使 ...
- .NET轻量级MVC框架:Nancy入门教程(二)——Nancy和MVC的简单对比
在上一篇的.NET轻量级MVC框架:Nancy入门教程(一)——初识Nancy中,简单介绍了Nancy,并写了一个Hello,world.看到大家的评论,都在问Nancy的优势在哪里?和微软的MVC比 ...
- NeHe OpenGL教程 第二课:多边形
前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢 ...
随机推荐
- Windows自动关机命令
winxp中自带了自动关机功能,在开始→运行中使用SHUTDOWN命令 1. 延迟关机关机 shutdown -s -t 120 -s为关机:-t为时间,以秒为单位,120表示2分钟 表示两分钟后关机 ...
- SQL Server 2008 R2——分组取前几名
=================================版权声明================================= 版权声明:本文为博主原创文章 未经许可不得转载 请通过右 ...
- Boost配置
=================================版权声明================================= 版权声明:本文为博主原创文章 未经许可不得转载 请通过右 ...
- 数据分页处理系列之二:HBase表数据分页处理
HBase是Hadoop大数据生态技术圈中的一项关键技术,是一种用于分布式存储大数据的列式数据库,关于HBase更加详细的介绍和技术细节,朋友们可以在网络上进行搜寻,笔者本人在接下来的日子里也会写 ...
- java 读取文件——按照行取出(使用BufferedReader和一次将数据保存到内存两种实现方式)
1.实现目标 读取文件,将文件中的数据一行行的取出. 2.代码实现 1).方式1: 通过BufferedReader的readLine()方法. /** * 功能:Java读取txt文件的内容 步骤: ...
- CentOS 6.3下rsync服务器的安装与配置
一.rsync 简介 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地硬盘中的不同目录. Rsy ...
- Android gdb 调试
[1].终端目录设置到: proj.android[2].make文件的编译选项加上: -g -gstabs+[3].执行编译脚本: sh ./build_native.sh NDK_DEBUG=1[ ...
- STM32的USART
转载自:http://www.cnblogs.com/TrueElement/archive/2012/09/14/2684298.html 几个问题: 1.状态寄存器(USART_SR)中的TC(T ...
- TeamTalk源码分析之login_server
login_server是TeamTalk的登录服务器,负责分配一个负载较小的MsgServer给客户端使用,按照新版TeamTalk完整部署教程来配置的话,login_server的服务端口就是80 ...
- 《JavaScript权威指南 第六版 中文版》(一)
<JavaScript权威指南 第六版 中文版> 第二章 词法结构 2.1字符集 JavaScript是使用Unicode字符集编码写的. 2.1.1区分大小写 JavaScript是区分 ...