Swoft View 视图
参考资料
- swoft-view https://github.com/swoft-cloud/swoft-view
Swoft提供PHP原生语法的视图渲染支持,并提供基础的布局以及内部引入文件等功能。
视图安装
Swoft视图渲染可作为额外单独组件使用,首先检查当前Swoft项目是否已经安装了swoft-view
组件。
$ vim composer.json
"require":{"swoft/view": "^1.0",
}
如果composer.json
文件中已经存在swoft/view
组件则无需安装,若不存在则可在require
选项中加入"swoft/view": "^1.0"
组件后,使用composer install
进行安装。另一种方式则直接通过composer
命令进行安装:
$ composer require swoft/view dev-master
swoft-view
组件主要包含两个核心文件
Swoft\View\Base\View
视图核心类Swoft\View\Bean\Annotation\View
视图注解tag
类
视图配置
安装swoft-view
组件后,Swoft会自动对它进行注册,视图组件注册到容器里的名称为view
。
$ vim vendor/swoft/view/src/Bootstrap/CoreBean.php
public function beans():array
{return ['view' => ['class' => View::class,],];
}
注册后可获取视图组件实例:
$ vim vendor/swoft/view/src/Helper/Functions.php
view(string $template, array $data = [], $layout = null)
注册后可获取视图组件实例:
Swoft::getBean("view")
视图的配置位于基本配置config/beans/base.php
中的view
选项中
'view' => ['viewsPath' => '@resources/views/',
],
配置选项
viewsPath
视图文件存放地址,@resources
默认地址为根目录下的resources
目录。layout
默认布局文件,使用render()
方法调用时默认会使用它。placeholder
在布局文件中使用的内容占位符,默认为{_CONTENT_}
suffix
视图文件后缀,默认为php
。suffixes
允许的视图文件后缀列表,用于判断是否需要添加默认后缀。
视图引入
可以在视图文件中引入并加载其它视图文件:
$ vim vendor/swoft/view/src/Base/View.php
include(string $view, array $data, bool $outputIt=true)
例如:在项目默认的视图布局文件中resources\views\layouts\default.php
<?php
/*** @var \Swoft\View\Base\View $this*/
?>
<!doctype html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Demo for layout</title><link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/4.0.0-beta/css/bootstrap.min.css">
</head>
<body><?php $this->include('layouts/default/header') ?><div class="container"><!-- Content here --><div id="page-content" style="padding: 15px 0;">{_CONTENT_}</div><?php $this->include('layouts/default/footer') ?></div>
</body>
</html>
<?php $this->include('layouts/default/header') ?>
布局中引入页头<?php $this->include('layouts/default/header', ['logo' => 'xx/yy/logo.jpg']) ?>
引入页头并传递参数<?php $this->include('layouts/default/footer') ?>
布局中引入页脚{_CONTENT_}
内容占位符
视图使用
- 在控制器的动作方法注释中可使用
@view()
注解来渲染视图文件
/*** 视图渲染demo - 没有使用布局文件.** @RequestMapping()* @View(template="demo/view")*/
public function view()
{$data = ['name' => 'Swoft','repo' => 'https://github.com/swoft-cloud/swoft','doc' => 'https://doc.swoft.org/','doc1' => 'https://swoft-cloud.github.io/swoft-doc/','method' => __METHOD__,];return $data;
}
@View(template="demo/view")
注解中指明了动作方法对应的视图文件,动作方法仅需要返回数组类型视图参数。
- 在控制器中可使用
view()
快捷函数渲染一个视图文件
view(string $template, array $data = [], $layout = null)
在Action动作方法中使用view()
函数时,注意Action动作方法返回值类型是Response
类型的对象。
/*** @RequestMapping()* @return Response*/
public function absolutePath(): Response
{$data = ['name' => 'Swoft','notes' => ['New Generation of PHP Framework', 'High Performance, Coroutine and Full Stack'],'links' => [['name' => 'Home','link' => 'http://www.swoft.org',],['name' => 'Documentation','link' => 'http://doc.swoft.org',],['name' => 'Case','link' => 'http://swoft.org/case',],['name' => 'Issue','link' => 'https://github.com/swoft-cloud/swoft/issues',],['name' => 'GitHub','link' => 'https://github.com/swoft-cloud/swoft',],]];$template = 'index/index';return view($template, $data);
}
视图文件查找
@View(template="demo/view")
- 默认不添加后缀,系统将会自动追加配置的默认后缀。
- 默认使用相对路径,系统将会在
view
配置中的'viewsPath' => '@resources/views/'
指定的视图目录中寻找对应的视图文件。 - 及射入使用绝对路径,则直接使用并渲染,同时支持使用路径别名
@res/views/viewname.php
。
视图使用布局文件
- 可在
view
配置项中指定layout
配置默认布局文件,默认无layout
配置项也会使用默认的配置。 - 可手动设置布局文件,手工指定的优先级将高于系统默认配置。
- 可在
view(string $template, array $data = [], $layout = null)
中设置禁用或启用渲染布局文件
视图加载静态资源文件
Swoft提供静态资源访问的支持,将静态文件放置于根目录下的public
目录内即可。
<script type="text/javascript" src="/static/some.js"></script>
当访问本地CSS文件时,浏览器会出现警告,导致本地CSS文件无法加载:
<link rel="stylesheet" href="/assets/css/AdminLTE.css">
Resource interpreted as Stylesheet but transferred with MIME type application/json: "http://192.168.99.100/assets/css/AdminLTE.css".
警告:CSS资源被解释为样式表,但传递的却是application/json的MIME类型。
如果直接使用浏览器访问CSS样式表:http://192.168.99.100/assets/css/AdminLTE.css
{"msg":"Route not found for \/assets\/css\/AdminLTE.css","file":"\/var\/www\/swoft\/vendor\/swoft\/http-server\/src\/Router\/HandlerAdapter.php","line":49,"code":404
}
为什么会出现这样的问题呢?因为没有开启【资源处理器】enable_static_handler
配置项。
$ vim config/server.php
'setting' => [# 是否开启静态资源处理器,优先从环境配置.env中获取,获取失败则使用默认值。'enable_static_handler' => env('ENABLE_STATIC_HANDLER', true),
],
本地访问,可在环境配置.env
文件中添加ENABLE_STATIC_HANDLER
配置项。
$ vim .env
# 是否开启静态资源处理器
ENABLE_STATIC_HANDLER=true
视图变量
Swoft提供PHP原生语法的视图渲染支持
<title><?= $name ?></title>
未完待续...
Swoft View 视图相关推荐
- 【Android 逆向】IDA 工具使用 ( 同步指定的 IDA View 视图 | Hex View 数据格式 | 过滤设置 )
文章目录 一.同步指定的 IDA View 视图 二.Hex View 数据格式 三.过滤设置 一.同步指定的 IDA View 视图 IDA 中可以 同时打开多个 IDA View ( 下图红色矩形 ...
- 查看mysql view作用_Mysql中View视图的作用
浙江PHP博客分享关于Mysql中使用View视图的作用.很多小伙伴知道视图的作用,却不知道为什么要使用视图以及视图的一些好处是什么,下面浙江一点PHP将详细阐述关于视图的用法以及作用. 作用一: 提 ...
- {{view 视图层}}微信小程序
微信小程序 view 视图层//自学 1.数据绑定 数据绑定WXML中的动态数据均来自对应Page的data. 简单绑定数据绑定使用"Mustache"语法(双大括号)将变量包起来 ...
- 动态切换view视图viewflipper组件
2019独角兽企业重金招聘Python工程师标准>>> 个人理解viewflipper,他其实就是切换view视图很方便而已,在做广告的时候有利用的价值,它可以自己来进行图片的每隔多 ...
- IAR的View视图菜单中Watch、 Live Watch、 Quick Watch、 Auto、 Locals、 Statics这几个子菜单的含义和区别
一.简述IAR的View视图菜单 View这个菜单的意思就是打开(已关闭的)视图窗口,比如我们的工作空间窗口不见了,就可以通过该菜单打开. 不瞒大家,以前我初学软件的时候,常用的视图窗口不小心被我关闭 ...
- 数据库中的Schema(模式)和View(视图)
Schema(模式) 在mysql中,Schema和database即数据库的概念类似,利用建模式的语句 create schema name同样可以创建一个库 而在其他数据库中,例如oracle,S ...
- php 身份认证 claim,asp.net core cookie身份认证view视图中读取/读取User.Claims中的值实例...
假设claim如下,q为查询出来的用户表结果集 var claims = new List(){ new Claim("UserId", q.Id.ToString()), new ...
- 微信小程序View视图容器组件
完整微信小程序(Java后端) 技术贴目录清单页面(必看) 微信小程序框架为开发者提供了一系列完备的UI组件,方便开发者快速构建小程序UI界面.借助这些UI组件开发者可以像搭积木一样快速地拼装出一栋房 ...
- Android中View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解...
2019独角兽企业重金招聘Python工程师标准>>> 今天继续给大家分享下View的相关知识,重点有一下两点: 1.View的几种不同状态属性 2.如何根 ...
最新文章
- Python---读图(glob读取图片文件列表)
- MySQL编译安装及主从配置
- 【Flutter】Flutter 混合开发 ( Flutter 与 Native 通信 | 完整代码示例 )
- Bag of Words cpp实现(stable version 0.01)
- 【三种解法】剑指 Offer 06. 从尾到头打印链表【附完整可运行代码】
- DockerONE 干货 深入理解Docker容器和镜像
- Django集合Ueditor
- lisp 发凹圆角_css能实现这样的内凹圆角吗?如何实现?具体代码是!!
- 5款手机通讯录同步工具
- FPGA信号处理系列文章——DDS的性能和误差分析
- android的歌词播放,android手机音乐播放器实现歌词同步
- a超链接锚点的设置和应用 三国演义
- 两个最热门的BI软件:Tableau和Finereport
- 年化收益率超50%的“白马股基金”,幕后操盘手终于找到了!
- FFmpeg使用滤镜链为视频插入多张图片
- 讲解一些复变函数的基础概念
- 直播美颜SDK代码浅析:直播平台接入美颜SDK是怎样实现美颜的?
- 【细节呈现】用Python编写2048游戏(命令行版)
- O2O模式和B2C模式的区别是什么?
- ctf镜子里面的世界_通过机械装置,这名艺术家把木头和玩偶做成了“镜子”
热门文章
- 把备考高项当成项目:我的信息系统项目管理师项目实施方案
- 多线程-银行出纳员仿真
- 字体像素html,Chrome中的字体像素问题(HTML5 / CSS3)
- 12.13 Daily Scrum
- SpaceClaim脚本功能(Beta功能)
- 李永乐复习全书概率论与数理统计 第五、六章 大数定律和中心极限定理及数理统计的基本概念
- 食蔬宝分拣称重软件V1.0
- Java ee 网络层重点协议IP协议
- 切换RequiredFieldValidator和RegularExpressionValidator提示信息的控件
- flash右键菜单代码