Frenlee

在CI(codeigniter)框架中使用laravel中的blade模板引擎

概述

用过laravel的人都知道,laravel中的视图模板引擎也很强大,可以继承,可以模块化.

引入代码

composer 引入依赖包

1
compose require philo/laravel-blade

编写view 函数

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
// 获取视图实例
function getBladeInstance()
{
static $blade = null;
if (!$blade) {
$views = __DIR__ . '/../views';
$cache = __DIR__ . '/../cache';
$blade = new \Philo\Blade\Blade($views, $cache);
}
return $blade;
}
// 视图渲染
function view($name = null, $data = [], $mergeData = [], $getView=false)
{
$blade = getBladeInstance();
setPaginator();
if (isset($data['urlParam'])) $data['urlParam'] = array_filter($data['urlParam']);
$html = $blade->view()->make($name, $data, $mergeData)->render();
if ($getView) {
return $html;
}
echo $html;
}
// 获取当前url 地址
function getCurrentUrl()
{
$scheme = \Util::isHTTPS() ? 'https://' : 'http://';
$url = $scheme.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
$urls = explode('?', $url, 2);
if (isset($urls[1])) {
$urls[1] = ltrim(preg_replace('/[&]?page=\d*/', '' ,$urls[1]), '&');
}
return rtrim(implode('?', $urls),'?');
}

// 翻页参数设置 这个函数最好在MY_Controller的构造函数中调用
function setPaginator()
{
\Illuminate\Pagination\Paginator::viewFactoryResolver(function(){
return getBladeInstance();
});

// 当前页面
\Illuminate\Pagination\Paginator::currentPageResolver(function(){
return array_get($_GET, 'page', 1);
});

// 设置当前url 地址
\Illuminate\Pagination\Paginator::currentPathResolver(function(){
return getCurrentUrl();
});
\Illuminate\Pagination\Paginator::defaultView('paginate'); // 翻页视图模板在哪
}

tips 最好是单独写成类这样会比较通用

使用

直接调用view 函数

1
view('blade.path', 'data', 'data');