CodeIgniter辅助之第三方类库third_party用法分析


Posted in PHP onJanuary 20, 2016

本文实例分析了CodeIgniter辅助之第三方类库third_party用法。分享给大家供大家参考,具体如下:

third_party用来存放系统中引入的第三方类库,类库通常提供的功能比较丰富,相应的学习成本也要高些,系统中能用到功能有限,所以建议在引入类库时进行适当的封装,让系统中更方便使用,其他人使用时只需关注扩展的方法而无法关注具体的实现。以CI集成Twig模版为例吧。

首先需要下载Twig类库,并放在third_party中,然后在libraries中进行一次封装,示例如下:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
require APPPATH.'third_party/Twig/Autoloader.php';
/**
 * Twig模版引擎
 *
 */
class Twig
{
  public $twig;
  public $config;
  private $data = array();
  /**
   * 读取配置文件twig.php并初始化设置
   * 
   */
  public function __construct($config)
  {
    $config_default = array(
      'cache_dir' => false,
      'debug' => false,
      'auto_reload' => true,
      'extension' => '.tpl',
    );
    $this->config = array_merge($config_default, $config);
    Twig_Autoloader::register ();
    $loader = new Twig_Loader_Filesystem ($this->config['template_dir']);
    $this->twig = new Twig_Environment ($loader, array (
        'cache' => $this->config['cache_dir'],
        'debug' => $this->config['debug'],
        'auto_reload' => $this->config['auto_reload'], 
    ) );
    $CI = & get_instance ();
    $CI->load->helper(array('url'));
    $this->twig->addFunction(new Twig_SimpleFunction('site_url', 'site_url'));
    $this->twig->addFunction(new Twig_SimpleFunction('base_url', 'base_url'));
  }
  /**
   * 给变量赋值
   * 
   * @param string|array $var
   * @param string $value
   */
  public function assign($var, $value = NULL)
  {
    if(is_array($var)) {
      foreach($val as $key => $val) {
        $this->data[$key] = $val;
      }
    } else {
      $this->data[$var] = $value;
    }
  }
  /**
   * 模版渲染
   * 
   * @param string $template 模板名
   * @param array $data 变量数组
   * @param string $return true返回 false直接输出页面
   * @return string
   */
  public function render($template, $data = array(), $return = FALSE)
  {
    $template = $this->twig->loadTemplate ( $this->getTemplateName($template) );
    $data = array_merge($this->data, $data);
    if ($return === TRUE) {
      return $template->render ( $data );
    } else {
      return $template->display ( $data );
    }
  }
  /**
   * 获取模版名
   * 
   * @param string $template
   */
  public function getTemplateName($template)
  {
    $default_ext_len = strlen($this->config['extension']);
    if(substr($template, -$default_ext_len) != $this->config['extension']) {
      $template .= $this->config['extension'];
    }
    return $template;
  }
  /**
   * 字符串渲染
   * 
   * @param string $string 需要渲染的字符串
   * @param array $data 变量数组
   * @param string $return true返回 false直接输出页面
   * @return string
   */
  public function parse($string, $data = array(), $return = FALSE)
  {
    $string = $this->twig->loadTemplate ( $string );
    $data = array_merge($this->data, $data);
    if ($return === TRUE) {
      return $string->render ( $data );
    } else {
      return $string->display ( $data );
    }
  }
}
/* End of file Twig.php */
/* Location: ./application/libraries/Twig.php */

模版的操作通常有一些配置的信息,这里通过config下的twig.php进行配置,通过CI load library的方式加载时,与类名同名的配置文件存在时,会自动以数组的方式将参数传入类的构造函数。

<?php
// 默认扩展名
$config['extension'] = ".tpl";
// 默认模版路劲
$config['template_dir'] = APPPATH . "views/";
// 缓存目录
$config['cache_dir'] = APPPATH . "cache/twig/";
// 是否开启调试模式
$config['debug'] = false;
// 自动刷新
$config['auto_reload'] = true;
/* End of file twig.php */
/* Location: ./application/config/twig.php */

为了加载base_url site_url等函数到模版,类与CI产生了依赖,分离开可能更好,比如在serice中进行一次封装,增加一些自定义函数等,这样其他地方、其他系统也就很方便复用该类了。

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php设计模式 Observer(观察者模式)
Jun 26 PHP
php 获取页面中指定内容的实现类
Jan 23 PHP
实现获取http内容的php函数分享
Feb 16 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
Nov 18 PHP
PHP中应该避免使用同名变量(拆分临时变量)
Apr 03 PHP
php中Snoopy类用法实例
Jun 19 PHP
PHP封装的字符串加密解密函数
Dec 18 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
Mar 06 PHP
PHP从二维数组得到N层分类树的实现代码
Oct 11 PHP
Django中的cookie与session操作实例代码
Aug 17 PHP
详细对比php中类继承和接口继承
Oct 11 PHP
PHP中str_split()函数的用法讲解
Apr 11 PHP
CodeIgniter扩展核心类实例详解
Jan 20 #PHP
CodeIgniter视图使用注意事项
Jan 20 #PHP
CodeIgniter读写分离实现方法详解
Jan 20 #PHP
PHP实现微信网页授权开发教程
Jan 19 #PHP
CodeIgniter配置之SESSION用法实例分析
Jan 19 #PHP
CodeIgniter配置之routes.php用法实例分析
Jan 19 #PHP
CodeIgniter配置之config.php用法实例分析
Jan 19 #PHP
You might like
discuz论坛 用户登录 后台程序代码
2008/11/27 PHP
MayFish PHP的MVC架构的开发框架
2009/08/13 PHP
PHP判断远程url是否有效的几种方法小结
2011/10/08 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
2014/04/08 PHP
php二维码生成
2015/10/19 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
ExtJS 下拉多选框lovcombo
2010/05/19 Javascript
JavaScript 学习笔记之变量及其作用域
2015/01/14 Javascript
thinkphp 表名 大小写 窍门
2015/02/01 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
2015/09/07 Javascript
Bootstrap表单组件教程详解
2016/04/26 Javascript
Bootstrap4 gulp 配置详解
2019/01/06 Javascript
vue.js的vue-cli脚手架中使用百度地图API的实例
2019/01/21 Javascript
bootstrap table列和表头对不齐的解决方法
2019/07/19 Javascript
layui表格分页 记录勾选的实例
2019/09/02 Javascript
jquery实现弹窗(系统提示框)效果
2019/12/10 jQuery
Python利用flask sqlalchemy实现分页效果
2020/08/02 Python
Python 中的lambda函数介绍
2018/10/10 Python
Python/ArcPy遍历指定目录中的MDB文件方法
2018/10/27 Python
pytorch 可视化feature map的示例代码
2019/08/20 Python
pytorch之inception_v3的实现案例
2020/01/06 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
2020/02/25 Python
Django通过设置CORS解决跨域问题
2020/11/26 Python
基于HTML5 audio元素播放声音jQuery小插件
2011/05/11 HTML / CSS
谈一谈HTML5本地存储技术
2016/03/02 HTML / CSS
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
大学生毕业自我鉴定
2013/11/06 职场文书
幼儿园门卫制度
2014/01/29 职场文书
2014年综治宣传月活动总结
2014/04/28 职场文书
12岁生日演讲稿
2014/05/14 职场文书
有关九一八事变的演讲稿
2014/09/14 职场文书
2015年学校信息技术工作总结
2015/05/25 职场文书
主持稿开场白
2015/06/01 职场文书
资深HR教你写好简历中的自我评价
2019/05/07 职场文书
react合成事件与原生事件的相关理解
2021/05/13 Javascript
Nginx+Tomcat负载均衡多实例详解
2022/04/11 Servers