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 相关文章推荐
一个程序下载的管理程序(二)
Oct 09 PHP
用PHP和ACCESS写聊天室(六)
Oct 09 PHP
php过滤XSS攻击的函数
Nov 12 PHP
PHP使用正则表达式清除超链接文本
Nov 12 PHP
PHP中的命名空间相关概念浅析
Jan 22 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
Jul 01 PHP
PHP 数组基本操作小结(推荐)
Jun 13 PHP
Laravel实现自定义错误输出内容的方法
Oct 10 PHP
PHP使用标准库spl实现的观察者模式示例
Aug 04 PHP
PHP addslashes()函数讲解
Feb 03 PHP
PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
Feb 25 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 23 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文件上传之多文件上传的实现思路
2016/01/27 PHP
Yii基于CActiveForm的Ajax数据验证用法示例
2016/07/14 PHP
PHP合并两个或多个数组的方法
2019/01/20 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
Display SQL Server Login Mode
2007/06/21 Javascript
dwz 如何去掉ajaxloading具体代码
2013/05/22 Javascript
Nodejs学习笔记之Stream模块
2015/01/13 NodeJs
JQuery实现防止退格键返回的方法
2015/02/12 Javascript
原生ajax处理json格式数据的实例代码
2016/12/25 Javascript
JS图片预加载插件详解
2017/06/21 Javascript
自定义PC微信扫码登录样式写法
2017/12/12 Javascript
vue项目中导入swiper插件的方法
2018/01/30 Javascript
@angular前端项目代码优化之构建Api Tree的方法
2018/12/24 Javascript
Vue传参一箩筐(页面、组件)
2019/04/04 Javascript
javscript 数组扁平化的实现
2020/02/03 Javascript
vue从零实现一个消息通知组件的方法详解
2020/03/16 Javascript
js点击事件的执行过程实例分析【冒泡与捕获】
2020/04/11 Javascript
基于ant design日期控件使用_仅月份的操作
2020/10/27 Javascript
Python通过PIL获取图片主要颜色并和颜色库进行对比的方法
2015/03/19 Python
Python探索之ModelForm代码详解
2017/10/26 Python
Flask Web开发入门之文件上传(八)
2018/08/17 Python
python制作简单五子棋游戏
2019/06/18 Python
Python正则表达式急速入门(小结)
2019/12/16 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
2020/05/20 Python
如果一个类实现了多个接口但是这些接口有相同的方法名将会怎样
2013/06/16 面试题
什么是URL
2015/12/13 面试题
家长对老师的感言
2014/03/11 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
评先进个人材料
2014/12/29 职场文书
秋季运动会开幕词
2015/01/28 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
史上最全书信经典范文大全(建议收藏)
2019/07/10 职场文书
用Python写一个简易版弹球游戏
2021/04/13 Python
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang
在MySQL中你成功的避开了所有索引
2022/04/20 MySQL
nginx配置限速限流基于内置模块
2022/05/02 Servers