laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例


Posted in PHP onJanuary 25, 2020

本文实例讲述了laravel框架实现为 Blade 模板引擎添加新文件扩展名。分享给大家供大家参考,具体如下:

因为一些原因,我准备把 Blessing Skin 的框架换成 Laravel 了(之前是自己搭建的一个框架),但是在模板迁移的时候遇到了一点问题。

之前我是使用的 XiaoLer/blade 这个从 Laravel 中抽离出来的 Blade 模板引擎,并且自定义为使用 .tpl文件后缀。你问为啥不用默认的 .blade.php 而是用这个 Smarty 的模板扩展名?能有啥,好看呗 :-D

不过之前我是直接调用 FileViewFinder 类的 addExtension 方法来添加扩展名的,但是在 Laravel 里就不能这样了。你总不能在 Illuminate\View 加几句话吧?

去 Google 搜索了下,没发现有可以很方便使用的方法(当然是搜的鹰文,说不定是我姿势不对),就只好自己找了。

首先先从 View Facade 入手,可以看到它是从服务容器中解析出了 view 这个绑定。继续往下找,打开 Illuminate\View\ViewServiceProvider,看看 View 的服务提供者到底是把啥给绑定到 view 上去了:

public function registerFactory()
{
  $this->app->singleton('view', function ($app) {
    $resolver = $app['view.engine.resolver'];
    $finder = $app['view.finder'];
    $env = new Factory($resolver, $finder, $app['events']);
    $env->setContainer($app);
    $env->share('app', $app);
    return $env;
  });
}

嗯嗯,我们可以看到这是绑定了个 Illuminate\View\Factory 实例,于是我们继续往下找,看看这个工厂类都有啥方法:

/**
 * Register a valid view extension and its engine.
 *
 * @param string  $extension
 * @param string  $engine
 * @param \Closure $resolver
 * @return void
 */
public function addExtension($extension, $engine, $resolver = null)
{
  $this->finder->addExtension($extension);
  if (isset($resolver)) {
    $this->engines->register($engine, $resolver);
  }
  unset($this->extensions[$extension]);
  $this->extensions = array_merge([$extension => $engine], $this->extensions);
}

哦哦~ 果然我们在工厂类里找到了一个 FileViewFinder::addExtension 的封装。然而正当我欣喜地准备调用的时候,却发现这个方法有个神秘的 $engine 参数。

诶?WTF?这尼玛是啥?( ・_?・)

看了看文档也没看出个所以然来,就只好从方法的具体代码里找找蛛丝马迹了:

$this->extensions = array_merge([$extension => $engine], $this->extensions);

哦呀?这一行在 $this->extensions 里加上了一个 [$extension => $engine] 的数组,那么只要我们看看这个数组原先的定义,就可以知道这个 $engine 是个啥子了:

/**
 * The extension to engine bindings.
 *
 * @var array
 */
protected $extensions = ['blade.php' => 'blade', 'php' => 'php'];

啊哈,原来这个 $engine 指的是解析 $extension 所使用的引擎!这下一切都水落石出了,如果你在传入 .tpl 的同时传入一个 blade 的引擎,就是告诉 Blade,要把以 .tpl 为扩展名的文件用 Blade 模板引擎来解析。

这下一切都简单了,我们只需要在 AppServiceProvider (或者其他适当的服务提供者)里通过调用 View Facade 就可以非常方便快捷地添加扩展名了:

View::addExtension('tpl', 'blade');

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
汉字转化为拼音(php版)
Oct 09 PHP
PHP 高级课程笔记 面向对象
Jun 21 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
Nov 07 PHP
ThinkPHP里用U方法调用js文件实例
Jun 18 PHP
PHP中error_reporting()用法详解
Aug 31 PHP
基于php实现七牛抓取远程图片
Dec 01 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
Dec 16 PHP
php处理单文件、多文件上传代码分享
Aug 24 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
Mar 15 PHP
thinkPHP5 tablib标签库自定义方法详解
May 10 PHP
Laravel5.7框架安装与使用学习笔记图文详解
Apr 02 PHP
如何解决php-fpm启动不了问题
Nov 17 PHP
laravel框架模型和数据库基础操作实例详解
Jan 25 #PHP
laravel框架分组控制器和分组路由实现方法示例
Jan 25 #PHP
laravel框架中间件简单使用方法示例
Jan 25 #PHP
php设计模式之建造器模式分析【星际争霸游戏案例】
Jan 23 #PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
Jan 23 #PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
Jan 23 #PHP
php面向对象基础详解【星际争霸游戏案例】
Jan 23 #PHP
You might like
说明的比较细的php 正则学习实例
2008/07/30 PHP
php读取文件内容的几种方法详解
2013/06/26 PHP
PHP CURL 内存泄露问题解决方法
2015/02/12 PHP
php检查日期函数checkdate用法实例
2015/03/19 PHP
php常用表单验证类用法实例
2015/06/18 PHP
php实现可逆加密的方法
2015/08/11 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
2017/09/30 PHP
jQuery 操作XML入门
2008/12/25 Javascript
JavaScript Event学习第五章 高级事件注册模型
2010/02/07 Javascript
Extjs TimeField 显示正常时间格式的代码
2011/06/28 Javascript
浅析jQuery对select操作小结(遍历option,操作option)
2013/07/04 Javascript
JavaScript实现在标题栏上显示当前日期的方法
2015/03/19 Javascript
js禁止浏览器的回退事件
2017/04/20 Javascript
vue.js中Vue-router 2.0基础实践教程
2017/05/08 Javascript
详解微信小程序中的页面代码中的模板的封装
2017/10/12 Javascript
详解使用Nuxt.js快速搭建服务端渲染(SSR)应用
2019/03/13 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
python采集博客中上传的QQ截图文件
2014/07/18 Python
python 2.7 检测一个网页是否能正常访问的方法
2018/12/26 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
2019/01/08 Python
python文本数据处理学习笔记详解
2019/06/17 Python
python 读写文件包含多种编码格式的解决方式
2019/12/20 Python
python numpy--数组的组合和分割实例
2020/02/24 Python
python中tab键是什么意思
2020/06/18 Python
Python安装Bs4的多种方法
2020/11/28 Python
英国知名的皮手套品牌:Dents
2016/11/13 全球购物
意大利在线购买隐形眼镜网站:VisionDirect.it
2019/03/18 全球购物
数据库什么时候应该被重组
2012/11/02 面试题
丑小鸭教学反思
2014/02/03 职场文书
应届毕业生如何写求职信
2014/02/16 职场文书
医学生临床实习自我评价
2014/03/07 职场文书
统计工作个人总结
2015/03/03 职场文书
实习单位鉴定意见
2015/06/04 职场文书
雷锋的观后感
2015/06/10 职场文书
九年级语文教学反思
2016/03/03 职场文书
MySQL 使用SQL语句修改表名的实现
2021/04/07 MySQL