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 相关文章推荐
Win9x/ME下Apache+PHP安装配置
Oct 09 PHP
MVC模式的PHP实现
Oct 09 PHP
几种显示数据的方法的比较
Oct 09 PHP
PHP常用代码大全(新手入门必备)
Jun 29 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
Jul 02 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
Sep 30 PHP
php之Smarty模板使用方法示例详解
Jul 08 PHP
php新浪微博登录接口用法实例
Dec 23 PHP
php+ajax实现无刷新分页
Nov 18 PHP
PHP仿微信发红包领红包效果
Oct 30 PHP
php用wangeditor3实现图片上传功能
Aug 22 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
May 26 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
肝肠寸断了解下!盘点史上最伤心的十大动漫
2020/03/04 日漫
php返回相对时间(如:20分钟前,3天前)的方法
2015/04/14 PHP
判断控件是否已加载完成的代码
2010/02/24 Javascript
兼容IE和FF的图片上传前预览js代码
2013/05/28 Javascript
JS验证身份证有效性示例
2013/10/11 Javascript
10条建议帮助你创建更好的jQuery插件
2015/05/18 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
2015/09/19 Javascript
php利用curl获取远程图片实现方法
2015/10/26 Javascript
Bootstrap每天必学之面板
2015/11/30 Javascript
深入理解Ajax的get和post请求
2016/06/02 Javascript
详解JavaScript权威指南之对象
2016/09/27 Javascript
js实现音频控制进度条功能
2017/04/01 Javascript
浅谈Express异步进化史
2017/09/09 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
使用koa2创建web项目的方法步骤
2019/03/12 Javascript
使用vscode快速建立vue模板过程详解
2019/10/10 Javascript
vue如何使用async、await实现同步请求
2019/12/09 Javascript
python抓取京东商城手机列表url实例代码
2013/12/18 Python
python基础教程之udp端口扫描
2014/02/10 Python
Python新手入门最容易犯的错误总结
2017/04/24 Python
python机器学习库常用汇总
2017/11/15 Python
python实现搜索文本文件内容脚本
2018/06/22 Python
python3解析库pyquery的深入讲解
2018/06/26 Python
Python的UTC时间转换讲解
2019/02/26 Python
Python 如何提高元组的可读性
2019/08/26 Python
通过实例学习Python Excel操作
2020/01/06 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
Python中实现一行拆多行和多行并一行的示例代码
2020/09/06 Python
matplotlib实现数据实时刷新的示例代码
2021/01/05 Python
使用canvas一步步实现图片打码功能的方法
2019/06/17 HTML / CSS
大学生创业计划书的范文
2014/01/07 职场文书
矫正人员思想汇报
2014/01/08 职场文书
金融管理专业毕业生求职信
2014/03/12 职场文书
环保倡议书50字
2014/05/15 职场文书
安全学习心得体会范文
2016/01/18 职场文书
Redis keys命令的具体使用
2022/06/05 Redis