laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
本文实例讲述了laravel框架实现为Blade模板引擎添加新文件扩展名。分享给大家供大家参考,具体如下:
因为一些原因,我准备把BlessingSkin的框架换成Laravel了(之前是自己搭建的一个框架),但是在模板迁移的时候遇到了一点问题。
之前我是使用的XiaoLer/blade这个从Laravel中抽离出来的Blade模板引擎,并且自定义为使用.tpl文件后缀。你问为啥不用默认的.blade.php而是用这个Smarty的模板扩展名?能有啥,好看呗:-D
不过之前我是直接调用FileViewFinder类的addExtension方法来添加扩展名的,但是在Laravel里就不能这样了。你总不能在Illuminate\View加几句话吧?
去Google搜索了下,没发现有可以很方便使用的方法(当然是搜的鹰文,说不定是我姿势不对),就只好自己找了。
首先先从ViewFacade入手,可以看到它是从服务容器中解析出了view这个绑定。继续往下找,打开Illuminate\View\ViewServiceProvider,看看View的服务提供者到底是把啥给绑定到view上去了:
publicfunctionregisterFactory() { $this->app->singleton('view',function($app){ $resolver=$app['view.engine.resolver']; $finder=$app['view.finder']; $env=newFactory($resolver,$finder,$app['events']); $env->setContainer($app); $env->share('app',$app); return$env; }); }
嗯嗯,我们可以看到这是绑定了个Illuminate\View\Factory实例,于是我们继续往下找,看看这个工厂类都有啥方法:
/** *Registeravalidviewextensionanditsengine. * *@paramstring$extension *@paramstring$engine *@param\Closure$resolver *@returnvoid */ publicfunctionaddExtension($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是个啥子了:
/** *Theextensiontoenginebindings. * *@vararray */ protected$extensions=['blade.php'=>'blade','php'=>'php'];
啊哈,原来这个$engine指的是解析$extension所使用的引擎!这下一切都水落石出了,如果你在传入.tpl的同时传入一个blade的引擎,就是告诉Blade,要把以.tpl为扩展名的文件用Blade模板引擎来解析。
这下一切都简单了,我们只需要在AppServiceProvider(或者其他适当的服务提供者)里通过调用ViewFacade就可以非常方便快捷地添加扩展名了:
View::addExtension('tpl','blade');
更多关于Laravel相关内容感兴趣的读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。