ThinkPHP 5.0--基础篇****(视图和模版)
一、视图view
i. 主要展示界面 可以接受用户输入等操作 通常是一个html页面
ii. 助手函数 view()
如果没有对模版进行配置(没有在配置文件中修改 )默认调用 当前模块/view/当前控制器/当前方法名.html
- view() 传递一个参数之后 return view(‘a’) ;
- 传递一个带路径的参数 return view(‘config/a’) ;
- 传递路径 ./ return view(‘./a.html’) ; public/index.php入口文件 ./同级 此种写法 必须加上后缀 .html
- View()助手函数 传递两个参数
- view()助手函数的第三个参数 替换
- 总结:使用助手函数很方便 但是有隐患 如 同名函数覆盖 一些配置失效等等
iii. return $this->fetch() 传递三个参数 使用方法同上 (use think\Controller) extends Controller
iv. 使用$this->assign(‘’,’’) 传递变量
v. $this->display(‘串’) 与模版没有关系
$this->assign(‘a’,’123’) ; $this->fetch(‘index.html’) 将变量传递到模版index.html
vi. $this->assign(‘a’,’123’) ; 也可以向$this->display(‘字符串{$a}’)中传递变量
二、模版变量输出 替换 赋值
i. 经过php编译器解析 模版文件最终 编译成.php文件 输出 runtime/temp
ii. 模版语法 {} 以花括号开始结束标记 惯例配置(thinkphp/convention.php) ---【详情参见 配置篇】
- 拷贝到应用配置文件中 测试 (conf/config.php)
- 配置这两个选项的场景: 程序中使用了 Vue.js|AngularJS|Angular2...这样的前端框架 很有可能和模版冲突 就需要修改此处的 开始 结束标记
iii. 变量输出---模版中{$a} 变量和开始|结束标记之间 不能有空格{ $a }
iv. 变量赋值---向模版文件中输出变量
- fetch(‘’,[])的第二个参数 数组类型
- assign(‘’,’’) key=>value类型
- view方法 继承Controller之后 key=>value
- share静态方法 ThinkPHP5.0.4 之后
- 上述四种方法 可同时有效
v. 替换
fetch(‘’,[],[‘ABC’=>’页面上的ABC替换成此内容’])第三个参数
-
修改配置文件 thinkphp/convention.php
// 视图输出字符串内容替换
'view_replace_str' => [],
a) 在应用配置文件中修改配置
b) 多个模块的时候 可以使用扩展配置 分模块配置 ---【详情参见 配置篇】
i. 传统
ii. 潮流
林子大了 鸟多了 维护起来更方便 逼格高!
thinkphp\library\think\View.php 默认配置
- 优先级 同配置优先级 方法>控制器>扩展>应用>惯例 【详情参见 配置篇】 这个配置上传下载目录 尤其明显
三、系统变量原生标签
i. 模版中使用系统变量
ii. 使用系统变量 获取当前用户 服务器信息 配置信息等等
iii. 模版文件中也可以使用 php原生标签
可以用但是不推荐使用 混编 不利于维护 最好前后台代码分离 前台展示数据 后台处理数据
四、变量输出调节器
i. 在模版中使用函数 md5()加密 substr() 截串 date() 格式化
ii. 数值运算 自增 自减
iii. default 定义默认值
iv. {literal}中间的内容不会被编译 原样输出{/literal}
v. 注释
页面上不显示 查看源代码能看到
{/* 模版注释 */} 页面不显示 查看源代码看不到
五、模版循环标签
i. volist标签通常用于查询数据集(select方法)的结果输出,通常模型的select方法返回的结果是一个二维数组,可以直接使用volist标签进行输出。
- 默认 迭代器遍历数组中所有数据
a) 在控制器中首先对模版赋值:
b) 在模版定义如下,循环输出用户的编号和姓名:
c) name属性:当前模板赋值的变量名称,
Id:表示当前的循环变量,可以随意指定 v|k|data...
- 查询结果中的部分数据,
a) 输出5~15条记录
b) 输出偶数记录
- 可传入的参数:
a) offset: offset=’5’ 从第五条记录开始遍历
b) length: 遍历的长度(当前循环的次数)
c) mod: 对当前循环次数取余
d) empty: empty=”暂时没有数据” 支持变量输出
e) key: 数组索引 直接使用$i|$key即可 或者指定key属性 key=’s’ 用$s 获取索引
ii. foreach 类似于volist 没有太多额外属性
- 最简单
- 也可以用name:数据源 item:循环变量指定
- 直接 $key 输出索引 或者 key=’k’ $k获取当前索引
iii. for循环
- 开始值、结束值、步进值和循环变量都可以支持变量,开始值和结束值是必须,其他是可选。comparison 的默认值是lt,name的默认值是i,步进值的默认值是1
- 解析之后
六、比较标签
i. eq|equal|nequal|notequal 相等|不等
ii. gt|lt 大于|小于
iii. egt|elt 大于等于|小于等于同理
iv. 以上比较是变量(name=’X’) 和一个数值的比较 变量和变量的比较 value=”$b” 其他同理
七、条件判断标签
i. Switch标签
- 语法:
- 如:
- name:可以使用函数以及系统变量 name=”Think.get.sid|abs”
case的value属性支持多个条件判断 |分割
{case value=”gif|png|jpg”}图片格式{/case}
也可以使用变量 是用变量不支持多个条件判断
默认case会自动添加break 如果不要break
- 简单用法:
ii. if标签
- 语法:
- condotion属性:
a) 使用php代码
condition="strtoupper($user['name']) neq 'THINKPHP'"
b) 支持点|对象语法
condition="$user.name neq 'ThinkPHP'"
condition="$user:name neq 'ThinkPHP'"
c) 简单用法
d) 三种写法 结果是一样的
iii. in | notin |between |notbetween 判断变量是否在某个范围
- Value可用变量 $range可以是数组 也可以是以逗号分割的字符串 value也可以是系统变量
- Between同理 value代表区间 传入两个值,(系统)变量|数组
iv. range
- 语法:
- 其中type属性的值可以用in/notin/between/notbetween,其它属性的用法和IN或者BETWEEN一致。
v. Defined常量是否定义
- 语法:
- name:属性值 严格大小写
八、模版的布局 包含和继承
i. 包含 模版引入 include
ii. 继承
定义base.html 作为父模版(基板)文件
其他模版文件继承
- 在基板文件中 刨坑
- 在其他 继承基板的文件中 填土
坑可以有多个 但是给坑起的名字不能一样 否则就填错土了
填坑的时候 可以在基板的基础上填(继承基板坑里面的内容)
{block} 基板这个坑里面的东西
iii. 布局 layout
- 应用配置 conf/config.php 模版配置'template' => [] ;里面新增配置
- 开启layout之后 fetch()默认查找的是 view/layout.html (文件名对应 layout_name)
- 定义base.html(基板文件) --替换内容的地方 只挖了一个坑
- 其他模版文件 不需要继承直接输出 替换的就是{CONTENT}的内容 填坑
想挖更多的坑 在layout.html中{$a} {$b}变量的形式接收
在其他模版文件中 $this->assign(‘a’,’XXX’) ; $this->assign(‘b’,’XXX’);即可
iv. 什么情况下用继承|布局 视情况而定吧