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程序
Oct 09 PHP
PHP Session变量不能传送到下一页的解决方法
Nov 27 PHP
PHP 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
Oct 05 PHP
作为PHP程序员应该了解MongoDB的五件事
Jun 03 PHP
19个Android常用工具类汇总
Dec 30 PHP
PHP获取当前日期和时间及格式化方法参数
May 11 PHP
如何解决PHP无法实现多线程的问题
Sep 25 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
Dec 25 PHP
YII2自动登录Cookie总是失效的解决方法
Jun 28 PHP
Yii2框架中使用PHPExcel导出Excel文件的示例
Aug 09 PHP
php使用curl伪造浏览器访问操作示例
Sep 30 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
Jan 26 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
239军机修复记
2021/03/02 无线电
php使用MySQL保存session会话的方法
2015/06/26 PHP
Js中sort()方法的用法
2006/11/04 Javascript
Jquery带搜索框的下拉菜单
2013/05/06 Javascript
javascript字母大小写转换的4个函数详解
2014/05/09 Javascript
7个让JavaScript变得更好的注意事项
2015/01/28 Javascript
Javascript中this关键字的一些小知识
2015/03/15 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法
2017/03/03 Javascript
用jQuery实现圆点图片轮播效果
2017/03/19 Javascript
将angular.js项目整合到.net mvc中的方法详解
2017/06/29 Javascript
详解Vue2.0 事件派发与接收
2017/09/05 Javascript
Webpack 服务器端代码打包的示例代码
2017/09/19 Javascript
Vue.directive()的用法和实例详解
2018/03/04 Javascript
koa socket即时通讯的示例代码
2018/09/07 Javascript
详解微信小程序支付流程与梳理
2019/07/16 Javascript
微信小程序本地存储实现每日签到、连续签到功能
2019/10/09 Javascript
jQuery-App输入框实现实时搜索
2020/11/19 jQuery
Python urllib模块urlopen()与urlretrieve()详解
2013/11/01 Python
Python中的引用和拷贝浅析
2014/11/22 Python
python实现可以断点续传和并发的ftp程序
2016/09/13 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
python绘制直线的方法
2018/06/30 Python
Python版名片管理系统
2018/11/30 Python
OpenCV图像颜色反转算法详解
2019/05/13 Python
使用Python将图片转正方形的两种方法实例代码详解
2020/04/29 Python
Python通过字典映射函数实现switch
2020/11/06 Python
Claire’s法国:时尚配饰、美容、珠宝、头发
2021/01/16 全球购物
.net面试题
2016/09/17 面试题
大二自我鉴定
2014/01/31 职场文书
学习优秀党员杨宗兴先进事迹材料思想汇报
2014/09/14 职场文书
2015年“我们的节日·中秋节”活动总结
2015/07/30 职场文书
2016年大学生暑期社会实践活动总结
2016/04/06 职场文书
基于Redis位图实现用户签到功能
2021/05/08 Redis
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python
Python绘制散乱的点构成的图的方法
2022/04/21 Python