• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例

    本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

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

    您可能感兴趣的文章:
    • Laravel关联模型中过滤结果为空的结果集(has和with区别)
    • Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
    • Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
    • Laravel4中的Validator验证扩展用法详解
    • 关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
    • laravel容器延迟加载以及auth扩展详解
    • Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
    • Laravel框架中扩展函数、扩展自定义类的方法
    • laravel框架实现敏感词汇过滤功能示例
    上一篇:laravel框架模型和数据库基础操作实例详解
    下一篇:yii2.0框架场景的简单使用示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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