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 的内置类。每当您想创建自己的 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"的输出,因为我们在控制器名称" test"在 URI 中。

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 编码存储在 下的"test.php"文件中>application/views/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 中提供了许多帮助程序,如下表所示。我们也可以构建自己的助手。

Helper 通常存储在您的 system/helpersapplication/helpers 目录中。自定义助手存储在 application/helpers 目录中,系统的助手存储在 system/helpers 目录中。 CodeIgniter 将首先查看您的 application/helpers 目录。如果该目录不存在或未找到指定的帮助程序,CodeIgniter 将改为查找您的全局 system/helpers/目录。每个helper,无论是自定义的还是系统的helper,在使用前都必须加载。

名称和描述

Array Helper

Array Helper 文件包含有助于处理数组的函数。

CAPTCHA Helper

CAPTCHA Helper 文件包含有助于创建 CAPTCHA 图像的功能。

Cookie Helper

Cookie Helper 文件包含帮助处理 cookie 的函数。

Date Helper

Date Helper 文件包含帮助您处理日期的函数。

Directory Helper

Directory Helper 文件包含有助于处理目录的函数。

Download Helper

Download Helper可让您将数据下载到桌面。

Email Helper

Email Helper 提供了一些使用电子邮件的辅助功能。如需更强大的电子邮件解决方案,请参阅 CodeIgniter 的电子邮件类。

File Helper

File Helper 文件包含有助于处理文件的函数。

Form Helper

Form Helper 文件包含帮助处理表单的函数。

HTML Helper

HTML Helper 文件包含有助于处理 HTML 的函数。

Inflector Helper

Inflector Helper 文件包含允许您将单词更改为复数、单数、驼峰式等的功能。

Language Helper

Language Helper 文件包含有助于处理语言文件的函数。

Number Helper

Number Helper 文件包含帮助您处理数字数据的函数。

Path Helper

Path Helper 文件包含允许您使用服务器上的文件路径的函数。

Security Helper

Security Helper 文件包含安全相关的功能。

Smiley Helper

Smiley Helper 文件包含可让您管理笑脸(表情符号)的功能。

String Helper

String Helper 文件包含有助于处理字符串的函数。

Text Helper

Text Helper 文件包含有助于处理文本的函数。

Typography Helper

Typography Helper 文件包含的函数可以帮助您以语义相关的方式格式化文本。

URL Helper

URL Helper 文件包含有助于处理 URL 的函数。

XML Helper

XML Helper 文件包含有助于处理 XML 数据的函数。

加载助手

可以如下所示加载帮助程序:

$this->load->helper('name');

其中 name 是助手的名称。例如,如果你想加载 URL Helper,那么它可以加载为:

$this->load->helper('url');

路由

CodeIgniter 具有用户友好的 URI 路由系统,让您可以轻松地重新路由 URL。通常,URL 字符串与其对应的控制器类/方法之间存在一对一的关系。 URI 中的段通常遵循此模式:

your-domain.com/class/method/id/
  • 第一段代表应该被调用的控制器类。
  • 第二段表示应该调用的类函数或方法。
  • 第三个和任何其他段,代表 ID 和将传递给控制器​​的任何变量。

在某些情况下,您可能希望更改此默认路由机制。 CodeIgniter 提供了工具,您可以通过它来设置自己的路由规则。

自定义路由规则

有一个特定的文件可以处理所有这些。该文件位于 application/config/routes.php。您将找到一个名为 $route 的数组,您可以在其中自定义路由规则。 $route 数组中的键将决定路由的内容,值将决定路由的位置。 CodeIgniter 中保留了三个路由。

Reserved Routes & Description

$route['default_controller']

这个路由指示应该加载哪个控制器类,如果URI不包含数据,这将是这种情况人们加载您的根 URL。鼓励您使用默认路由,否则默认情况下会出现 404 页面。我们可以在此处设置网站首页,以便默认加载。

$route['404_override']

此路由指示如果未找到请求的控制器,应加载哪个控制器类。它将覆盖默认的 404 错误页面。它不会影响 show_404() 函数,该函数将继续加载 中的默认 error_404.php 文件application/views/errors/error_404.php.

$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"方法。

下一章:CodeIgniter 配置

 设置好站点后,接下来要做的就是配置站点。 application/config 文件夹包含一组用于设置站点基本配置的文件。 配置基本 URL站点的基本 URL 可以在 applicatio ...