基本概念(Basic Concepts)
控制器(Controllers)
控制器是一个简单的类文件。 顾名思义,它通过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的内置类。 每当您想要创建自己的Controller类时,必须扩展此类。
呼叫控制器
上面的控制器可以通过URI调用,如下所示 -
http://www.your-domain.com/index.php/test
请注意index.php之后的上述URI中的“ test ”一词。 这表示控制器的类名。 由于我们给出了控制器“ Test ”的名称,我们在index.php之后写了“ test ”。 类名必须以uppercase letter但是当我们通过URI调用该控制器时,我们需要写lowercase letter 。 调用控制器的一般语法如下 -
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 ”。
![指数输出](https://imgs.xnip.cn/cj/docimg/536/a96cede7-8e88-4085-ba66-b79dc7307605.jpg)
访问浏览器中的第二个URI,我们得到相同的输出,如上图所示。 在这里,我们在URI中的控制器名称之后传递了方法的名称。 由于方法的名称是“ index ”,我们得到相同的输出。
访问浏览器中的第三个URI,我们得到如下图所示的输出。 正如您所看到的,我们获取方法“ hello ”的输出,因为我们已经在URI中的控制器“ test ”的名称之后传递了“ hello ”作为方法名称。
![你好输出](https://imgs.xnip.cn/cj/docimg/536/249de9ef-b0c9-485f-9346-329e74b97e86.jpg)
注意事项 (Points to Remember)
控制器类的名称必须以大写字母开头。
必须使用小写字母调用控制器。
不要使用与父类相同的方法名称,因为它将覆盖父类的功能。
Views
这可以是简单或复杂的网页,可以由控制器调用。 网页可能包含页眉,页脚,侧边栏等。无法直接调用视图。 让我们创建一个简单的视图。 在名为“ test.php ”的application/views下创建一个新文件,并将下面给出的代码复制到该文件中。
<!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');
}
}
?>
以下是上述代码的输出 -
![测试输出](https://imgs.xnip.cn/cj/docimg/536/a67065d0-9aa5-4267-a623-82e798bf8bfa.jpg)
以下流程图说明了一切如何运作 -
![流程图](https://imgs.xnip.cn/cj/docimg/536/9de804c0-1537-4621-a2b7-a5cc0f148f15.jpg)
Models
模型类旨在处理数据库中的信息。 例如,如果您使用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-loading Models
在某些情况下,您可能需要在整个应用程序中使用某些模型类。 在这种情况下,如果我们自动加载它会更好。
/*
| ---------------------------------------------------------------
| 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();
如上图所示,在要自动加载的数组中传递模型的名称,它将自动加载,而系统处于初始化状态,可在整个应用程序中访问。
Helpers
顾名思义,它将帮助您构建系统。 它分为小功能以提供不同的功能。 CodeIgniter中提供了许多帮助程序,如下表所示。 我们也可以建立自己的帮手。
助手通常存储在您的system/helpers application/helpers directory或application/helpers directory 。 自定义助手存储在application/helpers目录中,系统助手存储在system/helpers目录中。 CodeIgniter将首先在您的application/helpers directory查找。 如果目录不存在或找不到指定的帮助程序,则CodeIgniter将查找全局system/helpers/directory 。 每个帮助程序(无论是自定义程序还是系统帮助程序)都必须在使用之前加载。
SN | 助手名称和描述 |
---|---|
1 | Array Helper Array Helper文件包含有助于使用数组的函数。 |
2 | CAPTCHA Helper CAPTCHA Helper文件包含有助于创建CAPTCHA图像的功能。 |
3 | Cookie Helper Cookie Helper文件包含有助于使用Cookie的功能。 |
4 | Date Helper Date Helper文件包含可帮助您处理日期的功能。 |
5 | Directory Helper Directory Helper文件包含有助于处理目录的函数。 |
6 | Download Helper Download Helper允许您将数据下载到桌面。 |
7 | Email Helper 电子邮件帮助程序为使用电子邮件提供了一些辅助功能。 有关更强大的电子邮件解决方案,请参阅CodeIgniter的电子邮件类。 |
8 | File Helper File Helper文件包含有助于处理文件的函数。 |
9 | Form Helper Form Helper文件包含有助于处理表单的函数。 |
10 | HTML Helper HTML Helper文件包含有助于使用HTML的函数。 |
11 | Inflector Helper Inflector Helper文件包含的功能允许您将单词更改为复数,单数,驼峰等。 |
12 | Language Helper 语言助手文件包含有助于处理语言文件的功能。 |
13 | Number Helper Number Helper文件包含可帮助您处理数字数据的函数。 |
14 | Path Helper Path Helper文件包含允许您使用服务器上的文件路径的功能。 |
15 | Security Helper Security Helper文件包含与安全相关的功能。 |
16 | Smiley Helper Smiley Helper文件包含可以管理表情符号(表情符号)的功能。 |
17 | String Helper String Helper文件包含有助于处理字符串的函数。 |
18 | Text Helper Text Helper文件包含有助于处理文本的函数。 |
19 | Typography Helper Typography Helper文件包含的功能可帮助您以语义相关的方式格式化文本。 |
20 | URL Helper URL帮助程序文件包含有助于处理URL的函数。 |
21 | XML Helper XML Helper文件包含有助于处理XML数据的函数。 |
加载助手
可以加载帮助程序,如下所示 -
$this->load->helper('name');
其中name是帮助程序的名称。 例如,如果要加载URL Helper,则可以将其加载为 -
$this->load->helper('url');
路由 (Routing)
CodeIgniter具有用户友好的URI路由系统,因此您可以轻松地重新路由URL。 通常,URL字符串与其对应的控制器类/方法之间存在一对一的关系。 URI中的段通常遵循此模式 -
your-domain.com/class/method/id/
第first segment表示应该调用的控制器类。
second segment表示应该调用的类函数或方法。
third和任何其他段表示ID和将传递给控制器的任何变量。
在某些情况下,您可能希望更改此默认路由机制。 CodeIgniter提供了一些工具,您可以通过它来设置自己的路由规则。
自定义路由规则
有一个特定的文件,您可以处理所有这些。 该文件位于application/config/routes.php。 您将找到一个名为$ route的数组,您可以在其中自定义路由规则。 $ route数组中的键将决定路由的内容,值将决定路由的位置。 CodeIgniter中有三条保留路由。
SN | 预留路由和描述 |
---|---|
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段中的下划线自动替换短划线(' - '),从而在需要时节省其他路径条目。 这是必需的,因为破折号不是有效的类或方法名称字符,如果您尝试使用它,将导致致命错误。 |
路由可以通过wildcards或使用regular expressions进行自定义,但请记住,这些自定义的路由规则必须遵循保留规则。
通配符(Wildcards)
我们可以使用两个通配符,如下所述 -
(:num) - 它将匹配仅包含数字的段。
(:any) - 它将匹配包含任何字符的段。
Example
$route['product/:num']='catalog/product_lookup';
在上面的例子中,如果在URL的第一段中找到文字“product”,并且在第二段中找到一个数字,则使用“catalog”类和“product_lookup”方法。
常用表达
像通配符一样,我们也可以在$route array key使用正则表达式。 如果任何URI与正则表达式匹配,则它将路由到设置为$ route数组的值部分。
Example
$route['products/([a-z]+)/(\d+)']='$1/id_$2';
在上面的示例中,类似于products/shoes/123的URI将改为调用“ shoes ”控制器类和“ id_123 ”方法。