 
- CodeIgniter 教程
- CodeIgniter - 主页
- CodeIgniter - 概述
- CodeIgniter - 安装 CodeIgniter
- CodeIgniter - 应用程序架构
- CodeIgniter - MVC 框架
- CodeIgniter - 基本概念
- CodeIgniter - 配置
- CodeIgniter - 使用数据库
- CodeIgniter - 库
- CodeIgniter - 错误处理
- CodeIgniter - 文件上传
- CodeIgniter - 发送电子邮件
- CodeIgniter - 表单验证
- CodeIgniter - 会话管理
- CodeIgniter - Flashdata
- CodeIgniter - 临时数据
- CodeIgniter - Cookie 管理
- CodeIgniter - 常用函数
- CodeIgniter - 页面缓存
- CodeIgniter - 页面重定向
- CodeIgniter - 应用程序分析
- CodeIgniter - 基准测试
- CodeIgniter - 添加 JS 和 CSS
- CodeIgniter - 国际化
- CodeIgniter - 安全
- CodeIgniter 有用资源
- CodeIgniter - 快速指南
- CodeIgniter - 有用的资源
- CodeIgniter - 讨论
CodeIgniter - 快速指南
CodeIgniter - 概述
CodeIgniter是一个应用程序开发框架,可用于使用PHP开发网站。它是一个开源框架。它具有非常丰富的功能,这将提高网站开发工作的速度。
如果您熟悉 PHP,那么 CodeIgniter 将使您的任务变得更容易。它有一套非常丰富的库和助手。如果您从头开始开发网站,通过使用 CodeIgniter,您将节省大量时间。不仅如此,用 CodeIgniter 构建的网站也很安全,因为它能够防止通过网站发生的各种攻击。
代码点火器功能
下面列出了 CodeIgniter 的一些重要功能 -
- 基于模型-视图-控制器的系统 
- 重量极轻 
- 全功能数据库类,支持多个平台。 
- 查询生成器数据库支持 
- 表格和数据验证 
- 安全和 XSS 过滤 
- 会话管理 
- 电子邮件发送类。支持附件、HTML/文本电子邮件、多种协议(sendmail、SMTP 和 Mail)等。 
- 图像处理库(裁剪、调整大小、旋转等)。支持GD、ImageMagick和NetPBM 
- 文件上传类 
- FTP类 
- 本土化 
- 分页 
- 数据加密 
- 标杆管理 
- 全页缓存 
- 错误记录 
- 应用程序分析 
- 日历类 
- 用户代理类 
- 邮政编码类 
- 模板引擎类 
- 引用通告类 
- XML-RPC 库 
- 单元测试类 
- 搜索引擎友好的 URL 
- 灵活的 URI 路由 
- 支持钩子和类扩展 
- 大型“帮助”函数库 
CodeIgniter - 安装
安装 CodeIgniter 非常容易。只需按照下面给出的步骤操作即可 -
- 步骤 1 - 从 CodeIgniter 链接下载CodeIgniter 
- 步骤 2 - 解压缩文件夹。 
- 步骤 3 - 将所有文件和文件夹上传到您的服务器。 
- 步骤 4 - 将所有文件上传到服务器后,访问服务器的 URL,例如 www.domain-name.com。 
访问 URL 时,您将看到以下屏幕 -
 
CodeIgniter - 应用程序架构
CodeIgniter应用程序的架构如下所示。
 
- 如图所示,每当有请求来到CodeIgniter时,它首先会转到index.php页面。 
- 第二步,路由会决定是否将该请求传递给step-3进行缓存,或者将该请求传递给step-4进行安全检查。 
- 如果请求的页面已经在Caching中,则Routing会将请求传递到步骤 3,并将响应返回给用户。 
- 如果请求的页面不存在于缓存中,那么路由会将请求的页面传递到步骤4进行安全检查。 
- 在将请求传递给应用程序控制器之前,会检查所提交数据的安全性。安全检查后,应用程序控制器加载必要的模型、库、助手、插件和脚本并将其传递给View。 
- 视图将使用可用数据呈现页面并将其传递给缓存。由于之前请求的页面没有被缓存,所以这次它将被缓存在Caching中,以便为将来的请求快速处理该页面。 
目录结构
下图显示了 CodeIgniter 的目录结构。
 
CodeIgniter 目录结构分为 3 个文件夹 -
- 应用
- 系统
- 用户指南
应用
正如名称所示,应用程序文件夹包含您正在构建的应用程序的所有代码。这是您将在其中开发项目的文件夹。应用程序文件夹包含其他几个文件夹,解释如下 -
- 缓存- 此文件夹包含应用程序的所有缓存页面。这些缓存的页面将提高访问页面的整体速度。 
- Config - 该文件夹包含用于配置应用程序的各种文件。在config.php文件的帮助下,用户可以配置应用程序。使用database.php文件,用户可以配置应用程序的数据库。 
- 控制器- 此文件夹包含应用程序的控制器。这是您的应用程序的基本部分。 
- Core - 该文件夹将包含您的应用程序的基类。 
- Helpers - 在此文件夹中,您可以放置应用程序的帮助程序类。 
- Hooks - 此文件夹中的文件提供了一种在不破坏核心文件的情况下利用和修改框架内部工作方式的方法。 
- 语言- 该文件夹包含与语言相关的文件。 
- 库- 此文件夹包含为您的应用程序开发的库的文件。 
- 日志- 此文件夹包含与系统日志相关的文件。 
- 模型- 数据库登录名将放置在此文件夹中。 
- Third_party - 在此文件夹中,您可以放置任何将用于您的应用程序的插件。 
- Views - 应用程序的 HTML 文件将放置在此文件夹中。 
系统
该文件夹包含 CodeIgniter 核心代码、库、帮助程序和其他文件,有助于简化编码。这些库和助手在 Web 应用程序开发中加载和使用。
该文件夹包含所有 CodeIgniter 代码,组织到各个文件夹中 -
- Core - 此文件夹包含 CodeIgniter 的核心类。不要修改此处的任何内容。您的所有工作都将在应用程序文件夹中进行。即使您的目的是扩展 CodeIgniter 核心,您也必须使用挂钩来实现,并且挂钩位于应用程序文件夹中。 
- 数据库- 数据库文件夹包含核心数据库驱动程序和其他数据库实用程序。 
- 字体- 字体文件夹包含与字体相关的信息和实用程序。 
- Helpers - helpers 文件夹包含标准 CodeIgniter 帮助程序(例如日期、cookie 和 URL 帮助程序)。 
- 语言- 语言文件夹包含语言文件。您现在可以忽略它。 
- 库- 库文件夹包含标准 CodeIgniter 库(帮助您处理电子邮件、日历、文件上传等)。您可以创建自己的库或扩展(甚至替换)标准库,但这些库将保存在application/libraries目录中,以将它们与保存在该特定文件夹中的标准 CodeIgniter 库分开。 
用户指南
这是 CodeIgniter 的用户指南。它基本上是 CodeIgniter 网站上用户指南的离线版本。使用它,人们可以学习各种库、助手和类的功能。建议在 CodeIgniter 中构建您的第一个 Web 应用程序之前先阅读本用户指南。
除了这三个文件夹之外,还有一个重要的文件,名为“ index.php ”。在此文件中,我们可以设置应用程序环境和错误级别,并且可以定义系统和应用程序文件夹名称。如果您对要执行的操作没有足够的了解,建议不要编辑这些设置。
CodeIgniter - MVC 框架
CodeIgniter基于模型-视图-控制器(MVC)开发模式。MVC 是一种将应用程序逻辑与表示分离的软件方法。实际上,它允许您的网页包含最少的脚本,因为演示文稿与 PHP 脚本是分开的。
 
- 模型代表您的数据结构。通常,您的模型类将包含帮助您检索、插入和更新数据库中信息的函数。 
- 视图是呈现给用户的信息。视图通常是网页,但在 CodeIgniter 中,视图也可以是页面片段,例如页眉或页脚。它还可以是 RSS 页面,或任何其他类型的“页面”。 
- 控制器充当模型、视图和处理 HTTP 请求并生成网页所需的任何其他资源之间的中介。 
CodeIgniter - 基本概念
控制器
控制器是一个简单的类文件。顾名思义,它通过 URI 来控制整个应用程序。
创建控制器
首先,转到应用程序/控制器文件夹。您会在那里找到两个文件:index.html和Welcome.php。这些文件随 CodeIgniter 一起提供。
保持这些文件原样。在同一路径下创建一个名为“ Test.php ”的新文件。在该文件中写入以下代码 -
<?php 
   class Test extends CI_Controller {
  
      public function index() { 
         echo "Hello World!"; 
      } 
   } 
?>
Test类扩展了一个名为CI_Controller的内置类。每当您想要创建自己的控制器类时,都必须扩展该类。
调用控制器
上述控制器可以通过 URI 调用,如下所示 -
http://www.your-domain.com/index.php/test
请注意上述 URI 中 index.php 后面的单词“ test ”。这表示控制器的类名。由于我们已经给出了控制器的名称“ Test ”,因此我们在index.php后面写入“ test ”。类名必须以大写字母开头,但是当我们通过 URI 调用该控制器时,需要写小写字母。调用控制器的一般语法如下 -
http://www.your-domain.com/index.php/controller/method-name
创建并调用构造方法
让我们修改上面的类并创建另一个名为“hello”的方法。
<?php 
   class Test extends CI_Controller {  
	
      public function index() { 
         echo "This is default function."; 
      } 
  
      public function hello() { 
         echo "This is hello function."; 
      } 
   } 
?>
我们可以通过以下三种方式执行上述控制器 -
- http://www.your-domain.com/index.php/test
- http://www.your-domain.com/index.php/test/index
- http://www.your-domain.com/index.php/test/hello
在浏览器中访问第一个 URI 后,我们得到如下图所示的输出。正如你所看到的,我们得到了方法“ index ”的输出,即使我们没有将方法的名称传递给 URI。我们在 URI 中仅使用了控制器名称。在这种情况下,CodeIgniter 调用默认方法“ index ”。
 
在浏览器中访问第二个 URI,我们得到与上图所示相同的输出。在这里,我们在 URI 中的控制器名称后面传递了方法名称。由于该方法的名称是“ index ”,因此我们得到相同的输出。
在浏览器中访问第三个 URI,我们得到如下图所示的输出。正如你所看到的,我们得到了方法“ hello ”的输出,因为我们在 URI 中控制器“ test ”的名称后面传递了“ hello ”作为方法名称。
 
需要记住的要点
- 控制器类的名称必须以大写字母开头。 
- 控制器必须用小写字母调用。 
- 不要使用与父类相同的方法名称,因为它将覆盖父类的功能。 
意见
这可以是简单或复杂的网页,可以由控制器调用。网页中可能包含页眉、页脚、侧边栏等。View不能直接调用。让我们创建一个简单的视图。在application/views下创建一个名为“ test.php ”的新文件,并将以下给定的代码复制到该文件中。
<!DOCTYPE html> 
<html lang = "en"> 
   <head> 
      <meta charset = "utf-8"> 
      <title>CodeIgniter View Example</title> 
   </head>
	
   <body> 
      CodeIgniter View Example 
   </body>
	
</html>
更改application/controllers/test.php文件的代码,如下所示。
加载视图
可以通过以下语法加载视图 -
$this->load->view('name');
其中 name 是正在渲染的视图文件。如果您计划将视图文件存储在某个目录中,那么您可以使用以下语法 -
$this->load->view('directory-name/name');
没有必要将扩展名指定为 php,除非使用 .php 以外的其他扩展名。
index() 方法调用 view 方法并将“test”作为参数传递给 view() 方法,因为我们已将 html 编码存储在application/views/test.php下的“ test.php ”文件中。
<?php 
   class Test extends CI_Controller { 
	
      public function index() { 
         $this->load->view('test'); 
      } 
   } 
?>
这是上面代码的输出 -
 
下面的流程图说明了一切是如何工作的 -
 
楷模
模型类旨在处理数据库中的信息。例如,如果您使用 CodeIgniter 来管理应用程序中的用户,那么您必须拥有模型类,其中包含插入、删除、更新和检索用户数据的函数。
创建模型类
模型类存储在application/models目录中。以下代码展示了如何在 CodeIgniter 中创建模型类。
<?php 
   Class Model_name extends CI_Model { 
	
      Public function __construct() { 
         parent::__construct(); 
      } 
   } 
?> 
其中 Model_name 是您想要提供的模型类的名称。每个模型类必须继承CodeIgniter的CI_Model类。模型类的第一个字母必须大写。以下是用户模型类的代码。
<?php 
   Class User_model extends CI_Model {
	
      Public function __construct() { 
         parent::__construct(); 
      } 
		
   } 
?>
上述模型类必须保存为User_model.php。类名和文件名必须相同。
装载模型
模型可以在控制器中调用。以下代码可用于加载任何模型。
$this->load->model('model_name');
其中 model_name 是要加载的模型的名称。加载模型后,您可以简单地调用其方法,如下所示。
$this->model_name->method();
自动加载模型
在某些情况下,您可能希望在整个应用程序中使用一些模型类。在这种情况下,我们最好自动加载它。
/*
| ---------------------------------------------------------------
|  Auto-Load Models
| ---------------------------------------------------------------
| Prototype:
|
|   $autoload['model'] = array('first_model', 'second_model');
|
| You can also supply an alternative model name to be assigned
| in the controller:
|  
|   $autoload['model'] = array('first_model' => 'first');
*/
$autoload['model'] = array();
如上图所示,在数组中传递要自动加载的模型名称,系统将自动加载模型,同时系统处于初始化状态并且可以在整个应用程序中访问。
帮手
顾名思义,它将帮助您构建系统。它被分成小函数来服务不同的功能。CodeIgniter 中提供了许多帮助程序,如下表所列。我们也可以构建自己的助手。
帮助程序通常存储在您的system/helpers或application/helpers 目录中。自定义助手存储在application/helpers目录中,系统的助手存储在system/helpers目录中。CodeIgniter 将首先在您的application/helpers 目录中查找。如果该目录不存在或未找到指定的帮助程序,CodeIgniter 将在您的全局system/helpers / 目录中查找。每个助手,无论是自定义助手还是系统助手,都必须在使用之前加载。
| 序列号 | 助手姓名和描述 | 
|---|---|
| 1 | 数组助手 数组助手文件包含有助于处理数组的函数。 | 
| 2 | 验证码助手 CAPTCHA Helper 文件包含帮助创建 CAPTCHA 图像的函数。 | 
| 3 | cookie助手 Cookie Helper 文件包含协助使用 cookie 的函数。 | 
| 4 | 约会助手 日期助手文件包含可帮助您处理日期的函数。 | 
| 5 | 目录助手 目录帮助程序文件包含有助于处理目录的函数。 | 
| 6 | 下载助手 下载助手可让您将数据下载到桌面。 | 
| 7 | 电子邮件助手 电子邮件助手提供了一些使用电子邮件的辅助功能。有关更强大的电子邮件解决方案,请参阅 CodeIgniter 的电子邮件类。 | 
| 8 | 文件助手 文件帮助程序文件包含辅助处理文件的函数。 | 
| 9 | 表单助手 表单助手文件包含有助于处理表单的函数。 | 
| 10 | HTML 帮助程序 HTML 帮助程序文件包含有助于使用 HTML 的函数。 | 
| 11 | 偏转器助手 Inflector Helper 文件包含允许您将单词更改为复数、单数、驼峰式大小写等的函数。 | 
| 12 | 语言助手 语言帮助程序文件包含有助于处理语言文件的函数。 | 
| 13 | 号码助手 Number Helper 文件包含可帮助您处理数字数据的函数。 | 
| 14 | 路径助手 路径帮助程序文件包含允许您使用服务器上的文件路径的函数。 | 
| 15 | 安全助手 安全帮助程序文件包含与安全相关的函数。 | 
| 16 | 笑脸助手 笑脸助手文件包含可让您管理笑脸(表情符号)的函数。 | 
| 17 号 | 字符串助手 字符串助手文件包含有助于处理字符串的函数。 | 
| 18 | 文本助手 文本帮助程序文件包含辅助处理文本的函数。 | 
| 19 | 排版助手 Typography Helper 文件包含可帮助您以语义相关的方式设置文本格式的函数。 | 
| 20 | 网址助手 URL 帮助程序文件包含有助于处理 URL 的函数。 | 
| 21 | XML助手 XML Helper 文件包含有助于处理 XML 数据的函数。 | 
加载助手
可以加载助手,如下所示 -
$this->load->helper('name');
其中 name 是帮助者的名字。例如,如果您想加载 URL Helper,则可以将其加载为 -
$this->load->helper('url');
路由
CodeIgniter具有用户友好的URI路由系统,使您可以轻松地重新路由URL。通常,URL 字符串与其对应的控制器类/方法之间存在一对一的关系。URI 中的段通常遵循以下模式 -
your-domain.com/class/method/id/
- 第一段表示应调用的控制器类。 
- 第二段表示应该调用的类函数或方法。 
- 第三个段以及任何其他段表示 ID 和将传递到控制器的任何变量。 
在某些情况下,您可能想要更改此默认路由机制。CodeIgniter 提供了一些工具,您可以通过它来设置自己的路由规则。
自定义路由规则
有一个特定的文件,您可以在其中处理所有这些。该文件位于 application/config/routes.php。您将找到一个名为 $route 的数组,您可以在其中自定义路由规则。$route 数组中的键将决定路由什么,值将决定路由到何处。CodeIgniter 中保留了 3 个路由。
| 序列号 | 预留路线及说明 | 
|---|---|
| 1 | $route['default_controller'] 如果 URI 不包含数据(当人们加载您的根 URL 时就会出现这种情况),此路由指示应加载哪个控制器类。建议您使用默认路由,否则默认情况下会出现 404 页面。我们可以在这里设置网站的主页,这样它就会默认加载。 | 
| 2 | $路线['404_override'] 该路由指示如果未找到所请求的控制器,则应加载哪个控制器类。它将覆盖默认的 404 错误页面。它不会影响show_404()函数,该函数将继续加载application/views/errors/error_404.php中的默认error_404.php文件。 | 
| 3 | $route['translate_uri_dashes'] 从布尔值可以明显看出,这并不完全是一条路线。此选项使您能够在控制器和方法 URI 段中自动将破折号(“-”)替换为下划线,从而在需要时节省额外的路由条目。这是必需的,因为破折号不是有效的类或方法名称字符,如果您尝试使用它,将会导致致命错误。 | 
可以通过通配符或使用正则表达式来自定义路由,但请记住,这些自定义的路由规则必须位于保留规则之后。
通配符
我们可以使用两个通配符,如下所述 -
- (:num) - 它将匹配仅包含数字的段。 
- (:any) - 它将匹配包含任何字符的段。 
例子
$route['product/:num']='catalog/product_lookup';
在上面的示例中,如果在 URL 的第一段中找到文字“product”,并且在第二段中找到数字,则改用“catalog”类和“product_lookup”方法。
常用表达
与通配符一样,我们也可以在$route 数组关键部分使用正则表达式。如果任何 URI 与正则表达式匹配,那么它将被路由到 $route 数组中设置的值部分。
例子
$route['products/([a-z]+)/(\d+)']='$1/id_$2';
在上面的示例中,类似于 products/shoes/123 的 URI 将调用“ shoes ”控制器类和“ id_123 ”方法。
CodeIgniter - 配置
设置好站点后,接下来我们应该做的就是配置站点。application/config 文件夹包含一组设置站点基本配置的文件。
配置基本 URL
站点的基本 URL 可以在 application/config/config.php 文件中配置。它是您的 CodeIgniter 根目录的 URL。通常,这将是您的基本 URL,带有尾部斜杠,例如
http://example.com/
如果未设置,则 CodeIgniter 将尝试猜测安装的协议、域和路径。但是,您应该始终显式配置它,并且永远不要依赖自动猜测,尤其是在生产环境中。您可以使用键“base_url”在 $config 数组中配置基本 URL,如下所示 -
$config['base_url'] = 'http://your-domain.com';
数据库配置
站点的数据库可以在 application/config/database.php 文件中配置。通常我们需要为不同的环境(例如开发和生产)建立数据库。利用CodeIgniter中提供的多维数组,我们可以为不同的环境设置数据库。配置设置存储在数组中,如下所示 -
$db['default'] = array( 'dsn' => '', 'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'database_name', 'dbdriver' => 'mysqli', 'dbprefix' => '', 'pconnect' => TRUE, 'db_debug' => TRUE, 'cache_on' => FALSE, 'cachedir' => '', 'char_set' => 'utf8', 'dbcollat' => 'utf8_general_ci', 'swap_pre' => '', 'encrypt' => FALSE, 'compress' => FALSE, 'stricton' => FALSE, 'failover' => array() );
除了主机名、用户名、密码、数据库和 dbdriver 之外,您可以将几个选项保留为默认值。
- hostname - 在此指定数据库的位置,例如本地主机或 IP 地址 
- username - 在此设置数据库的用户名。 
- 密码- 在这里设置数据库的密码。 
- 数据库- 此处设置数据库的名称。 
- dbdriver - 设置您正在使用的数据库类型,例如 MySQL、MySQLi、Postgre SQL、ODBC 和 MS SQL。 
通过更改数组$db的键,您可以设置数据库的其他配置,如下所示。在这里,我们将键设置为“test”以设置测试环境的数据库,并保持其他数据库环境不变。
$db['test'] = array( 'dsn' => '', 'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'database_name', 'dbdriver' => 'mysqli', 'dbprefix' => '', 'pconnect' => TRUE, 'db_debug' => TRUE, 'cache_on' => FALSE, 'cachedir' => '', 'char_set' => 'utf8', 'dbcollat' => 'utf8_general_ci', 'swap_pre' => '', 'encrypt' => FALSE, 'compress' => FALSE, 'stricton' => FALSE, 'failover' => array() );
您可以通过更改变量的值来简单地切换到不同的环境,如下所示 -
$active_group = '默认'; //这将设置默认环境
$active_group = '测试'; //这将设置测试环境
自动加载配置
默认情况下,此文件指定应加载哪些系统。为了使框架尽可能轻量,默认情况下仅加载绝对最少的资源。人们应该自动加载经常使用的系统,而不是在本地重复加载它。以下是您可以自动加载的内容 -
- 库- 它是应该自动加载的库列表。提供数组中的库列表,如下所示,由 CodeIgniter 自动加载。在此示例中,我们自动加载数据库、电子邮件和会话库。 
$autoload['libraries'] = array('database', 'email', 'session');
- 驱动程序- 这些类位于 system/libraries/ 或 application/libraries/ 目录中,但也放置在它们自己的子目录中,并且它们扩展了 CI_Driver_Library 类。他们提供多种可互换的驱动程序选项。以下是自动加载缓存驱动程序的示例。 
$autoload['drivers'] = array('cache');
- 帮助文件- 这是要自动加载的帮助文件列表。提供数组中的库列表,如下所示,由 CodeIgniter 自动加载。在给定的示例中,我们自动加载 URL 和文件助手。 
$autoload['helper'] = array('url', 'file');
- 自定义配置文件- 仅当您创建了自定义配置文件时,这些文件才可供使用。否则,请将其留空。以下是如何自动加载多个配置文件的示例。 
$autoload['config'] = array('config1', 'config2');
- 语言文件- 它是应该自动加载的语言文件列表。看下面给出的例子。提供数组中的语言列表,如下所示,由 CodeIgniter 自动加载。请记住,不要包含文件的“_lang”部分。例如,“codeigniter_lang.php”将被引用为 array('codeigniter'); 
- 模型- 它是模型文件的列表,应该自动加载。提供数组中的模型列表,如下所示,由 CodeIgniter 自动加载。以下是如何自动加载多个模型文件的示例。 
$autoload['model'] = array('first_model', 'second_model');
CodeIgniter - 使用数据库
与任何其他框架一样,我们需要经常与数据库交互,CodeIgniter 使我们可以轻松完成这项工作。它提供了丰富的与数据库交互的功能。
在本节中,我们将了解 CRUD(创建、读取、更新、删除)功能如何与 CodeIgniter 配合使用。我们将使用Stud表来选择、更新、删除和插入Stud表中的数据。
| 表名称:螺柱 | |
|---|---|
| 卷号 | 整数(11) | 
| 姓名 | varchar(30) | 
连接到数据库
我们可以通过以下两种方式连接到数据库 -
- 自动连接- 自动连接可以通过使用文件 application/config/autoload.php 来完成。自动连接将为每个页面加载数据库。我们只需要添加数据库库,如下所示 - 
$autoload['libraries'] = array(‘database’);
- 手动连接- 如果您只需要某些页面的数据库连接,那么我们可以进行手动连接。我们可以通过在任何类中添加以下行来手动连接到数据库。 
$this->load->database();
在这里,我们没有传递任何参数,因为所有内容都在数据库配置文件 application/config/database.php 中设置
插入记录
要在数据库中插入记录,请使用 insert() 函数,如下表所示 -
| 句法 | 插入([ $table = '' [, $set = NULL [, $escape = NULL ]]]) | 
| 参数 | 
 | 
| 退货 | TRUE 成功,FALSE 失败 | 
| 返回类型 | 布尔值 | 
以下示例显示如何在Stud表中插入记录。$data 是一个数组,我们在其中设置了数据并将该数据插入到表Stud中,我们只需将该数组传递给第二个参数中的插入函数即可。
$data = array( 
   'roll_no' => ‘1’, 
   'name' => ‘Virat’ 
); 
$this->db->insert("stud", $data);
更新记录
要更新数据库中的记录,需要将update()函数与set()和where()函数一起使用,如下表所示。set ()函数将设置要更新的数据。
| 句法 | 设置( $key [, $value = '' [, $escape = NULL ]]) | 
| 参数 | 
 | 
| 退货 | CI_DB_query_builder 实例(方法链接) | 
| 返回类型 | CI_DB_query_builder | 
where ()函数将决定更新哪条记录。
| 句法 | 其中( $key [, $value = NULL [, $escape = NULL ]]) | 
| 参数 | 
 | 
| 退货 | DB_query_builder 实例 | 
| 返回类型 | 目的 | 
最后,update()函数将更新数据库中的数据。
| 句法 | 更新([ $table = '' [, $set = NULL [, $where = NULL[, $limit = NULL ]]]]) | 
| 参数 | 
 | 
| 退货 | TRUE 成功,FALSE 失败 | 
| 返回类型 | 布尔值 | 
$data = array( 
   'roll_no' => ‘1’, 
   'name' => ‘Virat’ 
); 
$this->db->set($data); 
$this->db->where("roll_no", ‘1’); 
$this->db->update("stud", $data);
删除记录
要删除数据库中的记录,请使用delete()函数,如下表所示 -
| 句法 | 删除([ $table = '' [, $where = '' [, $limit = NULL[, $reset_data = TRUE ]]]]) | 
| 参数 | 
 | 
| 退货 | CI_DB_query_builder 实例(方法链接)或失败时为 FALSE | 
| 返回类型 | 混合的 | 
使用以下代码删除螺柱表中的记录。第一个参数表示要删除记录的表的名称,第二个参数决定要删除的记录。
$this->db->delete("stud", "roll_no = 1");
选择一条记录
要选择数据库中的记录,请使用get函数,如下表所示 -
| 句法 | get([ $table = '' [, $limit = NULL [, $offset = NULL ]]]) | 
| 参数 | 
 | 
| 退货 | CI_DB_result 实例(方法链接) | 
| 返回类型 | CI_DB_结果 | 
使用以下代码从数据库中获取所有记录。第一条语句从“stud”表中获取所有记录并返回对象,该对象将存储在 $query 对象中。第二条语句使用 $query 对象调用result()函数以获取所有记录作为数组。
$query = $this->db->get("stud"); 
$data['records'] = $query->result();
关闭连接
可以通过执行以下代码手动关闭数据库连接 -
$this->db->close();
例子
创建一个名为Stud_controller.php的控制器类并将其保存在application/controller/Stud_controller.php
这是一个完整的示例,其中执行了所有上述操作。在执行以下示例之前,请按照本章开头的说明创建数据库和表,并对存储在application/config/database.php 的数据库配置文件进行必要的更改
<?php 
   class Stud_controller extends CI_Controller {
	
      function __construct() { 
         parent::__construct(); 
         $this->load->helper('url'); 
         $this->load->database(); 
      } 
  
      public function index() { 
         $query = $this->db->get("stud"); 
         $data['records'] = $query->result(); 
			
         $this->load->helper('url'); 
         $this->load->view('Stud_view',$data); 
      } 
  
      public function add_student_view() { 
         $this->load->helper('form'); 
         $this->load->view('Stud_add'); 
      } 
  
      public function add_student() { 
         $this->load->model('Stud_Model');
			
         $data = array( 
            'roll_no' => $this->input->post('roll_no'), 
            'name' => $this->input->post('name') 
         ); 
			
         $this->Stud_Model->insert($data); 
   
         $query = $this->db->get("stud"); 
         $data['records'] = $query->result(); 
         $this->load->view('Stud_view',$data); 
      } 
  
      public function update_student_view() { 
         $this->load->helper('form'); 
         $roll_no = $this->uri->segment('3'); 
         $query = $this->db->get_where("stud",array("roll_no"=>$roll_no));
         $data['records'] = $query->result(); 
         $data['old_roll_no'] = $roll_no; 
         $this->load->view('Stud_edit',$data); 
      } 
  
      public function update_student(){ 
         $this->load->model('Stud_Model');
			
         $data = array( 
            'roll_no' => $this->input->post('roll_no'), 
            'name' => $this->input->post('name') 
         ); 
			
         $old_roll_no = $this->input->post('old_roll_no'); 
         $this->Stud_Model->update($data,$old_roll_no); 
			
         $query = $this->db->get("stud"); 
         $data['records'] = $query->result(); 
         $this->load->view('Stud_view',$data); 
      } 
  
      public function delete_student() { 
         $this->load->model('Stud_Model'); 
         $roll_no = $this->uri->segment('3'); 
         $this->Stud_Model->delete($roll_no); 
   
         $query = $this->db->get("stud"); 
         $data['records'] = $query->result(); 
         $this->load->view('Stud_view',$data); 
      } 
   } 
?>
创建一个名为Stud_Model.php的模型类并将其保存在application/models/Stud_Model.php中
<?php 
   class Stud_Model extends CI_Model {
	
      function __construct() { 
         parent::__construct(); 
      } 
   
      public function insert($data) { 
         if ($this->db->insert("stud", $data)) { 
            return true; 
         } 
      } 
   
      public function delete($roll_no) { 
         if ($this->db->delete("stud", "roll_no = ".$roll_no)) { 
            return true; 
         } 
      } 
   
      public function update($data,$old_roll_no) { 
         $this->db->set($data); 
         $this->db->where("roll_no", $old_roll_no); 
         $this->db->update("stud", $data); 
      } 
   } 
?> 
创建一个名为Stud_add.php的视图文件并将其保存在application/views/Stud_add.php中
<!DOCTYPE html> 
<html lang = "en">
 
   <head> 
      <meta charset = "utf-8"> 
      <title>Students Example</title> 
   </head> 
	
   <body> 
      <form method = "" action = "">
		
         <?php 
            echo form_open('Stud_controller/add_student');
            echo form_label('Roll No.'); 
            echo form_input(array('id'=>'roll_no','name'=>'roll_no')); 
            echo "<br/>"; 
			
            echo form_label('Name'); 
            echo form_input(array('id'=>'name','name'=>'name')); 
            echo "<br/>"; 
			
            echo form_submit(array('id'=>'submit','value'=>'Add')); 
            echo form_close(); 
         ?> 
		
      </form> 
   </body>
	
</html>
创建一个名为Stud_edit.php的视图文件并将其保存在application/views/Stud_edit.php中
<!DOCTYPE html> 
<html lang = "en">
 
   <head> 
      <meta charset = "utf-8"> 
      <title>Students Example</title> 
   </head> 
	
   <body> 
      <form method = "" action = "">
		
         <?php 
            echo form_open('Stud_controller/update_student'); 
            echo form_hidden('old_roll_no',$old_roll_no); 
            echo form_label('Roll No.'); 
            echo form_input(array('id'⇒'roll_no',
               'name'⇒'roll_no','value'⇒$records[0]→roll_no)); 
            echo "
            "; 
            echo form_label('Name'); 
            echo form_input(array('id'⇒'name','name'⇒'name',
               'value'⇒$records[0]→name)); 
            echo "
            "; 
            echo form_submit(array('id'⇒'sub mit','value'⇒'Edit')); 
            echo form_close();
         ?> 
			
      </form> 
   </body>
	
</html>
创建一个名为Stud_view.php的视图文件并将其保存在application/views/Stud_view.php中
<!DOCTYPE html> 
<html lang = "en">
 
   <head> 
      <meta charset = "utf-8"> 
      <title>Students Example</title> 
   </head>
	
   <body> 
      <a href = "<?php echo base_url(); ?>
         index.php/stud/add_view">Add</a>
		
      <table border = "1"> 
         <?php 
            $i = 1; 
            echo "<tr>"; 
            echo "<td>Sr#</td>"; 
            echo "<td>Roll No.</td>"; 
            echo "<td>Name</td>"; 
            echo "<td>Edit</td>"; 
            echo "<td>Delete</td>"; 
            echo "<tr>"; 
				
            foreach($records as $r) { 
               echo "<tr>"; 
               echo "<td>".$i++."</td>"; 
               echo "<td>".$r->roll_no."</td>"; 
               echo "<td>".$r->name."</td>"; 
               echo "<td><a href = '".base_url()."index.php/stud/edit/"
                  .$r->roll_no."'>Edit</a></td>"; 
               echo "<td><a href = '".base_url()."index.php/stud/delete/"
                  .$r->roll_no."'>Delete</a></td>"; 
               echo "<tr>"; 
            } 
         ?>
      </table> 
		
   </body>
	
</html>
在application/config/routes.php的路由文件中进行以下更改,并在文件末尾添加以下行。
$route['stud'] = "Stud_controller"; $route['stud/add'] = 'Stud_controller/add_student'; $route['stud/add_view'] = 'Stud_controller/add_student_view'; $route['stud/edit/(\d+)'] = 'Stud_controller/update_student_view/$1'; $route['stud/delete/(\d+)'] = 'Stud_controller/delete_student/$1';
现在,让我们通过在浏览器中访问以下 URL 来执行此示例。将 yoursite.com 替换为您的 URL。
http://yoursite.com/index.php/stud
CodeIgniter - 库
CodeIgniter 框架的重要部分是它的库。它提供了丰富的库,间接提高了应用程序的开发速度。系统库位于system/libraries。我们需要做的就是加载我们想要使用的库。可以加载该库,如下所示 -
$this->load->library('class name');
其中类名是我们要加载的库的名称。如果我们想加载多个库,那么我们可以简单地将一个数组作为参数传递给library()函数,如下所示 -
$this->load->library(array('email', 'table'));
图书馆课程
库类位于system/libraries中。每个类都有不同的功能,以简化开发工作。下表显示了库类的名称及其描述。
| 序列号 | 库类和描述 | 
|---|---|
| 1 | 标杆类 基准测试类始终处于活动状态,可以计算任意两个标记点之间的时间差。 | 
| 2 | 缓存类 该类会对页面进行缓存,以达到快速访问页面的速度。 | 
| 3 | 日历类 使用此类,您可以动态创建日历。 | 
| 4 | 购物车类 使用此类,您可以从购物车添加或删除商品。这些项目保存在会话中,并将保持活动状态,直到用户浏览该站点。 | 
| 5 | 配置类 使用此类可以检索配置首选项。该类是自动初始化的。 | 
| 6 | 电子邮件课程 此类提供与电子邮件相关的功能,例如发送或回复电子邮件。 | 
| 7 | 加密等级 该类提供双向数据加密功能。 | 
| 8 | 文件上传类 该类提供与文件上传相关的功能。您可以设置各种首选项,例如要上传的文件类型、文件大小等。 | 
| 9 | 表单验证类 该类提供了各种函数来验证表单。 | 
| 10 | FTP类 该类提供各种与 FTP 相关的功能,例如传输文件以删除服务器、移动、重命名或删除服务器上的文件。 | 
| 11 | 图像处理类 图像的操作,如调整大小、缩略图创建、裁剪、旋转、水印可以在此类的帮助下完成。 | 
| 12 | 输入类别 出于安全原因,此类对输入数据进行预处理。 | 
| 13 | 语言班 该类用于国际化。 | 
| 14 | 装载机类 该类加载视图文件、驱动程序、助手、模型等元素。 | 
| 15 | 迁移类 此类提供与数据库迁移相关的功能。 | 
| 16 | 输出等级 此类将输出发送到浏览器,并缓存该网页。 | 
| 17 号 | 分页类 该类为网页添加分页功能。 | 
| 18 | 模板解析器类 模板解析器类可以对视图文件中包含的伪变量执行简单的文本替换。它可以解析简单变量或变量标签对。 | 
| 19 | 安全等级 该类包含与安全相关的功能,如 XSS 过滤、CSRF 等。 | 
| 20 | 会话库 此类提供了维护应用程序会话的功能。 | 
| 21 | HTML 表格 此类用于从数组或数据库结果自动生成 HTML 表。 | 
| 22 | 引用通告类 Trackback 类提供了使您能够发送和接收 Trackback 数据的函数。 | 
| 23 | 排版课 Typography 类提供了有助于格式化文本的方法。 | 
| 24 | 单元测试类 此类提供对应用程序进行单元测试并生成结果的功能。 | 
| 25 | URI 类 URI 类提供了帮助您从 URI 字符串检索信息的方法。如果您使用 URI 路由,您还可以检索有关重新路由的段的信息。 | 
| 26 | 用户代理类 用户代理类提供的功能可帮助识别有关访问您网站的浏览器、移动设备或机器人的信息。此外,您还可以获得引荐来源网址信息以及语言和支持的字符集信息。 | 
| 27 | XML-RPC 和 XML-RPC 服务器类 CodeIgniter 的 XML-RPC 类允许您将请求发送到另一台服务器,或设置您自己的 XML-RPC 服务器来接收请求。 | 
| 28 | 邮政编码类 此类用于创建数据的 zip 存档。 | 
创建库
CodeIgniter 拥有丰富的库,您可以在system/libraries文件夹中找到它们,但 CodeIgniter 不仅限于系统库,您也可以创建自己的库,这些库可以存储在application/libraries文件夹中。您可以通过三种方式创建库。
- 创建新库
- 扩展原生库
- 替换原生库
创建新库
在创建新库时,应记住以下事项 -
- 文件名必须以大写字母开头,例如 Mylibrary.php
- 类名必须以大写字母开头,例如 class Mylibrary
- 类名和文件名必须匹配。
我的图书馆.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
   
   class Mylibrary {
	
      public function some_function() {
      }
   }
	
/* End of file Mylibrary.php */
加载自定义库
只需在控制器中执行以下行即可加载上述库。
$this->load->library(‘mylibrary’);
mylibrary 是您的图书馆的名称,您可以用小写和大写字母书写。使用不带“.php”扩展名的库名称。加载库后,您还可以调用该类的函数,如下所示。
$this->mylibrary->some_function();
扩展本机库
有时,您可能需要将自己的功能添加到 CodeIgniter 提供的库中。CodeIgniter 提供了一些工具,您可以通过它扩展本机库并添加您自己的函数。要实现此目的,您必须扩展本机库类的类。例如,如果您想扩展电子邮件库,则可以按如下所示完成:
Class MY_Email extends CI_Email { 
}
在上面的示例中,MY_Email 类扩展了本机库的电子邮件类 CI_Email。该库可以通过加载电子邮件库的标准方式来加载。将以上代码保存在文件 My_Email.php 中
替换本机库
在某些情况下,您不想按照本机库的工作方式使用它,而是希望用您自己的方式替换它。这可以通过替换本机库来完成。要实现此目的,您只需提供与本机库中命名的类名相同的类名即可。例如,如果您想替换Email 类,则使用如下所示的代码。使用Email.php保存文件名,并将类名指定为CI_Email。
电子邮件.php
Class CI_Email { 
}
CodeIgniter - 错误处理
很多时候,我们在使用应用程序时会遇到错误。如果错误处理不当,对于用户来说是非常烦人的。CodeIgniter 提供了一种简单的错误处理机制。
您希望在应用程序处于开发模式而不是生产模式时显示消息,因为错误消息可以在开发阶段轻松解决。
通过更改index.php文件中下面给出的行,可以更改应用程序的环境。这可以设置为任何值,但通常有三个值(开发、测试、生产)用于此目的。
define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');
不同的环境将需要不同级别的错误报告。默认情况下,开发模式将显示错误,测试和实时模式将隐藏它们。CodeIgniter 提供了如下所示的三个函数来处理错误。
- show_error()函数在屏幕顶部以 HTML 格式显示错误。 
| 句法 | show_error( $message, $status_code, $heading = '遇到错误' ) | 
| 参数 | 
 | 
| 返回类型 | 混合的 | 
- 如果您尝试访问不存在的页面,show_404()函数会显示错误。 
| 句法 | show_404( $page = '', $log_error = TRUE ) | 
| 参数 | 
 | 
| 返回类型 | 空白 | 
- log_message()函数用于写入日志消息。当您想要编写自定义消息时,这非常有用。 
| 句法 | log_message( $level, $message, $php_error = FALSE ) | 
| 参数 | 
 | 
| 返回类型 | 空白 | 
可以在application/config/config.php文件中启用日志记录。下面给出的是 config.php 文件的屏幕截图,您可以在其中设置阈值。
/* |-------------------------------------------------------------------------------- | Error Logging Threshold |-------------------------------------------------------------------------------- | You can enable error logging by setting a threshold over zero. The | threshold determines what gets logged. Threshold options are: | | 0 = Disable logging, Error logging TURNED OFF | 1 = Error Message (including PHP errors) | 2 = Debug Message | 3 = Informational Messages | 4 = All Messages | | You can also pass an array with threshold levels to show individual error types | | array(2) = Debug Message, without Error Messages | For a live site you'll usually only enable Errors (1) to be logged otherwise | your log files will fill up very fast. | */ $config['log_threshold'] = 0;
您可以在application/log/中找到日志消息。在启用日志文件之前,请确保该目录可写。
错误消息的各种模板可以在application/views/errors/cli或application/views/errors/html中找到。
CodeIgniter - 文件上传
使用文件上传类,我们可以上传文件,还可以限制要上传的文件的类型和大小。按照给定示例中显示的步骤了解 CodeIgniter 中的文件上传过程。
例子
复制以下代码并将其存储在application/view/Upload_form.php。
<html>
 
   <head> 
      <title>Upload Form</title> 
   </head>
	
   <body> 
      <?php echo $error;?> 
      <?php echo form_open_multipart('upload/do_upload');?> 
		
      <form action = "" method = "">
         <input type = "file" name = "userfile" size = "20" /> 
         <br /><br /> 
         <input type = "submit" value = "upload" /> 
      </form> 
		
   </body>
	
</html>
复制下面给出的代码并将其存储在application/view/Upload_success.php
<html>
 
   <head> 
      <title>Upload Form</title> 
   </head>
	
   <body>  
      <h3>Your file was successfully uploaded!</h3>  
		
      <ul> 
         <?phpforeach ($upload_data as $item => $value):?> 
         <li><?php echo $item;?>: <?php echo $value;?></li> 
         <?phpendforeach; ?>
      </ul>  
		
      <p><?php echo anchor('upload', 'Upload Another File!')