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文本数据库的搜索方法
Oct 09 PHP
用PHP动态生成虚拟现实VRML网页
Oct 09 PHP
mysql_num_rows VS COUNT 效率问题分析
Apr 23 PHP
php 模拟get_headers函数的代码示例
Apr 27 PHP
简介PHP的Yii框架中缓存的一些高级用法
Mar 29 PHP
PHP is_array() 检测变量是否是数组的实现方法
Jun 13 PHP
PHP Callable强制指定回调类型的方法
Aug 30 PHP
php根据数据id自动生成编号的实现方法
Oct 16 PHP
PHP实践教程之过滤、验证、转义与密码详解
Jul 24 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
使用composer命令加载vendor中的第三方类库 的方法
Jul 09 PHP
php面向对象重点知识分享
Sep 27 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作的文本留言本的例子(六)
2006/10/09 PHP
PHP获取文件绝对路径的代码(上一级目录)
2011/05/29 PHP
php实现网页缓存的工具类分享
2015/07/14 PHP
PHP读取大文件末尾N行的高效方法推荐
2016/06/03 PHP
php之可变变量的实例详解
2017/09/12 PHP
JS 时间显示效果代码
2009/08/23 Javascript
两个select之间option的互相添加操作(jquery实现)
2009/11/12 Javascript
jquery 简短右键菜单 多浏览器兼容
2010/01/01 Javascript
javascript面向对象之Javascript 继承
2010/05/04 Javascript
javascript弹出窗口实现代码
2015/11/12 Javascript
微信QQ的二维码登录原理js代码解析
2016/06/23 Javascript
简单实现轮播图效果的实例
2016/07/15 Javascript
JSON与XML的区别对比及案例应用
2016/11/11 Javascript
jQuery 选择符详细介绍及整理
2016/12/02 Javascript
vue 解决addRoutes动态添加路由后刷新失效问题
2018/07/02 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
解决vue-pdf查看pdf文件及打印乱码的问题
2020/11/04 Javascript
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
python3使用SMTP发送HTML格式邮件
2018/06/19 Python
实时获取Python的print输出流方法
2019/01/07 Python
Python3解释器知识点总结
2019/02/19 Python
pandas对dataFrame中某一个列的数据进行处理的方法
2019/07/08 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
2019/09/15 Python
基于Python的一个自动录入表格的小程序
2020/08/05 Python
python time.strptime格式化实例详解
2021/02/03 Python
Otticanet澳大利亚:最顶尖的世界名牌眼镜, 能得到打折季的价格
2018/08/23 全球购物
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
车间工艺员岗位职责
2013/12/09 职场文书
预备党员党课思想汇报
2014/01/13 职场文书
煤矿班组长竞聘书
2014/03/31 职场文书
人力资源管理系自荐信
2014/05/31 职场文书
2015年组织委员工作总结
2015/04/23 职场文书
中学教师教学工作总结
2015/08/13 职场文书
求职自荐信该如何书写?
2019/06/24 职场文书
python前后端自定义分页器
2022/04/13 Python