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与SQL注入攻击[二]
Apr 17 PHP
php中json_decode()和json_encode()的使用方法
Jun 04 PHP
如何利用php array_multisort函数 对数据库结果进行复杂排序
Jun 08 PHP
PHP数组排序之sort、asort与ksort用法实例
Sep 08 PHP
php两种无限分类方法实例
Apr 21 PHP
使用PHP编写发红包程序
Jul 22 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
May 24 PHP
PHP获取当前系统时间的方法小结
Oct 03 PHP
PHP微信支付结果通知与回调策略分析
Jan 10 PHP
php转换上传word文件为PDF的方法【基于COM组件】
Jun 10 PHP
php生成静态页面并实现预览功能
Jun 27 PHP
php实现对短信验证码发送次数的限制实例讲解
Mar 04 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
JAVA/JSP学习系列之七
2006/10/09 PHP
PHP安全的URL字符串base64编码和解码
2014/06/19 PHP
php获取YouTube视频信息的方法
2015/02/11 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
2016/12/05 PHP
php实现的简单中文验证码功能示例
2017/01/03 PHP
PHP类与对象后期静态绑定操作实例详解
2018/12/20 PHP
推荐:极酷右键菜单
2006/11/29 Javascript
js实现杯子倒水问题自动求解程序
2013/03/25 Javascript
intro.js 页面引导简单用法 分享
2013/08/06 Javascript
得到form下的所有的input的js代码
2013/11/07 Javascript
javascript中FOREACH数组方法使用示例
2016/03/01 Javascript
微信小程序 滚动到某个位置添加class效果实现代码
2017/04/19 Javascript
JavaScript运行原理分析
2018/02/09 Javascript
深入理解Node module模块
2018/03/26 Javascript
webpack分离css单独打包的方法
2018/06/12 Javascript
vue实现简单的星级评分组件源码
2018/11/16 Javascript
浅谈VUE中演示v-for为什么要加key
2020/01/16 Javascript
Vue强制组件重新渲染的方法讨论
2020/02/03 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
2020/03/16 Javascript
Jquery cookie插件实现原理代码解析
2020/08/04 jQuery
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
Python模块学习 datetime介绍
2012/08/27 Python
python基础教程之简单入门说明(变量和控制语言使用方法)
2014/03/25 Python
python使用paramiko实现远程拷贝文件的方法
2016/04/18 Python
利用python GDAL库读写geotiff格式的遥感影像方法
2018/11/29 Python
Python 给屏幕打印信息加上颜色的实现方法
2019/04/24 Python
用python拟合等角螺线的实现示例
2019/12/27 Python
Python数据相关系数矩阵和热力图轻松实现教程
2020/06/16 Python
韩国女装NO.1网店:STYLENANDA
2016/09/16 全球购物
美国名牌香水折扣网站:Hottperfume
2021/02/10 全球购物
Can a struct inherit from another class? (结构体能继承类吗)
2014/07/22 面试题
社团成立邀请函
2014/01/08 职场文书
2014年冬季防火方案
2014/05/21 职场文书
创业计划书之酒厂
2019/10/14 职场文书
详解MySQL 用户权限管理
2021/04/20 MySQL
Python学习之包与模块详解
2022/03/19 Python