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"的输出,因为我们已将"hello"作为方法名称传递,位于 URI 中的控制器"test"名称之后。

要点
控制器类的名称必须以大写字母开头。
控制器必须以小写字母调用。
不要使用与父类相同的方法名称,因为它将覆盖父类的功能。
视图
这可以是简单或复杂的网页,可由控制器调用。网页可能包含页眉、页脚、侧边栏等。视图无法直接调用。让我们创建一个简单的视图。在 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/ 目录。每个帮助程序(无论是自定义帮助程序还是系统帮助程序)都必须在使用前加载。
S.N. | 助手名称 &描述 |
---|---|
1 | 数组助手 数组助手文件包含可帮助处理数组的函数。 |
2 | CAPTCHA 助手 CAPTCHA 助手文件包含可帮助创建 CAPTCHA 图像的函数。 |
3 | Cookie 助手 Cookie 助手文件包含可帮助处理 cookie 的函数。 |
4 | 日期助手 日期助手文件包含可帮助您处理的函数日期。 |
5 | 目录助手 目录助手文件包含协助处理目录的功能。 |
6 | 下载助手 下载助手可让您将数据下载到桌面。 |
7 | 电子邮件助手 电子邮件助手提供了一些用于处理电子邮件的辅助功能。有关更强大的电子邮件解决方案,请参阅 CodeIgniter 的电子邮件类。 |
8 | 文件助手 文件助手文件包含协助处理文件的函数。 |
9 | 表单助手 表单助手文件包含协助处理表单的函数。 |
10 | HTML 助手 HTML 助手文件包含协助处理 HTML 的函数。 |
11 | 变形器助手 变形器辅助文件包含允许您将单词更改为复数、单数、驼峰式大小写等的函数。 |
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 中有三种保留路由。
S.N. | 保留路由和说明 |
---|---|
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 array key 部分中使用正则表达式。如果任何 URI 与正则表达式匹配,则它将被路由到 $route 数组中设置的值部分。
示例
$route['products/([a-z]+)/(\d+)']='$1/id_$2';
在上面的例子中,类似于 products/shoes/123 的 URI 将调用"shoes"控制器类和"id_123"方法。