宝哥软件园

Laravel学习教程视图模块详解

编辑:宝哥软件园 来源:互联网 时间:2021-09-03

本文主要介绍Laravel中View模块的相关信息,并分享给大家参考和学习。下面就不多说了。我们来看看详细的介绍。

本文是基于Laravel版路由模块代码进行分析编写的。

文件结构

视图模块的文件结构和功能如下图所示:

视觉呈现的大致流程:

1.通过调用view()方法开始视图的呈现;

2.首先,找到视图文件;

(1)依次遍历路径,如果文件名有命名空间(即:3360之前的部分),则使用与命名空间对应的已注册路径数组,否则使用全局路径数组(lighting View file取景器类中的path变量);

(2)结合当前路径、文件名、后缀名(默认顺序为blade.php、php、css)判断文件是否存在;

(3)如果文件不存在,报告异常:对应的视图文件不存在;如果文件存在,根据后缀名称调用对应的引擎进行解析;

3.如果是css后缀,使用文件引擎,核心调用方法是file _ get _ contents

4.如果是php后缀,使用php引擎,核心调用方法是

ob _ start();包括$ _ _路径;ob _ get _ clean();5.如果是blade后缀,使用叶片发动机;

这个引擎会主动缓存。如果缓存文件没有过期,会直接调用缓存文件,否则会重新编译,通过sha1生成缓存文件(位于storage/framework/view目录下)。

刀片引擎编译

Blade引擎编译文件是通过大量的定期匹配替换实现的;

受保护的$编译器=['comments ',//注释部分' Extensions ',//扩展部分' Statements ',//语句块(@ initial指令)' Echos ',//output];受保护的函数parseToken($token) { list($id,$ content)=$ token;if($ id==T _ INLINE _ HTML){ foreach($ this-编译器为$ type){ $ content=$ this-{ ' compile { $ type } ' }($ content);}}}在解析过程中,Blade首先会使用token_get_all函数获取视图文件中被PHP解释器认为是HTML(T_INLINE_HTML)的部分,然后定期依次替换Comments、Extensions、Statements和Echos部分;

评论区

核心代码如下:用空字符串替换注释符号“{{-}}”包装的代码;

preg_replace('/{{ -(。*?)- }}/s ','',$ value);延伸部分

通过扩展方法给BladeCompiler添加自定义回调函数,对模板内容进行自定义文本匹配和替换;

核心代码在照明视图刀片编译器文件中,如下所示:

//自定义文本替换扩展数组受保护$ extensions=[];受保护函数compileExtensions($value){ foreach($ this-extensions as $ compiler){ $ value=call _ user _ func($ compiler,$ value,$ this);}返回$ value}指令替换

这一部分是替换框架附带的指令文本,如@if和通过directive方法注册的指令;

框架提供的说明有以下十个部分:

视图编译器关注编译授权:权限检查指令包括:@can、@ can、@elsecan、@endcan、@ end can关注编译组件:与组件和插槽相关的指令包括:@component、@endcomponent、@slot、@endslot关注编译条件:与判断语句相关的指令包括:@if、@除非、@ else、@elseif、@ endif、@ endunless、@isset、@ endisset、@hassection关注编译包含:嵌入文件@show、@append、@overwrite、@stop、@endsection关注点 CompilesLoops:与循环相关的指令包括:@forelse、@empty、@ endforelse、@ for、@foreach、@break、@continue、@endfor、@endforeach、@while、@endwhile关注点 CompilesRawPhp:与本机Php语句相关的指令包括:@php、@endphp、@unset关注点 CompilesStacks:与堆栈相关的指令包括:@stack、@push、@endpush、@ php

回声输出用于{!}、{{}}、{{{}}定期更换;

{!}输出非转义字符,用于输出本机html标记的值;{{}}输出正常,支持三眼运算符替换;{{{}}}输出转义字符,支持三项式运算符替换;三方运算符替代指:{{ $a?“默认值”}}(或{{$a或“默认值”}})替换为{{ isset($a)?$a :“默认值”}}

参考文章

浅析Laravel模板引擎(叶片)原理

Laravel 5.4文档前端——刀片模板

摘要

以上就是本文的全部内容。希望本文的内容能给你的学习或工作带来一些帮助。有问题可以留言交流。谢谢你的支持。

更多资讯
游戏推荐
更多+