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 日常开发小技巧
Sep 23 PHP
PHP 字符截取 解决中文的截取问题,不用mb系列
Sep 29 PHP
php输出表格的实现代码(修正版)
Dec 29 PHP
用PHP+MySQL搭建聊天室功能实例代码
Aug 20 PHP
修改php.ini不生效问题解决方法(上传大于8M的文件)
Jun 14 PHP
PHP 循环删除无限分类子节点的实现代码
Jun 21 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
Nov 11 PHP
php session劫持和防范的方法
Nov 12 PHP
PHP判断一个gif图片是否为动态图片的方法
Nov 19 PHP
深入讲解PHP Session及如何保持其不过期的方法
Aug 18 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
May 29 PHP
深入理解PHP的远程多会话调试
Sep 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
肝肠寸断了解下!盘点史上最伤心的十大动漫
2020/03/04 日漫
PHP has encountered an Access Violation 错误的解决方法
2010/01/17 PHP
php 编写安全的代码时容易犯的错误小结
2010/05/20 PHP
php表单提交与$_POST实例分析
2015/01/26 PHP
phpMyAdmin安装并配置允许空密码登录
2015/07/04 PHP
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
各种常用浏览器getBoundingClientRect的解析
2009/05/21 Javascript
改进UCHOME的记录发布,增强可访问性用户体验
2011/01/17 Javascript
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
2011/10/16 Javascript
基于jQuery Ajax实现上传文件
2016/03/24 Javascript
ajax跨域调用webservice的实现代码
2016/05/09 Javascript
微信小程序 弹幕功能简单实例
2017/02/14 Javascript
JS实现区分中英文并统计字符个数的方法示例
2018/06/09 Javascript
在Angular中使用JWT认证方法示例
2018/09/10 Javascript
vue中的面包屑导航组件实例代码
2019/07/01 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
2020/03/29 Javascript
vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据操作
2020/07/31 Javascript
python读取文本中数据并转化为DataFrame的实例
2018/04/10 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
基于logstash实现日志文件同步elasticsearch
2020/08/06 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
pytorch 计算Parameter和FLOP的操作
2021/03/04 Python
CSS3地图动态实例代码(圆圈向外扩散)
2018/06/15 HTML / CSS
纯css3实现的竖形无限级导航
2014/12/10 HTML / CSS
俄罗斯的精英皮具:Wittchen
2018/01/29 全球购物
美国糖果店:Sugarfina
2019/02/21 全球购物
应届生高等护理求职信
2013/10/12 职场文书
女大学生个人求职信
2013/12/09 职场文书
小学生国庆65周年演讲稿范文(2篇)
2014/09/21 职场文书
海南召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
自主招生英文自荐信
2015/03/25 职场文书
债务追讨律师函
2015/06/24 职场文书
优秀的商业计划书,让融资一步到位
2019/05/07 职场文书
php png失真的原因及解决办法
2021/10/24 PHP
Spring Data JPA框架自定义Repository接口
2022/04/28 Java/Android