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数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
May 29 PHP
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
Jul 31 PHP
PHP explode()函数用法、切分字符串
Oct 03 PHP
PHP中判断变量为空的几种方法小结
Nov 12 PHP
php常用数学函数汇总
Nov 21 PHP
php 二维数组快速排序算法的实现代码
Oct 17 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
Jun 13 PHP
PHP常见字符串操作函数与用法总结
Mar 04 PHP
PHP 文件上传限制问题
Sep 01 PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 20 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
Apr 04 PHP
php提高脚本性能的4个技巧
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之第七天
2006/10/09 PHP
深入PHP内存相关的功能特性详解
2013/06/08 PHP
php中strtotime函数用法详解
2014/11/15 PHP
PHP的文件操作与算法实现的面试题示例
2015/08/10 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
2019/10/17 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
JS date对象的减法处理实现代码
2010/12/28 Javascript
jquery获取div距离窗口和父级dv的距离示例
2013/10/10 Javascript
从零学JS之你需要了解的几本书
2014/05/19 Javascript
JavaScript作用域链示例分享
2014/05/27 Javascript
手机号码,密码正则验证
2014/09/04 Javascript
Jquery实现顶部弹出框特效
2015/08/08 Javascript
jquery对象访问是什么及使用方法介绍
2016/05/03 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
2016/12/02 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
Vue 页面切换效果之 BubbleTransition(推荐)
2018/04/08 Javascript
如何解决vue在ios微信"复制链接"功能问题
2020/03/26 Javascript
js实现简单选项卡制作
2020/08/05 Javascript
antd日期选择器禁止选择当天之前的时间操作
2020/10/29 Javascript
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
[14:21]VICI vs EG (BO3)
2018/06/07 DOTA
python将图片文件转换成base64编码的方法
2015/03/14 Python
Python的Bottle框架中实现最基本的get和post的方法的教程
2015/04/30 Python
使用Python从有道词典网页获取单词翻译
2016/07/03 Python
python 换位密码算法的实例详解
2017/07/19 Python
Python自定义线程类简单示例
2018/03/23 Python
python 非线性规划方式(scipy.optimize.minimize)
2020/02/11 Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
2020/05/22 Python
HTML5 history新特性pushState、replaceState及两者的区别
2015/12/26 HTML / CSS
实习自我鉴定
2013/12/15 职场文书
集团薪酬管理制度
2014/01/13 职场文书
医院节能减排方案
2014/06/13 职场文书
五四青年节的活动方案
2014/08/20 职场文书
房屋转让协议书
2014/10/18 职场文书
百家讲坛观后感
2015/06/12 职场文书
Nginx安装完成没有生成sbin目录的解决方法
2021/03/31 Servers