本文实例分析了CodeIgniter辅助之第三方类库third_party用法。分享给大家供大家参考,具体如下:
third_party用来存放系统中引入的第三方类库,类库通常提供的功能比较丰富,相应的学习成本也要高些,系统中能用到功能有限,所以建议在引入类库时进行适当的封装,让系统中更方便使用,其他人使用时只需关注扩展的方法而无法关注具体的实现。以CI集成Twig模版为例吧。
首先需要下载Twig类库,并放在third_party中,然后在libraries中进行一次封装,示例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
<?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的方式加载时,与类名同名的配置文件存在时,会自动以数组的方式将参数传入类的构造函数。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<?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程序设计有所帮助。