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 相关文章推荐
URL Rewrite的设置方法
Jan 02 PHP
PHPMailer 中文使用说明小结
Jan 22 PHP
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
Dec 29 PHP
php MessagePack介绍
Oct 06 PHP
php新浪微博登录接口用法实例
Dec 23 PHP
SESSION存放在数据库用法实例
Aug 08 PHP
分享10段PHP常用代码
Nov 11 PHP
两种php实现图片上传的方法
Jan 22 PHP
Zend Framework基本页面布局分析
Mar 19 PHP
iOS10推送通知开发教程
Sep 19 PHP
Yii框架实现记录日志到自定义文件的方法
May 23 PHP
php微信公众号开发之现金红包
Apr 16 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
php4与php5的区别小结(配置异同)
2011/12/20 PHP
php生成图片验证码的实例讲解
2015/08/03 PHP
PHP数组实例详解
2016/06/26 PHP
js loading加载效果实现代码
2009/11/24 Javascript
关于跨站脚本攻击问题
2011/12/22 Javascript
js用闭包遍历树状数组的方法
2014/03/19 Javascript
捕获和分析JavaScript Error的方法
2014/03/25 Javascript
JavaScript中使用document.write向页面输出内容实例
2014/10/16 Javascript
jQuery制作简洁的图片轮播效果
2015/04/03 Javascript
详解JavaScript中常用的函数类型
2015/11/18 Javascript
浅析AngularJS中的指令
2016/03/20 Javascript
jQuery中 DOM节点操作方法大全
2017/10/12 jQuery
Vue单页及多页应用全局配置404页面实践记录
2018/05/22 Javascript
jquery获取img的src值实例介绍
2019/01/16 jQuery
Vue 自定义指令功能完整实例
2019/09/17 Javascript
微信小程序登陆注册功能的实现代码
2019/12/10 Javascript
Vue实现浏览器打印功能的代码
2020/04/17 Javascript
vue+iview实现分页及查询功能
2020/11/17 Vue.js
使用typescript快速开发一个cli的实现示例
2020/12/09 Javascript
[03:09]2014DOTA2国际邀请赛 赛场上的美丽风景线 中国Coser也爱DOTA2
2014/07/20 DOTA
Python实现SMTP发送邮件详细教程
2021/03/02 Python
Python脚本实时处理log文件的方法
2016/11/21 Python
python 容器总结整理
2017/04/04 Python
利用python打印出菱形、三角形以及矩形的方法实例
2017/08/08 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
2018/07/10 Python
python快排算法详解
2019/03/04 Python
python Gunicorn服务器使用方法详解
2019/07/22 Python
详解Python调用系统命令的六种方法
2021/01/28 Python
python爬虫智能翻页批量下载文件的实例详解
2021/02/02 Python
amazeui 验证按钮扩展的实现
2020/08/21 HTML / CSS
印度最好的在线药品订购网站:PharmEasy
2018/11/30 全球购物
经典C++面试题一
2016/11/06 面试题
竞聘演讲稿范文
2014/01/12 职场文书
企业仓管员岗位职责
2014/06/15 职场文书
精神文明建设先进个人事迹材料
2014/12/24 职场文书
Node与Python 双向通信的实现代码
2021/07/16 Javascript