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 相关文章推荐
IP138 IP地址查询小偷实现代码
Feb 15 PHP
php入门学习知识点五 关于php数组的几个基本操作
Jul 14 PHP
解析php中的escape函数
Jun 29 PHP
php使用Image Magick将PDF文件转换为JPG文件的方法
Apr 01 PHP
php基础教程
Aug 26 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
Sep 23 PHP
PHP递归实现层级树状展开
Apr 01 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
May 06 PHP
JSON两种结构之对象和数组的理解
Jul 19 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
Feb 28 PHP
PHP中的自动加载操作实现方法详解
Aug 06 PHP
PHP 8新特性简介
Aug 18 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文件上传(实例)
2013/10/27 PHP
php上传文件中文文件名乱码的解决方法
2013/11/01 PHP
php5.3 goto函数介绍和示例
2014/03/21 PHP
php中创建和调用webservice接口示例
2014/07/25 PHP
php中explode的负数limit用法分析
2015/02/27 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
2015/03/19 PHP
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
Exjs 入门篇
2010/04/07 Javascript
使用Js让Html中特殊字符不被转义
2013/11/05 Javascript
让input框实现类似百度的搜索提示(基于jquery事件监听)
2014/01/31 Javascript
jquery实现简单实用的弹出层效果代码
2015/10/15 Javascript
学习AngularJs:Directive指令用法(完整版)
2016/04/26 Javascript
jQuery+pjax简单示例汇总
2017/04/21 jQuery
nodejs实现爬取网站图片功能
2017/12/14 NodeJs
Vue用v-for给src属性赋值的方法
2018/03/03 Javascript
vue 1.0 结合animate.css定义动画效果
2018/07/11 Javascript
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
Python3实现的画图及加载图片动画效果示例
2018/01/19 Python
用python与文件进行交互的方法
2018/03/01 Python
Python实现的堆排序算法示例
2018/04/29 Python
Python tkinter label 更新方法
2018/10/11 Python
使用Python 自动生成 Word 文档的教程
2020/02/13 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
css3中背景尺寸background-size详解
2014/09/02 HTML / CSS
CSS3实现菜单悬停效果
2020/11/17 HTML / CSS
德国最大的服装、鞋子和配件在线商店之一:Outfits24
2019/07/23 全球购物
澳大利亚最受欢迎的超级商场每日优惠:Catch
2020/11/17 全球购物
澳大利亚排名第一的露营和户外设备在线零售商:Outbax
2020/05/06 全球购物
人力资源部培训专员岗位职责
2014/01/02 职场文书
班班通项目实施方案
2014/02/25 职场文书
创业融资计划书
2014/04/25 职场文书
办公室个人总结
2015/02/28 职场文书
会计试用期工作总结2015
2015/05/28 职场文书
学生病假条范文
2015/08/17 职场文书
HTML+CSS 实现顶部导航栏菜单制作
2021/06/03 HTML / CSS
提高系统的吞吐量解决数据库重复写入问题
2022/04/23 MySQL