laravel 5 实现模板主题功能


Posted in PHP onMarch 02, 2015

众所周知,laravel渲染模板是通过View::make()实现的,需要显式指定模板文件路径:

function index()

{

    return View::make('index.index');

}

既然这样,我们就可以自己实现模板主题功能,我们只需要将模板文件放到一个主题名称对应的目录里就行,比如默认主题为 default 的话,我们就这样写:

function index()

{

    return View::make('default.index.index');

}

自定义主题 custom :

function index()

{

    return View::make('custom.index.index');

}

从配置文件中读取主题名:

function index()

{

    return View::make(Config::get('app.theme','default').'.index.index');

}

这样基本就实现模板主题化的功能了,但还存在一个问题,那就是custom主题必须实现所有default主题的所有模板,否则会导致某些页面模板文件不存在报错,那么进一步优化:

function index()

{

    $theme = Config::get('app.theme','default');

    $tpl = $theme.'.index.index';

    if (!View::exists($tpl)) {

        $tpl = 'default.index.index';

    }

    return View::make($tpl);

}

就是在渲染模板之前,先检测模板文件是否存在,不存在的话则使用default主题中对应的模板。

这么多行代码,我们可以继续封装一下,这时候要用到Response对象了,我们知道 Response::view() 等同于 View::make(),而Response还有一个方法Response::macro()方法可以用来定义一个宏,我们可以把逻辑封装到宏里面:

Response::macro('render',function($path,$data=array()){

    $theme = Config::get('app.theme','default');

    $tpl = $theme.'.'.$path;

    if (!View::exists($tpl)) {

        $tpl = 'default.' . $path;

    }

    return Response::view($tpl,$data);

});

使用:

function index()

{

    $bindings = array(

        'title' => '首页'

    );

    return Response::render('index.index',$bindings);

}

需要注意的是传入模板的变量得通过Response::render的第二个参数。

今天的教程就先到这里吧,后续我们再来深入分析一下,希望大家能够喜欢。

PHP 相关文章推荐
php小技巧 把数组的键和值交换形成了新的数组,查找值取得键
Jun 02 PHP
探讨如何在php168_cms中提取验证码
Jun 08 PHP
实用的简单PHP分页集合包括使用方法
Oct 21 PHP
PHP URL参数获取方式的四种例子
Feb 28 PHP
PHP大批量插入数据库的3种方法和速度对比
Jul 08 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
Aug 19 PHP
PHP随机生成唯一HASH值自定义函数
Apr 20 PHP
Yii中CGridView实现批量删除的方法
Dec 28 PHP
微信支付PHP SDK ―― 公众号支付代码详解
Sep 13 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
Apr 27 PHP
Yii2压缩PHP中模板代码的输出问题
Aug 28 PHP
掌握PHP垃圾回收机制详解
Mar 13 PHP
Opcache导致php-fpm崩溃nginx返回502
Mar 02 #PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
Mar 02 #PHP
Laravel5中contracts详解
Mar 02 #PHP
php打印一个边长为N的实心和空心菱型的方法
Mar 02 #PHP
初识laravel5
Mar 02 #PHP
避免Smarty与CSS语法冲突的方法
Mar 02 #PHP
实现PHP+Mysql无限分类的方法汇总
Mar 02 #PHP
You might like
法压式咖啡之制作法
2021/03/03 冲泡冲煮
php使HTML标签自动补全闭合函数代码
2012/10/04 PHP
PHP导航下拉菜单的实现如此简单
2013/09/22 PHP
使用CodeIgniter的类库做图片上传
2014/06/12 PHP
ThinkPHP令牌验证实例
2014/06/18 PHP
Yii框架分页实现方法详解
2017/05/20 PHP
jQuery基础知识filter()和find()实例说明
2010/07/06 Javascript
javascript动态控制服务器控件实例
2014/09/05 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
2016/11/01 Javascript
JavaScript实现异步图像上传功能
2018/07/12 Javascript
Bootstrap table表格初始化表格数据的方法
2018/07/25 Javascript
在vue中使用express-mock搭建mock服务的方法
2018/11/07 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
[02:49]2014DOTA2电竞也是体育项目! 势要把荣誉带回中国!
2014/07/20 DOTA
python以环状形式组合排列图片并输出的方法
2015/03/17 Python
python调用fortran模块
2016/04/08 Python
Python 读写文件和file对象的方法(推荐)
2016/09/12 Python
关于Python元祖,列表,字典,集合的比较
2017/01/06 Python
解决Python运行文件出现out of memory框的问题
2018/12/03 Python
python按行读取文件并找出其中指定字符串
2019/08/08 Python
Python socket非阻塞模块应用示例
2019/09/12 Python
Python之Numpy的超实用基础详细教程
2019/10/23 Python
基于Python绘制美观动态圆环图、饼图
2020/06/03 Python
Python中的整除和取模实例
2020/06/03 Python
HTML5 Canvas实现烟花绽放特效
2016/03/02 HTML / CSS
美国在线健康和美容市场:Pharmapacks
2018/12/05 全球购物
英国拖鞋购买网站:Bedroom Athletics
2020/02/28 全球购物
一些.net面试题
2014/10/06 面试题
大学生个人求职口试自我评价
2014/02/16 职场文书
事业单位鉴定材料
2014/05/25 职场文书
综合测评个人总结
2015/03/03 职场文书
赢在中国观后感
2015/06/02 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python
解决Golang中ResponseWriter的一个坑
2021/04/27 Golang
Python+Appium自动化测试的实战
2021/06/30 Python
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android