ci框架驱动器

1.驱动器什么是

驱动器是一种特殊类型的类库,它有一个父类和任意多个子类。子类可以访问父类, 但不能访问兄弟类。在你的控制器中,驱动器为你的类库提供了 一种优雅的语法,从而不用将它们拆成很多离散的类。

一般我们看到父类和子类,我们会毫不犹豫的认为他们是继承和派生的关系,但是这里需要注意的是,驱动器中所提到的子类,并不是真的继承了父类驱动器,仅仅是其有访问父类驱动器的权限,在其中一篇参考文献中,作者将父类称为主类(master class),将此类称为次类(sub class),个人认为这种叫法比官方的更为精确,所以后面借用这一称谓。关于这个注意事项在后面的例子里读者可以看到。

驱动器位于 system/libraries/ 目录,每个驱动器都有一个独立的目录,目录名和 驱动器父类的类名一致,在该目录下还有一个子目录,命名为 drivers,用于存放所有子类的文件。

2.如何使用驱动器?

要使用一个驱动器,你可以在控制器中使用下面的方法来进行初始化:

$this->load->driver(‘class_name‘);

class_name 是你想要调用的驱动器类名,例如,你要加载名为 Some_parent 的驱动器, 可以这样:

$this->load->driver(‘some_parent‘);

然后就可以像下面这样调用该类的方法:

$this->some_parent->some_method();

而对于那些子类,我们不用初始化,可以直接通过父类调用了:

$this->some_parent->child_one->some_method();

$this->some_parent->child_two->another_method();

举一个实际的例子,假如我们需要创建一个Connect类来连接各种社交服务,并且从这些平台获取一些数据。直接借用外国网友的例子。

实际的代码看起来是这样的:

$this->load->driver(‘connect‘);
$this->connect->facebook->get_friends();
$this->connect->twitter->get_twitts();

这样就把一些分散的功能集中到一个类库中了,而且结构非常清晰。

3.如何创建驱动器

CI的官方文档中并没有详细介绍如何自己写一个驱动器,因此这里是重点。创建驱动器的第一步是创建一个驱动器文件目录结构, 这里我们创建自己的驱动器,要放在application/libraries目录下。文件夹名和驱动器类名相同,并且首字母大写如Connect,在此文件夹中再创建一个子文件夹,一定要取名为drivers,注意这里文件夹名称是小写字母,在drivers文件内创建次驱动器文件,文件名以主驱动器类名加下划线开头。

驱动器目录和文件结构布局如下图所示:

创建主驱动器类

application/libraries/Connect/Connect.php

<?php
 
if (!defined(‘BASEPATH‘))
    exit(‘No direct script access allowed‘);
 
classConnectextendsCI_Driver_Library
{
    public$valid_drivers;
    public$CI;
 
    function__construct()
    {
        $this->CI = &get_instance();
        $this->CI->config->load(‘connect‘, TRUE);
        $this->valid_drivers = $this->CI->config->item(‘modules‘, ‘connect‘);
 
    }
    publicfunctionget_friends()
    {
        return$this->twitter->get_friends() . $this->facebook->get_friends();
    }
 
}

读者应该注意到了主驱动器类继承的是CI_Driver_Library,变量$valid_drivers是必须的,它是用来告诉框架应该加载哪些次驱动器,它是一个包含次驱动器类名称的数组。有两种方法来定义这个变量:

第一种方法是直接在驱动器代码中定义:

将下面的代码替换构造函数的最后一句

$this->Valid_drivers= array(‘connect_twitter‘, ‘connect_facebook‘);

第二种方法是通过配置文件:

推荐采用这种方法,维护起来比较方便。创建一个文件application/config/connect.php

<?php
$config[‘modules‘] = array(‘connect_twitter‘, ‘connect_facebook‘);

这个字段取名为modules,你可以自己取一个名称,然后正如上面那个例子那样来调用。

在例子中我们还用$CI变量引用了框架的超级对象,然后加载配置文件,参数TRUE是为了防止名称与框架冲突,主驱动器类中的public和protected变量和方法在次驱动器中都是可以访问的。

创建次驱动器类

application/libraries/Connect/drivers/Connect_twitter.php

<?php
 
if (!defined(‘BASEPATH‘))
    exit(‘No direct script access allowed‘);
 
classConnect_twitterextendsCI_Driver
{
    publicfunctionget_twitts()
    {
        return‘Мои последние твитты:‘;
    }
 
    publicfunctionget_friends()
    {
        return‘@vanya, @stepa ‘;
    }
}
 

application/libraries/Connect/drivers/Connect_facebook.php

<?php
 
if (!defined(‘BASEPATH‘))
    exit(‘No direct script access allowed‘);
 
classConnect_facebookextendsCI_Driver
{
    publicfunctionget_friends()
    {
        return‘Ivan,  Stepan ‘;
    }
}
 

这里我们注意到次驱动器并不是继承主驱动器,也没有继承CI_Driver_Library而是CI_Driver。

4.在控制器中使用驱动器

由于所有次驱动器有方法主驱动器的权限,次驱动器仅能通过主驱动器访问,因此次驱动器之间的数据交换要通过主驱动器作为中间桥梁。

. application/controller/home.php

<?phpif ( ! defined(‘BASEPATH‘)) exit(‘No direct script access allowed‘);
 
class Home extends CI_Controller {
    publicfunction__construct()
    {
        parent::__construct();
        $this->load->driver(‘connect‘);
    }
 
    public function friends()
    {
        echo‘我社交网络的朋友: ‘;
        echo$this->connect->get_friends();
        //同时从两个站点获得
    }
 
    public function twitts()
    {
        echo$this->connect->twitter->get_twitts();
        // Twitter记录
    }
}

原文地址:https://www.cnblogs.com/songyanan/p/9025343.html

时间: 2024-07-30 10:50:45

ci框架驱动器的相关文章

CI框架 -- 驱动器

驱动器目录及文件结构 下面是驱动器目录和文件结构布局的简单例子: /application/libraries/Driver_name Driver_name.php //驱动器名称 drivers //子目录 Driver_name_subclass_1.php //子类文件 Driver_name_subclass_2.php //子类文件 Driver_name_subclass_3.php //子类文件 注: 1.为了在大小写敏感的文件系统下保证兼容性,Driver_name 目录必须以

CI框架浅析(全篇)

业余花了点时间看看CodeIgniter框架(简称CI),CI目前的稳定版本是 3.X,4.0版本已经出来了,但还在测试中,所以我分析的还是 3.x 版本. CI是一个很轻便的框架,整个下载包也就2M多,而且使用起来方便快捷,适用于一些简单的功能开发,以及做app 接口. 该框架整个流程图如下: li.li1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Hannotate SC" } span.s1 { } span.s2 { }

CI框架源码阅读笔记3 全局函数Common.php

从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap引导文件都会最先引入全局函数,以便于之后的处理工作). 打开Common.php中,第一行代码就非常诡异: if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 上一篇(CI框架源码阅读笔记2 一切的入口 index

后盾网-CI框架学习笔记

CI框架: 表单验证: 载入验证类 $this->load->library('form_validation'); 设置规则 $this->form_validation->set_rules('name值','规则'); 执行验证 $this->form_validation->run() 表单验证辅助函数: $this->load->helper('form'); 1. set_value('name') //重填数据 2. form_error('n

CI框架3.0版本以后,前后台分离的方法。

笔者认为,CI框架官方其实并没有考虑这个前后台分离的问题,所以没有官方的分离方法.而且,2.0版本的分离,也被官方认为这是一个bug.所以在前后台分离这个问题上,其实并不如thinkphp框架. 在CI框架2.0版本时的,大多数人认为可以这样做,前后台分离是可以直接在controller下,分admin和home目录的. 这是2.0版本时 其实,今天我用的是3.0版本的CI框架.在前后台分离这个问题,我也纠结了比较久.但是为了项目结构目录的清晰,还是要做前后台分离的. 我大概是做了这样一个分离.

CI框架剖析一

CodeIgniter 是一个小巧但功能强大的 PHP 框架,作为一个简单而"优雅"的工具包,它可以为开发者们建立功能完善的 Web 应用程序.本人使用CI框架有一段时间了,现在决定把该框架源码剖析一遍,理解其构架的用意与精妙之处.分析完所有的源码后,我才来总结CI框架的优缺点,以及适用于哪些场景开发. 目前CI最新的版本是 3.1.4, 4.0版本也即将发布.我们先分析3.1.4版本,然后再看看4.0有哪些重大突破. 首先是查看根目录下index.php文件了,主要定义了几个常量:

【ci框架基础】之部署百度编辑器

在ci框架下加载编辑器,现在复习下内容.我的框架文件名称为ci 1.下载百度编辑器ueditor,http://ueditor.baidu.com/ 一般情况下下载ubuilder版即可,并将ueditor复制到ci框架的根目录下. 下载好的编辑器目录为:-ueditor----dialogs     弹出对话框对应的资源和JS文件----lang        编辑器国际化显示的文件----php         涉及到服务器端操作的后台文件----themes      样式图片和样式文件-

ngnix 配置CI框架 与 CI的简单使用

ngnix 支持 CI框架1.修改config.php 参考网址:https://www.chenyudong.com/archives/codeigniter-in-nginx-and-url-rewrite.html 2. ci小样例 http://www.mamicode.com/info-detail-514033.html 控制器的默认配置文件: routes.php, 不修改默认为跳转到welcome控制器 3.修改CI为子目录 https://yq.aliyun.com/artic

CI框架源码分析

这几天,把ci源码又看了一遍,于是有了新的收获.明白了在application目录下core文件夹的作用,就是用来写ci核心文件的扩展的, 而且需要在配置文件中添加类前缀MY_. CI框架整体是但入口文件,入口文件是Index.php在该文件中定义了一些系统变量,比如BASEPATH和 APPPATH等,最后加载ci框架的核心文件CodeIgniter文件,该文件位于system文件夹下的core文件夹下,此文件夹是ci的核心文件,包括了 controller,model,router,conf