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 相关文章推荐
PHPShop存在多个安全漏洞
Oct 09 PHP
让你的PHP同时支持GIF、png、JPEG
Oct 09 PHP
用缓存实现静态页面的测试
Dec 06 PHP
php set_magic_quotes_runtime() 函数过时解决方法
Jul 08 PHP
php开启与关闭错误提示适用于没有修改php.ini的权限
Oct 16 PHP
PHP魔术方法__GET、__SET使用实例
Nov 25 PHP
php邮箱地址正则表达式验证
Nov 13 PHP
详解PHP的Yii框架的运行机制及其路由功能
Mar 17 PHP
Thinkphp3.2.3分页使用实例解析
Jul 28 PHP
PHP模拟http请求的方法详解
Nov 09 PHP
浅谈php(codeigniter)安全性注意事项
Apr 06 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
Feb 07 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提示undefined index的几种解决方法
2012/05/21 PHP
基于php验证码函数的使用示例
2013/05/03 PHP
preg_match_all使用心得分享
2014/01/31 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
yii2项目实战之restful api授权验证详解
2017/05/20 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
2019/10/15 PHP
js分页代码分享
2014/04/28 Javascript
AngularJs 60分钟入门基础教程
2016/04/03 Javascript
AngularJS表单验证中级篇(3)
2016/09/28 Javascript
jQuery实现拖动剪裁图片作为头像
2016/12/28 Javascript
浅谈Node.js爬虫之网页请求模块
2018/01/11 Javascript
利用CDN加速react webpack打包后的文件详解
2018/02/22 Javascript
JS获取本地地址及天气的方法实例小结
2019/05/10 Javascript
[42:22]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第一局
2016/02/27 DOTA
[43:41]OG vs Newbee 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
通过python下载FTP上的文件夹的实现代码
2013/02/10 Python
Python中为feedparser设置超时时间避免堵塞
2014/09/28 Python
Python中动态检测编码chardet的使用教程
2017/07/06 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
2019/06/17 Python
python super函数使用方法详解
2020/02/14 Python
使用Python内置模块与函数进行不同进制的数的转换
2020/04/26 Python
Python docutils文档编译过程方法解析
2020/06/23 Python
Django-celery-beat动态添加周期性任务实现过程解析
2020/11/26 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
2021/03/03 Python
详解canvas绘制多张图的排列顺序问题
2019/01/21 HTML / CSS
高级Java程序员面试题
2016/06/23 面试题
工程造价专业大学生职业生涯规划书
2014/01/18 职场文书
外语系大学生自荐信范文
2014/03/01 职场文书
文明班级建设方案
2014/05/15 职场文书
本科生就业推荐信
2014/05/19 职场文书
设备售后服务承诺书
2014/05/30 职场文书
安全施工标语
2014/06/07 职场文书
小学生民族团结演讲稿
2014/08/27 职场文书
写给同学的新学期寄语
2015/02/27 职场文书
Nginx反向代理、重定向
2022/04/13 Servers
SQL Server 中的事务介绍
2022/05/20 SQL Server