CodeIgniter - 基本概念



控制器

控制器是一个简单的类文件。顾名思义,它通过 URI 控制整个应用程序。

创建控制器

首先,转到application/controllers文件夹。您将在那里找到两个文件,index.htmlWelcome.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."; 
      } 
   } 
?>

我们可以通过以下三种方式执行上述控制器 -

在浏览器中访问第一个 URI 后,我们得到如下所示的输出。正如您所看到的,我们得到了“index”方法的输出,即使我们没有在 URI 中传递方法的名称。我们只在 URI 中使用了控制器名称。在这种情况下,CodeIgniter 调用默认方法“index”。

Index output

在浏览器中访问第二个 URI,我们得到与上图相同的输出。在这里,我们在 URI 中控制器名称之后传递了方法的名称。由于方法的名称是“index”,因此我们得到了相同的输出。

在浏览器中访问第三个 URI,我们得到如下所示的输出。正如您所看到的,我们得到了“hello”方法的输出,因为我们在 URI 中控制器名称“test”之后传递了“hello”作为方法名称。

Hello Output

需要记住的要点

  • 控制器类的名称必须以大写字母开头。

  • 控制器必须以小写字母调用。

  • 不要使用与父类相同的方法名称,因为它会覆盖父类的方法。

视图

这可以是一个简单或复杂的网页,可以通过控制器调用。网页可能包含标题、页脚、侧边栏等。视图不能直接调用。让我们创建一个简单的视图。在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'); 
      } 
   } 
?>

以下是上述代码的输出 -

Test output

下图说明了所有内容的工作原理 -

Flow Chart

模型

模型类旨在处理数据库中的信息。例如,如果您使用 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/helpersapplication/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”方法。

广告

© . All rights reserved.