CodeIgniter 基本概念
控制器是一个简单的类文件。顾名思义,它通过 URI 控制整个应用程序。
创建控制器
首先,进入application/controllers文件夹,你会在那里看到两个文件,index.html和Welcome.php。
保持这些文件原样,在同一路径下创建一个名为“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” 作为方法名称,在控制器名称之后“test”在 URI 中。
要记住的要点
控制器类的名称必须以大写字母开头;
控制器必须用小写字母调用;
不要使用与父类相同的方法名称,因为它会覆盖父类的功能。
视图(Views)
这可以是简单或复杂的网页,可由控制器调用。网页可能包含页眉、页脚、侧边栏等。不能直接调用视图。让我们创建一个简单的视图。在下创建一个新文件application/views与名字“test.php”并将下面给定的代码复制到该文件中。
<!DOCTYPE html> <html lang = "en"> <head> <meta charset = "utf-8"> <title>CodeIgniter View 例子</title> </head> <body> CodeIgniter View 例子 </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'); } } ?>
下面是上面代码的输出:
下面的流程图说明了一切是如何工作的:
模型(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-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)
顾名思义,它将帮助你构建系统,它被分成小功能以提供不同的功能。
助手通常保存在你的 system/helpers 或者 application/helpers 目录,自定义助手保存在 application/helpers 目录和系统的助手保存在 system/helpers 目录。 无论是自定义的还是系统的助手,在使用之前都必须加载。
序号 | 助手和描述 |
---|---|
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 Email Helper提供了一些处理电子邮件的辅助功能。如需更强大的电子邮件解决方案,请参阅 CodeIgniter 的电子邮件类。 |
8 | File Helper File Helper 文件包含有助于处理文件的函数。 |
9 | Form Helper Form Helper 文件包含帮助处理表单的函数。 |
10 | HTML 助手 HTML Helper 文件包含有助于处理 HTML 的函数。 |
11 | Inflector Helper Inflector Helper 文件包含允许你将单词更改为复数、单数、驼峰式大小写等的功能。 |
12 | Language Helper 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 Helper 文件包含有助于处理 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/
第一段表示应该被调用的控制器类。
第二段表示应该调用的类函数或方法。
第三段,以及任何其他段,表示 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数组的key使用正则表达式。如果任何URI与正则表达式相匹配,那么它将被路由到设置在$route数组的值部分。
$route['products/([a-z]+)/(\d+)']='$1/id_$2';
在上面的示例中,类似于 products/shoes/123 的 URI 将改为调用“shoes”控制器类和“id_123“ 方法。