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 相关文章推荐
多重?l件?合查?(二)
Oct 09 PHP
非常不错的MySQL优化的8条经验
Mar 24 PHP
ThinkPHP使用smarty模板引擎的方法
Jul 01 PHP
php实现的Cookies操作类实例
Sep 24 PHP
ThinkPHP中Session用法详解
Nov 29 PHP
Yii分页用法实例详解
Dec 04 PHP
刷新PHP缓冲区为你的站点加速
Oct 10 PHP
YII使用url组件美化管理的方法
Dec 28 PHP
删除PHP数组中的重复元素的实现代码
Apr 10 PHP
PHP 中TP5 Request 请求对象的实例详解
Jul 31 PHP
PHP替换Word中变量并导出PDF图片的实现方法
Nov 26 PHP
解决Laravel使用验证时跳转到首页的问题
Nov 17 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
php定义参数数量可变的函数用法实例
2015/03/16 PHP
PHP中使用BigMap实例
2015/03/30 PHP
PHP设计模式之观察者模式定义与用法分析
2019/04/04 PHP
关于Javascript 的 prototype问题。
2007/01/03 Javascript
jQuery对表单的操作代码集合
2011/04/06 Javascript
js与运算符和或运算符的妙用
2014/02/14 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
2014/05/04 Javascript
JS之获取样式的简单实现方法(推荐)
2016/09/13 Javascript
javascript this详细介绍
2016/09/19 Javascript
Javascript中的作用域及块级作用域
2017/12/08 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题
2018/09/27 Javascript
Cordova(ionic)项目实现双击返回键退出应用
2019/09/17 Javascript
微信小程序监听用户登录事件的实现方法
2019/11/11 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
[03:00]2018完美盛典_最佳英雄奖
2018/12/17 DOTA
Python开发编码规范
2006/09/08 Python
python将文本转换成图片输出的方法
2015/04/28 Python
Python中使用OpenCV库来进行简单的气象学遥感影像计算
2016/02/19 Python
深入浅析python中的多进程、多线程、协程
2016/06/22 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
2018/02/11 Python
深入浅析Python传值与传址
2018/07/10 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
pandas 层次化索引的实现方法
2019/07/06 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
2019/11/11 Python
用python介绍4种常用的单链表翻转的方法小结
2020/02/24 Python
Python基于pillow库实现生成图片水印
2020/09/14 Python
Python中对象的比较操作==和is区别详析
2021/02/12 Python
本科毕业自我鉴定
2014/03/20 职场文书
公司年会抽奖活动主持词
2014/03/31 职场文书
连锁超市项目计划书
2014/09/15 职场文书
承租经营合作者协议书
2014/10/01 职场文书
2015年财务个人工作总结范文
2015/05/22 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
2019年鼓励无偿献血倡议书
2019/09/17 职场文书