`

CodeIgniter用户指南:控制器

阅读更多

 

控制器是应用程序的心脏,因为它们决定如何处理 HTTP 请求。

什么是控制器?

简而言之,一个控制器就是一个类文件,是以一种能够和 URI 关联在一起的方式来命名的。

假设这个 URI:

example.com/index.php/blog/

在上面的例子中,CodeIgniter 将尝试寻找并装载一个名为 blog.php 的控制器。

当控制器的名字匹配 URI 的第一段时,它将被装载。

让我们试试看:  你好,世界!

我们来创建一个简单的控制器,以便更直观地了解其工作原理。使用你的文本编辑器,创建一个名为 blog.php 的文件,然后输入下列代码:

然后保存文件到 application/controllers/ 文件夹。

现在使用类似这样的 URL 访问你的站点:

example.com/index.php/blog/

如果你做的没错,你应该看到你好,世界!.

注意:类名必须以大写字母开头。换句话说,这是有效的:

<?php
class Blog extends Controller {

}
?>

这是无效的:

<?php
class blog extends Controller {

}
?>

同时,始终确保你的控制器扩展自父控制器类,以便它能够继承其所有的方法。

方法

上面的例子中用到的方法名是 index()。如果 URI 的第二部分为空的话,会默认载入 “index” 方法。也可以将地址写成这样来访问 “Hello World”:

example.com/index.php/blog/index/

URI 的第二部分是用来决定调用控制器中哪个方法的。

我们再来试试。在你的控制器中加入一个新的方法:

现在在地址栏中输入下面的内容来访问 comments 方法:

example.com/index.php/blog/comments/

你应该看到新的信息了:Look at this!

将 URI 片段传递给方法

如果你的 URI 超过两个部分,那么超过的将被作为参数传递给方法。

举例来说,如果你的 URI 是这样的:

example.com/index.php/products/shoes/sandals/123

URI 的第3和第4部分会被传递给你的方法(“sandals” 和 “123”):

<?php
class Products extends Controller {

    function shoes($sandals, $id)
    {
        echo $sandals;
        echo $id;
    }
}
?>

上面的方法调用时必须给两个相应的参数,要不然会出错。当然你也可以像下面这样写,就不用在调用的时候给参数了!

<?php
class Products extends Controller {

    function shoes($sandals='Test', $id=1)
    {
        echo $sandals;
        echo $id;
    }
}
?>

注意:如果你使用 URI 路由特性,则传递到方法中的 URI 片段将被重新路由一次。

定义默认控制器

当你的网站没有设置 URI 或者直接从根目录访问的时候,CodeIgniter 会加载默认控制器。打开 application/config/routes.php 文件来设置默认控制器:

$route['default_controller'] = 'Blog';

这里的 Blog 就是你希望使用的控制器的名字。如果此时你不指定任何 URI 片段来访问你的主页就会看到默认的“Hello World”信息。

重新定义方法的调用规则

如上所述,URI 的第二片段决定会调用控制器中的哪个方法。CodeIgniter 允许你使用 _remap() 方法来废除这种规则:

function _remap()
{
    // Some code here...
}

注意:如果你的控制器中包含一个名为 _remap() 的方法,那么不管你的 URI 中包含什么,它总会被忽略掉。这个方法会废除掉由 URI 片段来决定哪个方法被调用的规则,允许你重新定义调用方法的规则(方法的路由规则)。

被重新定义的方法调用方式(一般是 URI 中的第二片段)将作为一个参数传递给 _remap()

function _remap($method)
{
    if ($method == 'some_method')
    {
        $this->$method();
    }
    else
    {
        $this->comments();
    }
}

你可以这样理解上面的方法:当 $method 等于你定义的参数时程序执行一个特殊的操作,这里可以灵活运用。如下面的方法如果参数等于 c 就调用 comments,否则就调用用户输入的方法

function _remap($method)
{
    if ($method == 'c')
    {
        $this->$comment();
    }
    else
    {
        $this->method();
    }
}

处理输出

CodeIgniter 拥有一个输出类用来确保你修改的数据会自动被传递给浏览器。关于这个的更多信息可以在视图输出类里找到。有些时候,你可能想要自己发布修改一些最终的数据或是自己把它传递给浏览器。CodeIgniter 允许你给你的控制器增加一个名为 _output() 的方法来接收最终的数据。

注意: 如果你的控制器包含一个 _output() 方法,那么它将总是被调用,而不是直接输出最终的数据。这个方法类似于OO里的析构函数,不管你调用任何方法这个方法总是会被执行。

例如:

function _output()
{
    echo 'I am here';
}

请注意,你的 _output() 将接收最终的数据。 Benchmark and memory usage data will be rendered, cache files written (if you have caching enabled), and headers will be sent (if you use that feature) before it is handed off to the _output() function. If you are using this feature the page execution timer and memory usage stats might not be perfectly accurate since they will not take into acccount any further processing you do. For an alternate way to control output before any of the final processing is done, please see the available methods in the Output Class.

私有方法

在某些情况下,你可能想要隐藏一些方法使之无法对外查阅。将方法私有化很简单,只要在方法名字前面加一个下划线(“_”)做前缀就无法通过 URL 访问到了。例如,如果你有一个像这样的方法:

function _utility()
{
  // some code
}

那么,通过下面这样的 URL 进行访问是无法访问到的:

example.com/index.php/blog/_utility/

如何将控制器放入子文件夹中

如果你在建立一个大型的应用程序,你会发现 CodeIgniter 可以很方便的将控制器放到一些子文件夹中。

只要在 application/controllers 目录下创建文件夹并放入你的控制器就可以了。

注意:  如果你要使用某个子文件夹下的功能,就要保证 URI 的第一个片段是用于描述这个文件夹的。例如说你有一个控制器在这里:

application/controllers/products/shoes.php

调用这个控制器的时候你的 URI 要这么写:

example.com/index.php/products/shoes/show/123

你的每个子文件夹中需要包含一个默认的控制器,这样如果 URI 中只有子文件夹而没有具体功能的时候它将被调用。只要将你作为默认的控制器名称在 application/config/routes.php 文件中指定就可以了。

CodeIgniter 也允许你使用 URI 路由 功能来重新定向 URI。

构造函数

如果要在你的任意控制器中使用构造函数的话,那么必须在里面加入下面这行代码:

parent::Controller();

这行代码的必要性在于,你此处的构造函数会覆盖掉这个父控制器类中的构造函数,所以我们要手动调用它。

如果你对构造函数不熟悉可以看这里,在 PHP 4 中,一个构造函数就是一个拥有和类名完全相同的名字的简单函数:

<?php
class Blog extends Controller {

       function Blog()
       {
            parent::Controller();
       }
}
?>

在 PHP 5 中,构造函数的语法是这样的:

<?php
class Blog extends Controller {

       function __construct()
       {
            parent::Controller();
       }
}
?>

如果你需要设定某些默认的值或是在实例化类的时候运行一个默认的程序,那么构造函数在这方面就非常有用了。
构造函数并不能返回值,但是可以用来设置一些默认的功能。

已保留的方法名称

因为你添加的控制器类继承了主要的应用程序控制器,所以你要小心你的方法名不要和那个类中的方法名一样了,否则你的方法会覆盖原有的。详细信息请查看保留字部分。

就这样了!

OK,总的来说,这就是关于控制器的所有内容了。

 

翻译贡献者: 34333432, Hex, irini, longjianghu
分享到:
评论

相关推荐

    codeigniter用户指南 pdf

    用户指南会解释如何创建和使用模型、视图和控制器。 **五、路由** CodeIgniter的路由功能允许你自定义URL结构,使它们更友好且易于理解。你可以通过配置路由规则来指定请求应如何被映射到控制器方法。 **六、URI...

    CodeIgniter 用户指南 版本 2.1.4

    ### CodeIgniter 用户指南 版本 2.1.4 #### CodeIgniter 概述与特点 **CodeIgniter** 是一款基于 PHP 的轻量级应用开发框架,旨在简化 Web 开发流程并提高开发效率。它采用了 Model-View-Controller (MVC) 架构...

    CodeIgniter最新版用户指南 1.7.1

    4. **控制器(Controllers)**:控制器是应用的主要组成部分,它们处理用户请求,调用模型和视图,控制应用程序流程。 5. **模型(Models)**:模型封装了与数据库交互的逻辑,处理数据的存取,可以视为业务逻辑层...

    CodeIgniter用户指南(版本1.7.2).chm

    首先,让我们了解一下CodeIgniter的MVC(模型-视图-控制器)架构。这个模式将应用程序分为三个主要部分:模型处理数据,视图负责展示,而控制器协调这两个组件。这种分离使得代码更易于管理和维护,同时也提高了代码...

    CodeIgniter 用户指南

    在MVC模式中,**控制器(Controller)**扮演着核心角色,它负责接收用户请求,与模型(Model)交互获取数据,然后将数据传递给视图(View)进行渲染和展示。在描述中提到,我们需要创建一个处理静态内容请求的控制器...

    codeigniter-user:用于代码点火器的用户身份验证库,旨在简单而强大

    本教程意味着您具有诸如库和控制器之类的代码点火器机制的基本概念。 将数据库schema.v1.3.sql和数据库schema.v1.4.sql导入到数据库中。 将库复制到您的application / libraries文件夹中。 它包括和codeigniter-...

    codeigniter_auth:具有身份验证和引导程序的codeigniter种子项目

    - `application/`:CodeIgniter的核心目录,包含了配置、控制器、模型、视图和其他应用组件。 - `config/`:存放配置文件,如数据库连接和路由设置。 - `controllers/`:包含各个控制器文件,如Auth.php用于处理...

    CodeIgniter2.1.4中文手册(HTML离线版)

    5. **路由**:CodeIgniter的路由机制允许用户自定义URL结构,将请求映射到特定的控制器方法。 6. **控制器(Controllers)**:控制器是MVC中的关键部分,它们处理用户输入并调用模型和视图。手册会详细解释如何创建...

    codeigniter 2.0 中文手册

    1. **控制器(Controller)**:CodeIgniter中的控制器是应用程序的入口点,负责接收用户请求并调用模型和视图来处理数据和展示结果。控制器类是PHP类,它们扩展了CI_Controller基类,通过定义方法来处理不同的URL路由...

    codeigniter-vue:CodeIgniter + VueJs-准备部署新项目

    1. **app** - 包含CodeIgniter的控制器、模型、视图等核心文件。 2. **public** - 通常包含静态资源,如CSS样式表、JavaScript文件和图片,Vue.js编译后的代码可能放在这里。 3. **resources** - 可能包含Vue.js的...

    CodeIgniter_2.0.0.zip

    1. MVC架构:CodeIgniter遵循模型-视图-控制器(MVC)设计模式,这是一种常见的软件开发架构,它将业务逻辑、数据处理和用户界面分离,使代码更易于维护和扩展。 2. 轻量级:CodeIgniter以其小而快著称,其核心系统...

    CodeIgniter 2.2.2 中文文档 CI2.2.2中文文档

    3. **控制器(Controllers)**:控制器是应用程序的核心,负责处理用户请求并调用模型和视图。理解如何创建和使用控制器对于构建MVC(模型-视图-控制器)架构至关重要。 4. **模型(Models)**:模型负责处理数据逻辑,...

    CodeIgniter2-stable-user_guide

    10. **安全最佳实践**:用户指南会讲解如何确保应用程序的安全性,包括防止SQL注入、XSS攻击、CSRF攻击,以及如何使用CodeIgniter的认证和授权功能。 11. **缓存(Caching)**:为了提高性能,CodeIgniter支持多种...

    codeigniter-sekulonlen:由CodeIgniter 4和Bootstrap 5构建的学习管理系统

    1. **模型-视图-控制器架构**:CodeIgniter 4遵循MVC模式,将业务逻辑(模型)、数据展示(视图)和用户交互(控制器)分离,提高了代码的可维护性和可扩展性。 2. **安全措施**:内置的安全特性如输入过滤、XSS防御...

    CodeIgniter2.0中文手册.zip

    1. MVC架构:CodeIgniter遵循模型-视图-控制器(MVC)设计模式,使开发者能够清晰地分离业务逻辑、数据处理和用户界面。模型处理数据,视图负责展示,而控制器作为两者之间的桥梁,协调请求与响应。 2. 资源管理:...

    CodeIgniter-CI框架-指南 初学必读

    3. **控制器**:作为模型和视图的中介,接收用户请求,调用模型处理数据,然后将结果传递给视图进行展示。 **三、CodeIgniter 的安装与配置** 安装CodeIgniter通常涉及下载框架的ZIP文件,解压后上传到服务器的Web...

    codeigniter中文手册教程

    10. **用户指南**: CodeIgniter的官方用户指南详尽地解释了框架的每个部分,是初学者入门和进阶开发者深入理解的宝贵资源。 在你提供的`CI_user_guide`中,你可以期待找到关于以上所有知识点的详细介绍,以及更多...

    codeigniter 代码实例分享

    4. **system**:CodeIgniter的核心系统文件夹,包含框架的各种组件,如控制器、模型、视图、库、助手函数等。开发者不应直接修改此文件夹中的内容,除非完全了解其内部结构。 5. **.settings**:这可能是一个...

    [其他类别]CodeIgniter 开源PHP框架 1.7.1_codeigniter_1.7.1.zip

    1. MVC架构:Model-View-Controller模式是CodeIgniter的基础,它将业务逻辑(模型)、用户界面(视图)和应用程序控制(控制器)分离,使代码更易于管理和维护。 2. 数据库支持:CodeIgniter支持多种数据库系统,...

    基于codeigniter的CMS系统

    - **MVC模式**:CodeIgniter遵循模型-视图-控制器(MVC)架构模式,有助于分离业务逻辑、数据处理和用户界面。 - **路由**:了解如何定义和管理路由规则,将URL映射到相应的控制器和方法。 - **数据库操作**:使用...

Global site tag (gtag.js) - Google Analytics