codeigniter的程序流程
1. 设计视图
首先,让我们设计视图并把它保存到如下路径:system/application/views/testview.php
- <html>
- <head>
-
<!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">
- <title>Web test Site</title>
- </head>
- <body>
- <h1><?php echo $mytitle; ?> </h1>
- <p class="test"> <?php echo $mytext; ?> </p>
- </body>
- </html>
代码片段1 视图demo
你还可以联想到,变量$mytitle和$mytext的内容呢?答案是我们需要一个新的控制器!
2. 设计控制器
现在,我们需要一个新的控制器。我们将其命名为Start并保存在:/system/application/controllers/start.php
该控制器必须做几件事:
· 调用视图
· 把一些数据传递给视图:它正在期待标题($mytitle)和一些本文($mytext)
· 最后,我们想要控制器接受来自使用者的一个参数(例如通过URL请求)
- <?php
- class Start extends CI_Controller {
- function __construct()
- {
- parent::__construct();
- }
代码片段2 控制器构造函数
在上面的代码中可以看出Start是一个构造函数,他完成了控制器的初始化。
下面是将参数传递个一个函数的代码:
- function hello($name)
- {
- $data['mytitle'] = 'Welcome to this site';
- $data['mytext'] = "Hello, $name, now we're getting dynamic!";
- $this->load->view('testview', $data);
- }
- ?>
代码片段3 控制器url映射函数
这个函数期待一个参数,$name,可能会产生疑问$name变量从哪来?其实它需要来自URL请求的第三个参数,话句话说换句话说,当你输入URL:
http://www.mysite.com/index.php/start/hello/fred
URL的最后一段作为一个参数传给函数hello,倒数第二个参数是指当前的函数名是hello,倒数第三个函数是指当前的控制器名字是start。当然我们还会看到index.php这个参数,这是由于CI将所有的请求都发送到了index.php文件中,你也可以用.htaccess文件重写URL来去掉index.php,考虑到服务器可能不支持.htaccess,我们没有做出修改。
再回到对控制器的讨论中,注意hello()函数如何先设置一个名为$data的数组,并把一些对象的属性及文本读入数组。然后它通过名称装载视图,并把刚生成的$data数组作为第二个参数。在幕后,CI很好地利用了另外一个PHP函数:extract(),这个函数的作用是把数组中的元素取出放入变量表,其中每个键值对中的键名即为变量名,对应该键名的值为变量的值。因此我们刚才定义的$data数组在视图中转换成一个单一的变量:$text(等于“Hello, $name, now we're getting dynamic”)。
换句话说,当它被建立的时候,$data数组看起来像这样:
Array
(
[mytitle] => 'Welcome to this site',
[mytext] => "Hello, fred, now we're getting dynamic!"
);
但是当它被传递给视图的过程中,它被解开,并且下列变量在视图对象中生成,与$data的每个键/值相对应:
$mytitle = 'Welcome to this site';
$mytext = "Hello, fred, now we're getting dynamic!";
虽然你只传送一个变量到视图中,但是,你能把许多数据装进那个变量中。$data数组的每个值还可以是数组,这被称为多维数组,因此,用一个数组变量可以把大量的变量传递给视图。
3.设计模型
其实模型的设计要在控制器之前完成的,但是为了演示控制器和视图之间的数据流动,我们把控制器和视图放到一起说了。
所以说上面介绍的只是VC,因为还没介绍到M,也就是模型。下面构造一个MVC的完整流程。
在第二部分介绍控制器时给数组$data的元素赋值时,我们用到的都是常量,其实在实际的编码情况中,我们的数据都是从数据库中读出的,这份工作就是下面要说到的控制器的职责。先看下面一部分代码:
- <?php
- class Art extends CI_Model {
- public function __construct() {
- parent::__construct();
-
- }
- public function getList($name) {
- $this->db->select('title,content');
- if (!is_null($name)) {
- $this->db->where('author', $name);
- }
- $result=$this->db->get('art');
- return $result->num_rows()>0 ? $result->result_array() : null;
- }
-
-
- }
- ?>
代码片段4 模型demo
首先我们看到这也是一个类,继承自父类Model,首先由__construct函数完成该类的初始化。并加载了CI的数据库类(也就是我们前面所有的AR)。然后我们看类中的getOne函数,这是要介绍的重点。
$this->db->select(‘title,content’);
$this->db->where(‘author’,$name);
$result=$this->db->get(‘art’);
这三句话放到普通的php中应该是这么写的:
$sql=”select title,content from art where author =’“.$name.”’”;
$result=mysql_query($sql);
可以看出用了AR后数据库的处理变得简洁明了,并且更重要的是CI的AR生成隐含的代码,在幕后进行转意和类型转化,使代码更加健壮。
我们在模型中将数据进行处理(查询、修改、删除等),然后将处理结果交给控制器处理。控制器在这里起到了路由的作用,它会将处理的结果交给不同的视图去处理。
在控制器中我们这么取出数据:
- <?php
- class Artmanager extends CI_Controller {
- function __construct() {
- parent::__construct();
- $this->load->model('art');
- }
-
- function index($authName) {
- //$this->load->library('unit_test');
- $list = $this->art->getList($authName);
- $data['list'] = $list;
- $this->load->view('art_list',$data);
- //$this->output->enable_profiler(TRUE);
- }
- }
代码片段5 控制器中使用模型
注意以下两句是整段代码的重点,这两句扼要的指出了在控制器中怎样使用模型。
- $this->load->model('art');
- $list = $this->art->getList($authName);
- $this->load->view('art_list',$data);
- 使用这一句将$data数组中的数据传递到art_list.php(文件存放位置稍后给出)这个文件中。现在看一下art_list.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>
- <base href="<?php echo base_url();?>" />
- <meta name="keywords" content="" />
- <meta name="description" content="" />
- <link href="css/index.css" rel="stylesheet" type="text/css" />
- </head>
-
- <body>
- <table class="list">
- <tr>
- <th></th><th>标题</th><th>内容</th>
- </tr>
-
- <?php
- if (is_null($list)) {
- ?>
- <tr><td colspan="3">没有数据</td></tr>
- <?php
- } else {
- foreach ($list as $index=>$article) {
- ?>
- <tr>
- <td><?php echo $index+1;?></td>
- <td><?php echo $article['title']?></td>
- <td><?php echo $article['content']?></td>
- </tr>
- <?php
- }
- }
- ?>
-
- </table>
- </body>
- </html>
代码片段6 视图中解析控制器中的参数
注意代码片段6中的:
- foreach ($list as $index=>$article)
这一句,如果你没有记错的话,从控制器里传递过来的参数$data是一个数组,但是这里面的变量$list看上去像是没有定义过的。恭喜你,猜的没错了,CI内部就是调用了extract这个函数将$data数组中的元素拆分到以键名为变量名的变量中去了,所以你在这里可以直接使用$list这个变量。
4.备注
为了让上述代码能够正确的运行起来,还需要做一些响应的配置。首先,在application/config/database.php中配置数据库连接:
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'mycms';
然后在application/config/autoload.php中定义自动加载的类库,修改一下里面的相应代码就可以了:
/*
| -------------------------------------------------------------------
| Auto-load Libraries
| -------------------------------------------------------------------
| These are the classes located in the system/libraries folder
| or in your application/libraries folder.
|
| Prototype:
|
| $autoload['libraries'] = array('database', 'session', 'xmlrpc');
*/
$autoload['libraries'] = array('database', 'session');
/*
| -------------------------------------------------------------------
| Auto-load Helper Files
| -------------------------------------------------------------------
| Prototype:
|
| $autoload['helper'] = array('url', 'file');
*/
$autoload['helper'] = array('url');
虽然这篇教程中没有用到session,但是按照我的惯例,我还是把他配置上了。如果你在运行的时候,出现了如下提示:
An Error Was Encountered
In order to use the Session class you are required to set an encryption key in your config file.
那么修改一下application/config/autoload.php中的encryption_key元素即可,随便输入几个字符:
/*
|--------------------------------------------------------------------------
| Encryption Key
|--------------------------------------------------------------------------
|
| If you use the Encryption class or the Session class you
| MUST set an encryption key. See the user guide for info.
|
*/
$config['encryption_key'] = 'FSJFEO@¥#%)#(¥02334';
注:以上内容改编自《codeigniter敏捷开发框架》中的部分内容。详细代码以及数据库文件,见附件。
本教程基于ci2.x编写,基于1.x的教程可参见我的csdn博客http://blog.csdn.net/yunnysunny/article/details/6214171
分享到:
相关推荐
功能说明: 本系统主要包括以下功能模块:个人中心,通知公告管理,用户管理,工作人员管理,进门登记管理,出门登记管理,出入统计管理,外来登记管理等模块。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上
PartSegCore_compiled_backend-0.12.0a0-cp36-cp36m-win_amd64.whl.rar
yolo算法-分神驾驶数据集-8674张图像带标签-没有安全带-唤醒-昏昏欲睡-安全带-电话-打哈欠.zip;yolo算法-分神驾驶数据集-8674张图像带标签-没有安全带-唤醒-昏昏欲睡-安全带-电话-打哈欠.zip;yolo算法-分神驾驶数据集-8674张图像带标签-没有安全带-唤醒-昏昏欲睡-安全带-电话-打哈欠.zip;yolo算法-分神驾驶数据集-8674张图像带标签-没有安全带-唤醒-昏昏欲睡-安全带-电话-打哈欠.zip
python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。
中国省级与地级市财政转移支付数据-最新.zip
OPENCV 常用XML 内涵17个常用XML,包括人脸检测,微笑检测,人眼检测,用于学习模型训练和使用
python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。
python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。
python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。
开发语言:Java 框架:SSM JDK版本:JDK1.8 服务器:tomcat8.5 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea 浏览器:谷歌浏览器
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值
中国各省GDP及农业主要指标数据集(1999-2019).zip
功能说明: 系统主要包括系统主页、个人中心、用户管理、图书信息管理、图书分类管理、图书购买管理、图书借阅管理、图书续借管理、图书归还管理、留言板管理、系统管理等功能模块。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上
2023-04-06-项目笔记-第三百二十阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.318局变量的作用域_318- 2024-11-17
Saturn_PCB_Toolkit_V7.00_ 是一款功能强大的PCB参数计算工具,本人PCB设计15年一直使用的这款计算器,利用其给出的设计数据(如线距、线宽线厚),布出的PCB实际使用未曾出现过问题 以下是其主要功能特点: 1. **过孔特性计算**:能够计算过孔的寄生电容、寄生电感、过孔阻抗、过孔直流电阻、共振频率、阶跃响应、功耗等参数。 2. **导线载流能力计算**:可以计算不同线宽下的载流能力,根据环境温度和温升条件,提供不同条件下的载流值。 3. **串扰计算**:计算两相互耦合信号线间的串扰,这对于高速PCB设计尤为重要。 4. **波长计算**:提供波长的计算功能,这对于射频和高速数字PCB设计非常关键。 5. **导体阻抗计算**:计算导体的阻抗,这对于阻抗匹配和信号完整性至关重要。 6. **单位换算**:提供单位换算功能,方便不同单位制之间的转换。 7. **差分对计算**:针对差分信号的计算,这对于高速数据传输和降低噪声非常重要。
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值
## 一、数据介绍 数据名称:中国各、省、市、县、乡镇基尼系数数据 数据年份:1992-2023年 样本数量:92064条 数据格式:面板数据 ## 二、指标说明 共计10个指标:年份、省、省代码、市、市代码、县、县代码、乡镇、乡镇代码、夜间灯光基尼系数 ## 三、数据文件 中国各乡镇基尼系数(基于夜间灯光数据)2000-2023年.dta; 中国各区县基尼系数(基于夜间灯光数据)2000-2023年.dta; 中国各城市基尼系数(基于夜间灯光数据)2000-2023年.dta; 中国各省份基尼系数(基于夜间灯光数据)2000-2023年.dta
环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上
功能说明: 系统主要包括管理员,商家和用户三大模块 (a) 管理员;管理员进入系统主要功能包括个人中心,用户管理,商家管理,用品分类管理,用品信息管理,系统管理,订单管理等功能并进行操作。 (b) 商家;商家进入系统主要功能包括个人中心,用品信息管理,订单管理等功能并进行操作。 (c) 用户;用户进入系统主要功能包括个人中心,我的收藏管理等功能并进行操作。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上
最新行政区划、乡镇级矢量地图及2022年道路、水系、建筑轮廓数据(shp格式)-已更至最新.zip