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与javascript对多项选择的处理
Oct 09 PHP
PHP无限分类的类
Jan 02 PHP
PHP5.2下chunk_split()函数整数溢出漏洞 分析
Jun 06 PHP
php的ajax框架xajax入门与试用介绍
Dec 19 PHP
PHP curl_setopt()函数实例代码与参数分析
Jun 02 PHP
PHP详解ASCII码对照表与字符转换
Dec 05 PHP
PHP实现PDO的mysql数据库操作类
Dec 12 PHP
php使用cookie显示用户上次访问网站日期的方法
Jan 26 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
Aug 31 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
Dec 28 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
Oct 11 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 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版(5)
2006/10/09 PHP
dede全站URL静态化改造[070414更正]
2007/04/17 PHP
php中hashtable实现示例分享
2014/02/13 PHP
typecho插件编写教程(六):调用接口
2015/05/28 PHP
php实现模拟post请求用法实例
2015/07/11 PHP
PHP获取数组中指定的一列实例
2017/12/27 PHP
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
jQuery 滑动方法slideDown向下滑动元素
2014/01/16 Javascript
根据当前时间在jsp页面上显示上午或下午
2014/08/18 Javascript
jQuery通过deferred对象管理ajax异步
2016/05/20 Javascript
原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)
2016/06/21 Javascript
EasyUI加载完Html内容样式渲染完成后显示
2016/07/25 Javascript
Bootstrap3 图片(响应式图片&图片形状)
2017/01/04 Javascript
详解Angular4 路由设置相关
2017/08/26 Javascript
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
解决vue 界面在苹果手机上滑动点击事件等卡顿问题
2018/11/27 Javascript
[04:15]DOTA2-DPC中国联赛1月19日Recap集锦
2021/03/11 DOTA
Flask数据库迁移简单介绍
2017/10/24 Python
Python获取CPU、内存使用率以及网络使用状态代码
2018/02/08 Python
django重新生成数据库中的某张表方法
2019/08/28 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
2020/01/04 Python
详解python tkinter模块安装过程
2020/01/06 Python
你应该知道的Python3.6、3.7、3.8新特性小结
2020/05/12 Python
Python脚本如何在bilibili中查找弹幕发送者
2020/06/04 Python
印尼第一大家居、生活和家具电子商务:Ruparupa
2019/11/25 全球购物
党员个人剖析材料(四风问题)
2014/10/07 职场文书
2014年涉外离婚协议书范本
2014/11/20 职场文书
毕业生自荐信范文
2015/03/05 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书
2015年度房地产工作总结
2015/04/09 职场文书
2015年施工员工作总结范文
2015/04/20 职场文书
运动会开幕式通讯稿
2015/07/18 职场文书
家属联谊会致辞
2015/07/31 职场文书
JavaScript实现酷炫的鼠标拖尾特效
2022/02/18 Javascript
PostgreSQL怎么创建分区表详解
2022/06/25 PostgreSQL