基本概念(Basic Concepts)

优质
小牛编辑
136浏览
2023-12-01

控制器(Controllers)

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

创建一个控制器

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

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

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

指数输出

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

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

你好输出

注意事项 (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'); 
      } 
   } 
?>

以下是上述代码的输出 -

测试输出

以下流程图说明了一切如何运作 -

流程图

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 directoryapplication/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 ”方法。