整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

「ThinkPHP5开发连载73」tp5连载模板内置

「ThinkPHP5开发连载73」tp5连载模板内置标签之资源文件加载

一篇文章讲解“模型-内置标签之条件标签”,本篇文章讲解“模板-内置标签之资源文件加载”。


资源文件加载

资源文件加载即是在模板中引入CSS、JS等资源文件。

传统方式的导入外部JS和CSS文件的方法是直接在模板文件使用:

1. load标签

系统提供了专门的标签来简化上面的导入:

①新建Index控制器,并新建index方法

②新建index.html模板,并引入资源文件

③新建script.js与style.css资源文件

script.js文件:

style.css文件:

注意:

1. ThinkPHP中资源文件的位置为“public/static/”下。

预览:

④配合“模板输出替换”使用

由于文件路径不对,导致资源文件加载失败,可以配合模板输出替换使用。

在config/template.php文件中,定义模板输出替换:

⑤在index.html模板中使用模板输出替换

预览:


2. 同时加载多个资源文件

在index.html模板中,使用load标签同时加载多个资源文件。

预览:

注意:

1. load标签支持同时加载多个资源文件,文件之间用逗号隔开。


3. js与css标签

系统还提供了两个标签别名js和css,用法和load一致。

在index.html模板文件中,使用js与css标签加载资源文件。

预览:

ThinkPHP5连载为卓象程序员原创,转载请联系卓象程序员

关注卓象程序员,定期发布技术文章

下一篇讲解“模板-内置标签之标签嵌套+原生PHP”

?

程大纲

  1. 加载公共入口文件

  2. 项目初始化Init

  3. 项目预编译

  4. URL分析Dispather

  5. 获取模块和操作名

  6. 项目执行exec

  7. 执行控制器的操作

  8. 调用模块获取数据

  9. 输出视图

入口文件的定义

<?php

define('THINK_PATH', '../ThinkPHP');

//定义项目名称,如果不定义,默认为入口文件名称

define('APP_NAME', 'web');

define('APP_PATH', './web');

//加载ThinkPHP框架公共入口文件

require(THINK_PATH.'/ThinkPHP.php');

//实例化一个网站应用实例

$App=new App();

//执行应用程序

$App->run();

?>

ThinkPHP.php里面的干了些啥

记录开始执行时间 $GLOBALS[‘_beginTime’](19行)

检测 THINK_PATH、 APP_NAME、 APP_PATH、 RUNTIME_PATH 定义,如果没有则创建(20-26行)

//不知道你发现没有,以index.php这基准,通过APP_PATH,可以组装出任意路径

检查开启ALLINONE模式 (22行)

把核心编译缓存和项目编译缓存合并到一个文件里面去,并且过滤掉一些运行模式不需要执行的代码,并且对于用户的自定义常量全部统一定义,不再进行额外的检测。

检查是否有核心缓存~runtime.php(33行)

if(file_exists(RUNTIME_PATH.'~runtime.php')) {

// 加载框架核心缓存文件

require RUNTIME_PATH.'~runtime.php';

}else{

//1.加载define.php和functions.php

//2.如果项目编译缓存目录不存在,则自动创建项目目录结构

//3.加载系统核心类库(包括ThinkPHP\LIB\THINK下级各子目录下的 Base、App、Action、Model、View、ThinkException、Log)

//4.如果 PHP 版本低于 5.2.0 则加载兼容函数库

//生成核心编译~runtime缓存

}

记录加载文件时间 $GLOBALS['_loadTime'];

进入ThinkPHP\Lib\Think\Core\App

入口文件中调用的$App->run()

public function run() {

$this->init();

$this->exec();

return ;

}

$App->run()返回的时候,对一个请求的处理就算完成了

App.class.php的init函数(1)

1.设定错误和异常处理机制(39-40行)

(set_error_handler和set_exception_handler)

2.项目预编译并载入(44-52行)

// 在部署模式下会自动在第一次执行的时候编译项目

if(defined('RUNTIME_MODEL')){

// 运行模式无需载入项目编译缓存

}elseif(is_file(RUNTIME_PATH.'~app.php') && (!is_file(CONFIG_PATH.'config.php') || filemtime(RUNTIME_PATH.'~app.php')>filemtime(CONFIG_PATH.'config.php'))) {

// 直接读取编译后的项目文件

C(include RUNTIME_PATH.'~app.php');

}else{

// 预编译项目

App::build();

}

3.设置时区支持(59-60行)

4.允许注册AUTOLOAD方法、 session初始化(62-66行)

5. URL分析和调度(71行)

执行Dispatcher类的静态方法 dispatch() 。这段代码很不错。

6.加载项目分组公共文件(82-90行)

if(!defined('GROUP_NAME')) define('GROUP_NAME', App::getGroup());

7.取得模块和操作名称(92-93行)

if(!defined('MODULE_NAME')) define('MODULE_NAME', App::getModule());

if(!defined('ACTION_NAME')) define('ACTION_NAME', App::getAction());

8.加载模块配置文件(95-97行)

9.系统检查(99-104行)

App::checkLanguage(); //语言检查

App::checkTemplate(); //模板检查

if(C('HTML_CACHE_ON')) // 开启静态缓存

10.项目初始化标签

初始化完成,init返回

App.class.php的getGroup

App.class.php 228行

1. 检查 VAR_MODULE 变量(231行)

(包括 GET 和 POST), 如果未定义,则获取默认分组名

分组名称解析完毕,也就是http://server/project/index.php/Model/Action/的project部分,回到init

App.class.php 186行

1. 检查 VAR_MODULE 变量(189行)

(包括 GET 和 POST), 如果未定义,则获取默认模块名

2. 判断URL地址是否区分大小写

不区分,小写模块名

智能识别方式 index.php/user_type/index/ 识别到 UserTypeAction 模块

模块名称解析完毕,也就是http://server/project/index.php/Model/Action/的Model部分,回到init

App.class.php 209行

1. 检查 VAR_MODULE 变量(211行)

(包括 GET 和 POST), 如果未定义,则获取默认模块名

操作名称解析完毕,也就是http://server/project/index.php/Model/Action/的Action部分,回到init

App.class.php的exec函数(1)

1.创建Action控制器实例(379行)

A()函数

2.获取当前操作名(400行)

$action=ACTION_NAME;

3.执行操作(401-418行)

// 执行操作链 最多只能有一个输出

1.执行前置操作 '_before_'.$action

2.执行当前操作 $action

3.执行后缀操作 '_after_'.$action

exec执行完毕,一个请求处理完成了

小结

Thinkphp一次网页请求,就是实例化一个网站应用实例 ,并执行应用程序的过程。执行过程$App->run()分为init和exec两部分。

这中间还省略了一部分分析,比如RBAC,比如Model相关的代码,VIEW操作解析等,将在下次分享中讨论。

发一个管理后台,工作往往是繁琐而又重复的:用户登录、权限管理、图表展示、控制面板、增删改查等等,同时,需求也是多种多样的:电商系统、问答社区、客服系统、仓库管理等等,五花八门。能不能有一个框架,能直接搭建好项目骨架,让开发者专心于业务开发呢?FastAdmin或许是一个不错的选择。


简介

FastAdmin,是 karson 在 Gitee 上开源的后台开发框架,仓库位于 https://gitee.com/karson/fastadmin,目前版本为 v1.3.3.20220121。

FastAdmin 基于 ThinkPHP+Bootstrap,能够快速进行管理后台的开发。FastAdmin提供了强大的命令行工具,能够一键生成代码、一键管理插件等,提供了丰富的插件选择,基于MVC设计模式,基于模块化设计,共分为:前台、API、后台和公共等四大部分等。


使用

FastAdmin 的特性包括:

  • 基于Auth验证的权限管理系统
  • 支持无限级父子级权限继承,父级的管理员可任意增删改子级管理员及权限设置
    • 支持单管理员多角色
    • 支持管理子级数据或个人数据
  • 强大的一键生成功能
    • 一键生成CRUD,包括控制器、模型、视图、JS、语言包、菜单、回收站等
    • 一键压缩打包JS和CSS文件,一键CDN静态资源部署
    • 一键生成控制器菜单和规则
    • 一键生成API接口文档
  • 完善的前端功能组件开发
    • 基于AdminLTE二次开发
    • 基于Bootstrap开发,自适应手机、平板、PC
    • 基于RequireJS进行JS模块管理,按需加载
    • 基于Less进行样式开发
  • 强大的应用插件扩展功能,在线安装卸载升级应用插件
  • 通用的会员模块和API模块
  • 共用同一账号体系的Web端会员中心权限验证和API接口会员权限验证
  • 二级域名部署支持,同时域名支持绑定到插件
  • 支持大文件分片上传、分片直传、剪切板粘贴上传、拖拽上传,进度条显示,图片上传前压缩
  • 支持列表跨页选择记忆、分页大小记忆、左右固定列
  • 强大的应用模块支持(CMS、简单商城、知识付费问答、在线投票系统、Shopro商城、Fastflow工作流、CRM客户关系管理)
  • 支持CMS、博客、知识付费问答无缝整合Xunsearch全文搜索
  • Uniapp微信小程序支持(CMS小程序、活动报名小程序、民宿酒店预订小程序、问答小程序、简单商城小程序、Shopro商城小程序)
  • 整合第三方短信接口(阿里云、腾讯云短信)
  • 无缝整合第三方云存储(七牛云、阿里云OSS、又拍云)功能
  • 第三方富文本编辑器支持(Summernote、Nkeditor、百度编辑器)
  • 第三方登录(QQ、微信、微博)整合
  • 第三方支付(微信、支付宝)无缝整合,微信支持PC端扫码支付
  • 丰富的插件应用市场


使用FastAdmin,首先进行安装,要求环境如下:

PHP >=7.1 且 <=7.3 (推荐PHP7.1版本)
Mysql >=5.6 (需支持innodb引擎)
Apache 或 Nginx
PDO PHP Extension
MBstring PHP Extension
CURL PHP Extension
Git (用于源代码的版本管理)
Node.js (可选,用于安装Bower和LESS,同时打包压缩也需要使用到)
Composer (可选,用于管理第三方扩展包)
Bower (可选,用于管理前端资源)
Less (可选,用于编辑less文件,如果你需要增改css样式,建议安装上)

下载安装包后,

  1. 将下载的完整包解压到你的站点项目目录,不支持放在二级目录。
  2. 添加站点并绑定到项目中的public目录为运行目录。
  3. 访问你的项目域名进行安装,比如:https://demo.fastadmin.net/install.php 。
  4. 为了安全,安装完成后会在public目录生成随机后台入口,请通过随机后台入口登录管理后台。

安装完成后,就能进入后台了:

FastAdmin基于ThinkPHP5强大的命令行功能扩展了一系列命令行功能,可以很方便的一键生成CRUD、生成权限菜单、压缩打包CSS和JS、启用禁用插件等功能,如

//生成fa_test表的CRUD
php think crud -t test
//生成fa_test表的CRUD且一键生成菜单
php think crud -t test -u 1
//删除fa_test表生成的CRUD
php think crud -t test -d 1
//生成fa_test表的CRUD且控制器生成在二级目录下
php think crud -t test -c mydir/test

在FastAdmin中默认有四个应用模块:admin、api、common、index,你也可以扩展开发自己的应用模块。

  • 后台模块(admin)是FastAdmin中的核心模块,后台模块又分为系统配置、附件管理、分类管理、插件管理等多个功能模块,更多的功能模块可以在插件管理中自由的安装和卸载。后台的前端是基于AdminLTE和Bootstrap进行了大量二次开发,采用RequireJS进行JS模块化管理和加载。
  • 前台模块(index)的结构和后台功能类似,具体请参考后台模块的章节
  • 公共模块(common)是一个特殊的模块,默认是禁止直接访问的,一般用于放置一些公共的类或其它模块的继承基类等。
  • Api模块(api)通常用于对接APP,用于向APP提供接口,目前FastAdmin暂未提供API相关的插件和文档,你可以直接参考ThinkPHP5官方的文档。

FastAdmin插件丰富,提供了插件市场,能够随时获取各类插件,并直接在后台进行安装和管理:


总结

FastAdmin 基于 ThinkPHP+Bootstrap,提供了强大的命令行工具,能够一键生成代码、一键管理插件等,提供了丰富的插件选择,充分利用了ThinkPHP实现了高效可扩展的开发流程,能够快速完成管理后台的开发。