- CodeIgniter 教程
- CodeIgniter - 首页
- CodeIgniter - 概述
- CodeIgniter - 安装 CodeIgniter
- CodeIgniter - 应用程序架构
- CodeIgniter - MVC 框架
- CodeIgniter - 基本概念
- CodeIgniter - 配置
- CodeIgniter - 使用数据库
- CodeIgniter - 库
- CodeIgniter - 错误处理
- CodeIgniter - 文件上传
- CodeIgniter - 发送邮件
- CodeIgniter - 表单验证
- CodeIgniter - 会话管理
- CodeIgniter - 闪存数据
- CodeIgniter - 临时数据
- CodeIgniter - Cookie 管理
- CodeIgniter - 常用函数
- CodeIgniter - 页面缓存
- CodeIgniter - 页面重定向
- CodeIgniter - 应用程序性能分析
- CodeIgniter - 基准测试
- CodeIgniter - 添加 JS 和 CSS
- CodeIgniter - 国际化
- CodeIgniter - 安全性
- CodeIgniter 有用资源
- CodeIgniter - 快速指南
- CodeIgniter - 有用资源
- CodeIgniter - 讨论
CodeIgniter - 基本概念
控制器
控制器是一个简单的类文件。顾名思义,它通过 URI 控制整个应用程序。
创建控制器
首先,转到application/controllers文件夹。您将在那里找到两个文件,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”作为方法名称。
需要记住的要点
控制器类的名称必须以大写字母开头。
控制器必须以小写字母调用。
不要使用与父类相同的方法名称,因为它会覆盖父类的方法。
视图
这可以是一个简单或复杂的网页,可以通过控制器调用。网页可能包含标题、页脚、侧边栏等。视图不能直接调用。让我们创建一个简单的视图。在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 辅助函数 CAPTCHA 辅助函数文件包含有助于创建 CAPTCHA 图像的函数。 |
| 3 | Cookie 辅助函数 Cookie 辅助函数文件包含有助于处理 Cookie 的函数。 |
| 4 | 日期辅助函数 日期辅助函数文件包含帮助您处理日期的函数。 |
| 5 | 目录辅助函数 目录辅助函数文件包含有助于处理目录的函数。 |
| 6 | 下载辅助函数 下载辅助函数允许您将数据下载到您的桌面上。 |
| 7 | 电子邮件辅助函数 电子邮件辅助函数提供了一些辅助函数来处理电子邮件。有关更强大的电子邮件解决方案,请参阅 CodeIgniter 的电子邮件类。 |
| 8 | 文件辅助函数 文件辅助函数文件包含有助于处理文件的函数。 |
| 9 | 表单辅助函数 表单辅助函数文件包含有助于处理表单的函数。 |
| 10 | HTML 辅助函数 HTML 辅助函数文件包含有助于处理 HTML 的函数。 |
| 11 | Inflector 辅助函数 Inflector 辅助函数文件包含允许您将单词更改为复数、单数、驼峰式大小写等的函数。 |
| 12 | 语言辅助函数 语言辅助函数文件包含有助于处理语言文件的函数。 |
| 13 | 数字辅助函数 数字辅助函数文件包含帮助您处理数字数据的函数。 |
| 14 | 路径辅助函数 路径辅助函数文件包含允许您处理服务器上文件路径的函数。 |
| 15 | 安全辅助函数 安全辅助函数文件包含与安全相关的函数。 |
| 16 | 表情辅助函数 表情辅助函数文件包含允许您管理表情符号(表情)的函数。 |
| 17 | 字符串辅助函数 字符串辅助函数文件包含有助于处理字符串的函数。 |
| 18 | 文本辅助函数 文本辅助函数文件包含有助于处理文本的函数。 |
| 19 | 排版辅助函数 排版辅助函数文件包含帮助您以语义相关的方式格式化文本的函数。 |
| 20 | URL 辅助函数 URL 辅助函数文件包含有助于处理 URL 的函数。 |
| 21 | XML 辅助函数 XML 辅助函数文件包含有助于处理 XML 数据的函数。 |
加载辅助函数
辅助函数可以按如下方式加载 -
$this->load->helper('name');
其中 name 是辅助函数的名称。例如,如果您要加载 URL 辅助函数,则可以按如下方式加载 -
$this->load->helper('url');
路由
CodeIgniter 具有用户友好的 URI 路由系统,以便您可以轻松地重新路由 URL。通常,URL 字符串与其对应的控制器类/方法之间存在一对一的关系。URI 中的段通常遵循以下模式 -
your-domain.com/class/method/id/
第一段表示应调用的控制器类。
第二段表示应调用的类函数或方法。
第三段以及任何其他段表示将传递给控制器的 ID 和任何变量。
在某些情况下,您可能希望更改此默认路由机制。CodeIgniter 提供了一个功能,您可以通过它设置自己的路由规则。
自定义路由规则
有一个特定的文件可以处理所有这些。该文件位于 application/config/routes.php。您会找到一个名为 $route 的数组,您可以在其中自定义路由规则。$route 数组中的键将决定路由什么,而值将决定路由到哪里。CodeIgniter 中有三个保留路由。
| 序号 | 保留路由及说明 |
|---|---|
| 1 | $route['default_controller'] 此路由指示如果 URI 不包含任何数据,则应加载哪个控制器类,当用户加载根 URL 时,就会出现这种情况。建议您设置默认路由,否则默认情况下将显示 404 页面。我们可以在此处设置网站的首页,以便默认加载。 |
| 2 | $route['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”方法。