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 相关文章推荐
用Flash图形化数据(一)
Oct 09 PHP
php 无极分类(递归)实现代码
Jan 05 PHP
劣质的PHP代码简化
Feb 08 PHP
php 缩略图实现函数代码
Jun 23 PHP
php使用异或实现的加密解密实例
Sep 04 PHP
简单的php中文转拼音的实现代码
Feb 11 PHP
PHP实现QQ空间自动回复说说的方法
Dec 02 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
Feb 27 PHP
php操作access数据库的方法详解
Feb 22 PHP
php 静态属性和静态方法区别详解
Apr 09 PHP
PHP的PDO预处理语句与存储过程
Jan 27 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
Mar 26 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
MVC模式的PHP实现
2006/10/09 PHP
PHP实现图片简单上传
2006/10/09 PHP
php实现简单的上传进度条
2015/11/17 PHP
PHP5.3新特性小结
2016/02/14 PHP
RR vs IO BO3 第一场2.13
2021/03/10 DOTA
一个javascript参数的小问题
2008/03/02 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
2014/02/13 Javascript
javascript获取元素偏移量的方法有哪些
2014/06/24 Javascript
JavaScript常用脚本汇总(二)
2015/03/04 Javascript
jQuery操作基本控件方法实例分析
2015/12/31 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
最实用的jQuery分页插件
2016/10/09 Javascript
jQuery实现遍历复选框的方法示例
2017/03/06 Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
2017/03/10 Javascript
js提取中文拼音首字母的封装工具类
2018/03/12 Javascript
用vue写一个日历
2020/11/02 Javascript
Python实现ssh批量登录并执行命令
2016/10/25 Python
Python中单、双下划线的区别总结
2017/12/01 Python
python使用xlrd和xlwt读写Excel文件的实例代码
2018/09/05 Python
在python下使用tensorflow判断是否存在文件夹的实例
2019/06/10 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
2019/07/15 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
2019/08/02 Python
浅谈python累加求和+奇偶数求和_break_continue
2020/02/25 Python
python实现同一局域网下传输图片
2020/03/20 Python
Python实现加密的RAR文件解压的方法(密码已知)
2020/09/11 Python
python 录制系统声音的示例
2020/12/21 Python
HTML5样式控制示例代码
2013/11/27 HTML / CSS
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
输入N,打印N*N矩阵
2012/02/20 面试题
车间班组长的职责
2013/12/13 职场文书
小学生班会演讲稿
2014/01/09 职场文书
2014社区三八妇女节活动总结
2014/03/01 职场文书
保护环境倡议书
2014/04/14 职场文书
音乐节策划方案
2014/06/09 职场文书
2014年精神文明工作总结
2014/12/23 职场文书
浅谈MySQL user权限表
2021/06/18 MySQL