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 远程文件管理,可以给表格排序,遍历目录,时间排序
Aug 07 PHP
PHP实现域名whois查询的代码(数据源万网、新网)
Feb 22 PHP
php 获取百度的热词数据的代码
Feb 18 PHP
phpstrom使用xdebug配置方法
Dec 17 PHP
php实现的漂亮分页方法
Apr 17 PHP
Yii不依赖Model的表单生成器用法实例
Dec 04 PHP
php include类文件超时问题处理
Feb 06 PHP
php给一组指定关键词添加span标签的方法
Mar 31 PHP
学习php设计模式 php实现模板方法模式
Dec 08 PHP
Zend Framework框架Smarty扩展实现方法
Mar 22 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
Sep 30 PHP
php抽象方法和普通方法的区别点总结
Oct 13 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
php下一个阿拉伯数字转中文数字的函数
2007/07/16 PHP
浅析PKI加密解密 OpenSSL
2013/07/01 PHP
php获取文件类型和文件信息的方法
2015/07/10 PHP
php session_decode函数用法讲解
2019/05/26 PHP
js隐藏与显示回到顶部按钮及window.onscroll事件应用
2013/01/25 Javascript
使用AngularJS编写较为优美的JavaScript代码指南
2015/06/19 Javascript
JavaScript调用客户端Java程序的方法
2015/07/27 Javascript
纯js代码实现简单计算器
2015/12/02 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
2016/04/21 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
jQuery validate 验证radio实例
2017/03/01 Javascript
JS触摸与手势事件详解
2017/05/09 Javascript
JS实现的简单标签点击切换功能示例
2017/09/21 Javascript
ES6学习教程之对象字面量详解
2017/10/09 Javascript
vue进行图片的预加载watch用法实例讲解
2018/02/07 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
2018/06/20 Javascript
vue: WebStorm设置快速编译运行的方法
2018/10/18 Javascript
基于Vue实现电商SKU组合算法问题
2019/05/29 Javascript
微信小程序登录时如何获取input框中的内容
2019/12/04 Javascript
轻松掌握python设计模式之访问者模式
2016/11/18 Python
Python 处理数据的实例详解
2017/08/10 Python
python中append实例用法总结
2019/07/30 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
2020/04/14 Python
Python通用唯一标识符uuid模块使用案例
2020/09/10 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
2021/02/20 Python
英国最大的奢侈品零售网络商城:Flannels
2016/09/16 全球购物
The North Face北面英国官网:美国著名户外品牌
2017/12/13 全球购物
安全教育月活动总结
2014/05/05 职场文书
2014年教师节演讲稿
2014/09/03 职场文书
租房协议书
2014/09/12 职场文书
论群众路线学习笔记
2014/11/06 职场文书
2015年党员承诺书
2015/01/21 职场文书
个人工作失误的保证书怎么写?
2019/06/21 职场文书