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 相关文章推荐
支持oicq头像的留言簿(一)
Oct 09 PHP
与数据库连接
Oct 09 PHP
表单复选框向PHP传输数据的代码
Nov 13 PHP
在PHP中养成7个面向对象的好习惯
Jul 17 PHP
探讨多键值cookie(php中cookie存取数组)的详解
Jun 06 PHP
PHP开发框架Laravel数据库操作方法总结
Sep 03 PHP
php生成唯一数字id的方法汇总
Nov 18 PHP
PHP使用Pear发送邮件(Windows环境)
Jan 05 PHP
Zend Framework教程之Autoloading用法详解
Mar 08 PHP
浅析php静态方法与非静态方法的用法区别
May 17 PHP
Yii2实现中国省市区三级联动实例
Feb 08 PHP
YII2框架中excel表格导出的方法详解
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
PHP聊天室技术
2006/10/09 PHP
php实现的遍历文件夹下所有文件,编辑删除
2010/01/05 PHP
php 获取本机外网/公网IP的代码
2010/05/09 PHP
php笔记之常用文件操作
2010/10/12 PHP
php数据库抽象层 PDO
2011/05/07 PHP
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
2011/05/25 PHP
一个典型的PHP分页实例代码分享
2011/07/28 PHP
php实现网站留言板功能
2015/11/04 PHP
this[] 指的是什么内容 讨论
2007/03/24 Javascript
基于jQuery的星级评分插件
2011/08/12 Javascript
js获取浏览器的可视区域尺寸的实现代码
2011/11/30 Javascript
nodejs实现bigpipe异步加载页面方案
2016/01/26 NodeJs
基于javascript实现图片滑动效果
2016/05/07 Javascript
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
Angular中点击li标签实现更改颜色的核心代码
2017/12/08 Javascript
在vue中,v-for的索引index在html中的使用方法
2018/03/06 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
Vue-Router的使用方法
2018/09/05 Javascript
微信小程序picker组件关于objectArray数据类型的绑定方法
2019/03/13 Javascript
Python外星人入侵游戏编程完整版
2020/03/30 Python
详解Django中间件执行顺序
2018/07/16 Python
django celery redis使用具体实践
2019/04/08 Python
Flask框架工厂函数用法实例分析
2019/05/25 Python
python调用Matplotlib绘制分布点图
2019/10/18 Python
PYTHON发送邮件YAGMAIL的简单实现解析
2019/10/28 Python
python 中的[:-1]和[::-1]的具体使用
2020/02/13 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
2020/05/25 Python
Python matplotlib可视化实例解析
2020/06/01 Python
HTML5新特性之语义化标签
2017/10/31 HTML / CSS
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
SQL Server 2000数据库的文件有哪些,分别进行描述
2013/03/30 面试题
营业员实习自我鉴定
2013/12/07 职场文书
房屋租赁协议书范本
2014/04/10 职场文书
爱牙日宣传活动总结
2015/02/05 职场文书
员工离职证明范本
2015/06/12 职场文书
Python 把两层列表展开平铺成一层(5种实现方式)
2021/04/07 Python