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开发GUI
Oct 09 PHP
推荐一篇入门级的Class文章
Mar 19 PHP
并发下常见的加锁及锁的PHP具体实现代码
Oct 12 PHP
php在程序中将网页生成word文档并提供下载的代码
Oct 09 PHP
PHP与Java进行通信的实现方法
Oct 21 PHP
php生成EAN_13标准条形码实例
Nov 13 PHP
php随机抽奖实例分析
Mar 04 PHP
Windows下Apache + PHP SESSION丢失的解决过程全纪录
Apr 07 PHP
php实现网站留言板功能
Nov 04 PHP
php 输入输出流详解及示例代码
Aug 25 PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
Nov 25 PHP
Laravel给生产环境添加监听事件(SQL日志监听)
Jun 19 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防注入安全代码
2008/04/09 PHP
php中in_array函数用法探究
2014/11/25 PHP
php header函数的常用http头设置
2015/06/25 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
2013/10/17 Javascript
Windows 系统下安装和部署Egret的开发环境
2014/07/31 Javascript
用户代理字符串userAgent可实现的四个识别
2015/09/20 Javascript
javascript手风琴下拉菜单实现代码
2015/11/12 Javascript
Nodejs进阶:基于express+multer的文件上传实例
2016/11/21 NodeJs
AugularJS从入门到实践(必看篇)
2017/07/10 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
详解Vue中使用插槽(slot)、聚类插槽
2019/04/12 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
2019/06/04 Javascript
JavaScript设计模式--简单工厂模式定义与应用案例详解
2020/05/23 Javascript
JavaScript 判断数据类型的4种方法
2020/09/11 Javascript
[02:25]DOTA2英雄基础教程 熊战士
2014/01/03 DOTA
Python制作CSDN免积分下载器
2015/03/10 Python
记一次python 内存泄漏问题及解决过程
2018/11/29 Python
numpy.random模块用法总结
2019/05/27 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
Flask框架学习笔记之模板操作实例详解
2019/08/15 Python
windows下Python安装、使用教程和Notepad++的使用教程
2019/10/06 Python
pyqt5 textEdit、lineEdit操作的示例代码
2020/08/12 Python
使用Python制作一个数据预处理小工具(多种操作一键完成)
2021/02/07 Python
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
《花的勇气》教后反思
2014/02/12 职场文书
信息技术课后反思
2014/04/27 职场文书
大学生党员自我批评思想汇报
2014/10/10 职场文书
学院党委班子四风问题自查报告及整改措施
2014/10/25 职场文书
教师群众路线教育实践活动学习笔记
2014/11/05 职场文书
生日答谢词
2015/01/05 职场文书
艺术节开幕词
2015/01/28 职场文书
优秀英文求职信范文
2015/03/19 职场文书
2015年征兵工作总结
2015/07/23 职场文书
ES6 解构赋值的原理及运用
2021/05/25 Javascript