CodeIgniter 用户手册:controllers(CI 2)

作者 FarLee 2010年5月9日 23:06:00   ‖浏览(7,543)

CodeIgniter 用户手册 CI 1中介绍了CI这个PHP MVC 框架的大致情况,花了一个周末的空闲时间将CodeIgniter 的General topics 和Class reference 看了一遍。这里将用户手册中个人觉得是精华的部分记录一下,比如CodeIgniter 的控制器Controller。

CodeIgniter URL

Controllers 是应用程序的核心,他们决定了如何处理HTTP 请求。在讨论CodeIgniter Controllers之前,有必要先了解一下CI 的URL或URI。CI的url默认是不带有“?”和查询字符串、这有利于SEO。当然也可以启用标准的带有?和查询字符串的url,如:

index.php?c=products&m=view&id=345

设置方法是在application/config.php文件中设置

$config['enable_query_strings'] = FALSE;    // FALSE 改为TRUE 即可
$config['controller_trigger'] =  'c';
$config['function_trigger'] = 'm';

下面看下CodeIgniter 的url 组成:example.com/class/function/ID

  • 上面的URL中的URI 字段中第一部分class 代表将要引入的控制器类(Controller class);
  • 第二部分function代表类中调用的函数或方法(class function / method);
  • 第三部分ID 代表需要传递给controller的ID 或其他任何变量。

WordPress url 重写一样,我们也可以通过设置.htaccess文件很简单地去掉url 中的 index.php。

CodeIgniter Controller 和 URI /URL

CI中一个形如 example.com/index.php/blog/ 的URL,当在浏览器中发送这个HTTP 请求时,Controller 会首先在application/controller/ 文件夹中寻找blog.php文件,该文件中会有一个类Class Blog 指明控制器如何处理,即上面提到的URI 中第一部分。

如blog.php中有如下代码:

<?php
class Blog extends Controller {

function index()
{
echo 'Hello World!';
}

function comments()
{
echo 'Look at this!';
}
}
?>

当我们输入example.com/index.php/blog/这个网址时,页面会显示”Hello World!”。注意类名Blog必须以大写字母开头,同时继承Controller父类。

而当我们输入example.com/index.php/blog/index/ 这个URL 时,即调用了Blog类中的index 函数。URL example.com/index.php/blog/comments/ 调用Blog 类中的comments() 函数,页面输出“Look at this!”。

CodeIgniter传递URI 片段给函数

形如 example.com/index.php/products/shoes/sandals/123 的URL通过函数参数的形式将URI第三部分传递给函数,即Controller 来处理。如:

<?php
class Products extends Controller {

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

CodeIgniter如何定义默认的Controller

当URL中没有提供URI 时,CI 可以通过设置 application/config/routes.php 文件中的

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

来默认加载某个Controller,如Blog(即application/controller/blog.php)。

CodeIgniter Controller 其他

如果我们想隐藏一些特定的函数,使它们不能被公开访问。这时给该函数名称加上一个下划线(underscore)的前缀即可,如function _utility() {…}。

我们也可以将controller进行分类,放在application/controllers/的不同子文件夹中,如products子文件中包含的shoes.php文件(application/controllers/products/shoes.php)可以通过下面的URL(URI)进行访问:

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

如何使用CodeIgniter类构造函数

在CI controller中使用构造函数,必须在代码中添加代码:parent::Controller();如在PHP5中(PHP4有所不同):

<?php
class Blog extends Controller  {

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

来说兩句