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入门速成(2)
Oct 09 PHP
一步一步学习PHP(2)――PHP类型
Feb 15 PHP
在字符串指定位置插入一段字符串的php代码
Feb 16 PHP
PHP正则的Unknown Modifier错误解决方法
Mar 02 PHP
PHP中Fatal error session_start()错误解决步骤
Aug 05 PHP
THINKPHP2.0到3.0有哪些改进之处
Jan 04 PHP
php实现的简单日志写入函数
Mar 31 PHP
帝国cms目录结构分享
Jul 06 PHP
PHP的几个常用加密函数
Feb 03 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
Mar 01 PHP
Thinkphp开发--集成极光推送
Sep 15 PHP
浅谈PHP之ThinkPHP框架使用详解
Jul 21 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
咖啡知识 除了喝咖啡还有那些知识点
2021/03/06 新手入门
遍历echsop的region表形成缓存的程序实例代码
2016/11/01 PHP
javascript操作文本框readOnly
2007/05/15 Javascript
JQuery从头学起第二讲
2010/07/04 Javascript
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
JQuery 选择器、过滤器介绍
2011/02/14 Javascript
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
js图片自动切换效果处理代码
2013/05/07 Javascript
js单独获取一个checkbox看其是否被选中
2014/09/22 Javascript
javascript中typeof操作符和constucor属性检测
2015/02/26 Javascript
jQuery实现ajax的叠加和停止(终止ajax请求)
2016/08/08 Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
2017/01/23 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
2017/03/25 Javascript
Javascript继承机制详解
2017/05/30 Javascript
node.js中http模块和url模块的简单介绍
2017/10/06 Javascript
mui框架 页面无法滚动的解决方法(推荐)
2018/01/25 Javascript
JavaScript中的各种宽高属性的实现
2020/05/08 Javascript
VUE前端从后台请求过来的数据进行转换数据结构操作
2020/11/11 Javascript
python验证码识别教程之滑动验证码
2018/06/04 Python
TensorFlow实现Logistic回归
2018/09/07 Python
python 内置模块详解
2019/01/01 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
2019/02/22 Python
Python函数和模块的使用总结
2019/05/20 Python
Python实现获取系统临时目录及临时文件的方法示例
2019/06/26 Python
浅谈python的elementtree模块处理中文注意事项
2020/03/06 Python
实现ECharts双Y轴左右刻度线一致的例子
2020/05/16 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
python3.5的包存放的具体路径
2020/08/16 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
python 如何设置守护进程
2020/10/29 Python
英国绿色商店:Natural Collection
2019/05/03 全球购物
管理学专业个人求职信范文
2013/09/21 职场文书
公司行政专员岗位职责
2014/08/24 职场文书
离婚协议书范本(2016最新版)
2016/03/18 职场文书
MongoDB支持的数据类型
2022/04/11 MongoDB
Mysql 8.x 创建用户以及授予权限的操作记录
2022/04/18 MySQL