CodeIgniter辅助函数helper详解

1.辅助函数概述

helper辅助函数,顾名思义,就是帮助我们完成各种特定任务的一系列函数。并且每个辅助函数文件是一系列的功能集合汇总在一起。比如可以帮助我们创建链接的URL Helpers,有创建表的Form Helpers,有文本格式化输出的Text Helpers,有设置和读取cookie的Cookie Helpers,还有文件File Helpers等等。

不同于大多数其他系统的是,CodeIgniter的辅助函数没有采用类的方式实现。而是简单的,程序的功能。每个辅助函数处理一个特定的任务,并且不必依靠其他函数。

CodeIgniter默认是没有载入辅助函数文件的,所以如果你想用辅助函数,就必须先载入它。 一旦被载入,辅助函数将全局可用(globally available),你可以在 controller 和 views 中使用它们。

辅助函数文件一般保存在 system/helpers 或 application/helpers 文件夹中。CodeIgniter 将会先在 application/helpers 寻找对应的辅助函数文件, 如果目录不存在或者目录下没有对应的辅助函数文件,CI 才会载入 system/helpers 下的辅助函数文件。

2.载入辅助函数

载入辅助函数是非常简单的,如下所示:

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

其中name是辅助函数文件的名字(不带.php后缀 和"helper" 部分)。

例如,要载入文件名为url_helper.php的URL Helper,可采用下面的语句:

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

辅助函数可以在你的控制器(controller)的任何地方被载入,甚至可以在视图(View)文件中被载入(我们并不建议你这么做)。 请在使用辅助函数之前载入他们。你可以在你的控制器构造函数中载入它们,以便辅助函数能自动在其他函数之前被载入。你也可以在要用到辅助函数的地方当场载入。

注意: 辅助函数载入函数并不返回值,所以不要尝试将它付给一个变量,直接像这样用就可以了。

3.载入多个辅助函数

如果你想一次载入多个辅助函数,你可以这样做:

$this->load->helper( array('helper1', 'helper2', 'helper3') );

4.自动载入辅助函数

如果你想要的话,CodeIgniter可以自动为你载入辅助函数。你可以通过打开 application/config/autoload.php ,并往自动载入数组(autoload array)中增加辅助函数来实现。

5.使用辅助函数

一旦你载入了想要用到辅助函数文件,你就可以用标准的函数调用方法来使用里面的函数。

例如,要使用anchor() 函数来建立一个链接,在视图(View)文件里面你可以这样做:

<?php echo anchor('blog/comments', 'Click Here');?>

这里的"Click Here" 是链接的名字,"blog/comments" 是链接的URI。

注意:辅助函数中的函数名最好做好命名规范,如果同时加载多个辅助函数文件,且其中有名称相同的函数,会导致 CI 出现空白页问题(这也是 PHP 语法错误)。

6.“扩展”辅助函数

你如果想 "扩展"一个原有的 Helpers,可以在你的 application/helpers/ 目录下创建一个新的helper,新的helper的名字是在被“扩展”的Helper的名字开头多加一个 MY_ (这是可以配置的. 见下.).

如果你想做的只是在原有的helper中添加一些新的功能,比如,添加一两个新的方法,或者是修改一个方法;就不值得重写自己的helper。在这种情况下,最好是“扩展”已有的helper。“扩展”一词用在这里不是很恰当,因为Helper的方法是过程式的(procedural) 和离散(discrete)的,在传统的语言环境中无法被“扩展”,不过在CodeIgniter中,你可以添加或修改helper的方法。

例如,扩展一个本地已有的 Array Helper 你应该建立一个文件: application/helpers/MY_array_helper.php, 并添加或重写(override)其中的一些方法:

// any_in_array() is not in the Array Helper, so it defines a new function
function any_in_array($needle, $haystack)
{
  $needle = (is_array($needle)) ? $needle : array($needle);
  foreach ($needle as $item)
  {
    if (in_array($item, $haystack))
    {
      return TRUE;
    }
    }
  return FALSE;
}
// random_element() is included in Array Helper, so it overrides the native function
function random_element($array)
{
  shuffle($array);
  return array_pop($array);
}

7.设定你自己的前缀(Prefix)

用于"扩展" helper 而加上前缀的文件同样也是对库和核心类的扩展.为了设置你自定义的前缀,请打开 application/config/config.php 文件,然后找到如下的条目:

$config['subclass_prefix'] = 'MY_';

这里需要注意:由于所有CodeIgniter自带的库都被冠以 CI_ 这样的前缀命名,所以请不要使用CI_来自定义前缀.

(0)

相关推荐

  • CodeIgniter中使用Smarty3基本配置

    一.创建Smarty类库 1.将smarty的libs文件复制到libraries下(这里我重命名为smarty) 2.新建Cismarty.php文件.(符合文件规范,文件名的首字母和class名的首字母大写,但是控制器引用加载时,类名/文件名不需要大写) Cismarty.php <?php if (!defined('BASEPATH')) exit('No direct script access allowed'); require(APPPATH . 'libraries/smart

  • Codeigniter(CI)框架分页函数及相关知识

    一般在数据分页的时候需要获取当前页的数据和总条数,一般人是在model中封装两个函数分别获取当前页的数据和数据总条数,业务逻辑类似,感觉有点冗余,可以封装在一起: 复制代码 代码如下: /**      * 获取分页数据及总条数      * @param string @tablename 表名      * @param mixed $where 条件      * @param int $limit 每页条数      * @param int $offset 当前页      */   

  • 让codeigniter与swfupload整合的最佳解决方案

    codeigniter是一款轻量,便捷的MVC框架,最近的项目涉及到批量上传,于是,就是用了swfupload这个插件,虽然网上有很多关于ci与swfupload的帖子,不过,并不是很完整,所以,这里综合各家优点,经过自己实际经验,做了下整理. 问题1:获取不到文件类型? 回答: 由于SWFUPLOAD所有类型文件的MIME均为application/octet-stream,故使用Codeigniter自带的上传类无法准确获取是否为图片,根据ci官方的wiki已经给出了解答 In your v

  • CodeIgniter启用缓存和清除缓存的方法

    Codeigniter支持缓存技术,以达到最快的速度.尽管CI已经相当高效了,但是网页中的动态内容.主机的内存CPU和数据库读取速度等因素直接影响了网页的加载速度.依靠网页缓存,你的网页可以达到近乎静态网页的加载速度,因为他们将程序输出的结果保存到硬盘上了. 缓存是怎么工作的? CI支持每个页面单独缓存,而且可以设置缓存更新时间.当一个网页第一次被加载的时候,缓存文件将被保存到application/cache文件夹.下次访问的时候,系统就会直接读取缓存文件,然后返回给用户的浏览器.如果缓存文件

  • Codeigniter中集成smarty和adodb的方法

    本文实例讲述了Codeigniter中集成smarty和adodb的方法.分享给大家供大家参考,具体如下: 在CodeIgniter中要写自己的库,就需要写两个文件,一个是在application/init下面的init_myclass.php文件(如果没有init目录,自己创建).另外一个就是在application/libraries目录下创建myclass.php文件. 这里myclass是你的类名.一些规则大家看手册就好了,我这里直接就说步骤了. 1)在application/libra

  • php之CodeIgniter学习笔记

    在使用数据库之前,我们最好将数据库进行自动连接:config/autoload.php自动加载 $autoload['libraries'] = array('database');一些常用函数 选择数据$this->db->select();允许你在SQL查询中写 SELECT 部分.$this->db->where();$this->db->or_where();$this->db->where_in();允许你在SQL查询中写 WHERE部分,其余各种

  • CodeIgniter集成smarty的方法详解

    本文实例讲述了CodeIgniter集成smarty的方法.分享给大家供大家参考,具体步骤如下: 1.下载smarty 解压到ci的libraries目录 如: ci/application/libraries/Smarty-2.6.20 2.编写Mysmarty.php 自己的类库文件 代码如下: <?php if (!defined('BASEPATH')) exit('No direct script access allowed'); require "Smarty-2.6.20/

  • Codeigniter整合Tank Auth权限类库详解

    相交其他CodeIgniter的类库,tank_auth,配置简单,使用也简单,并且作者也一直在更新,现在是1.0.9.1.0.8已经支持CI2.0了,我现在一般的项目都是用它,所以推荐给大家. 安装Tankauth的步骤 下载最新版类库(下载地址:http://www.konyukhov.com/soft/tank_auth/tank_auth.zip) 解压文件将application下相应的文件复制到你的CIapplication文件夹下.将captcha文件夹复制到你的CI文件夹(项目目

  • codeigniter集成ucenter1.6双向通信的解决办法

    用codeigniter开发一个子网站,之后想和原来的论坛进行同步,包括同步登陆和双向通信 先装好ucenter,然后新建一个other的应用,把生成的代码拷出来,新建一个config.ini.php到你的uc_client,ucenter会产生一个yourdomain.com/api/uc.php的请求,/api/uc.php不需要填写,要保证ucenter请求正确位置,才能做到双向通信 把uc_client复制到你的网站,目录可以自己定,就根目录吧.如果你把api目录放到uc_client目

  • CI(CodeIgniter)框架中的增删改查操作

    CodeIgniter的数据函数类在 \system\database\DB_active_rec.php 复制代码 代码如下: <span style="font-size:16px;">class ModelName extends CI_Model {     function __construct()     {         parent::__construct();     } }</span> 连接数据库:$this->load->

  • CodeIgniter整合Smarty的方法详解

    本文实例讲述了CodeIgniter整合Smarty的方法.分享给大家供大家参考,具体如下: CI3.0.2发布后感觉模板类还是不怎么好用,而且不能编译.Smarty功能强大,用习惯了Smarty标签,一般难以放弃,而且,是可以编译文件执行,速度快,我们可以把它们整合使用,弥补CI的模板功能的不足.我们整合使用的是CI版本3.0.3及 Smarty版本3.1.27.下面描述整合过程. 1.下载smarty-3.1.27 2 .解压smarty-3.1.27到CI项目中的application\l

  • CI(CodeIgniter)框架配置

    MVC的组成部分: 模型 (Model) 代表你的数据结构.通常来说,你的模型类将包含取出.插入.更新你的数据库资料这些功能. 视图 (View) 是展示给用户的信息.一个视图通常是一个网页. 控制器 (Controller) 是模型.视图以及其他任何处理 HTTP 请求所必须的资源之间的中介,并生成网页. 举例 比如一批统计数据你可以分别用柱状图.饼图来表示.C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新. CI的特点: 简单:CodeIgniter是经过 Apache/BSD-

随机推荐