TP5.0学习笔记
TP5目录结构介绍
application目录是应用目录,我们整个应用所有的内容都写在这个目录中,在后续开发中,我们更多的时候都是在编写这个目录中的文件。在它里边有一个index文件夹,它叫做模块儿,叫做Index模块儿,在它里边有一个controlller文件夹,它就是我们模块儿的控制层,在我们写代码的时候,我们还会在里边创建model和view文件夹,这样就组成了这个Index模块儿的MVC(controller控制层,model模型层,view视图层)
应用是支持多模块儿的,我们在写项目的时候,一般会分前台和后台,所以我们还可在里边创建一个admin模块儿来处理后台的逻辑。
command.php是控制台的配置文件,当我们用命令行执行thinkphp的时候,它会读取command.php的配置
common.php它是项目的公共文件,当我们编写一些通用函数的时候,比如我们写一个函数,想在所有的模块儿中都能调用,那么我们就可以把函数写在改文件中,它就可以注册到全局,在任何地方都可以调用
config.php它是应用的配置文件,整个用用都读取这个配置,也就是admin模块儿和index模块儿会通用这个配置
database.php它是数据库配置文件,如果我们需要连接数据库,那么我们只需要修改database.php的配置就可以了
route.php它是路由文件,当我们想对URL进行美化,那么我们就可以修改此文件,对其增加一些路由配置,就可以达到美化的效果
tags.php它是应用行为扩展文件,在thinkphp中,它为我们埋下了很多钩子,我们可以对框架进行扩展,而不需要修改框架本身的源码,我们需要在某一个钩子上注册某些函数,或者是注册某些行为,来通过行为来改变框架的执行流程
extend目录,这个目录是我们下载第三方库时候使用的,当然我们不是通过composer来下载的,比如说我们有一个第三方库,我们用着比较好用,但是它没有composer包,我们就可以将类库下载到extend目录,之后我们修改一下命名空间,就可以直接在我们的应用中使用
public目录,我们网站的根目录,也就是说我们网站根目录下所有的这些文件都是允许访问的
static目录主要用来放静态文件,比如说css,js,图片等等
index.php是整个网站或整个应用的入口文件,所有的请求都会经过index.php之后再去转发
robots.txt是搜索引擎爬虫文件,它主要是给搜索引擎看的,我们可以在这里定义某些链接或某些URL可以被搜索引擎爬取,某些不允许让搜索引擎爬取,比如我们后台的所有的URL链接是不希望搜索引擎爬取的,而前台我们一般需要。
router.php它是框架快速启动的测试文件,比如你本地没有安装Apache,只安装了PHP,那么我们可以同过,PHP内置的workserver来启动,通过这个文件,我们就可以启动这个框架
runtime目录,它是网站运行中的缓存文件,它包括日志,缓存和编译文件等等。
thinkphp它是框架文件,也就是说thinkphp5的框架都在里边
base.php是定义一些常量
composer.json它是定义composer的配置文件
console.php它是控制台的入口文件
convention.php是框架默认的控制文件
helper.php是 助手函数
lang这里边是语言包
library目录是框架的核心,它里边有think(它是整个框架的核心文件)和traits(它是类库的扩展)两个目录
LICENSE.txt是说明文件
start.php是框架启动文件
tpl目录,是我们框架默认的一些模板
default_index.tpl 它是我们自动生成的控制器模板文件
dispatch_jump.tpl它是我们网站发出成功或失败的中间跳转文件
page_trace.tpl它是我们调试时显示的模板文件
think_exception.tpl它是我们抛出异常时页面展示的文件
vendor目录是composer安装过程中生成的目录,通过composer安装的所有类库都被安装在了这个目录中
TP5目录和文件开发规范
1, 目录使用小写+下划线的方式命名
2, 所有的类库函数文件名均以.php结尾(在TP3.2版本中,我们定义控制器的时候是.class.php,但是TP要求是以.php结尾)
3, 类的文件名均以命名空间定义,且命名空间和类库文件所在的路径一致,看下边的图片
4,类文件采用驼峰首字母大写 其余文件为小写+下划线命名,比如
其余的普通文件,比如配置文件等,都是小写
5, 函数名采用驼峰命名,首字母小写,如(getUserInfo())
6, 属性名采用驼峰命名,首字母小写,如(tableName)
7, 以双下划线__开头的函数或方法为魔术方法
8, 常量以大写字母和下划线命名,比如
9, 配置参数是以小写字母和下划线命名,比如配置文件中
10, 表和字段采用小写+下划线的命名方式,不能以下划线开头
11, 应用类库的命名空间统一为app(可以配置)
模块设计
5.0版本对模块的功能做了灵活的设计,默认采用多模块的架构,并且支持单一模块设计,所有模块的命名空间均以app作为根命名空间(可配置更改)
如果在写一个网站的时候,admin目录就可以做我们的后台,index就可以作为我们的前台,我们还可以做更细致的拆分,比如再创建一个购物车模块,用户中心模块等。
注意:有一个比较特殊的模块,叫common(我们创建一下)
当我们在浏览器中访问该页面时,我们发现报错,说模块儿不存在
这个是ThinkPHP的一个规定,在整个项目中有很多模块是通用的一些方法,我们需要有一个地方来放置,ThinkPHP默认将common做成一个通用模块,它不允许我们直接在URL上直接访问该模块。那么我们又如何来访问我们的那个index方法呢?
我们在Index模块的index文件中再写一个common方法,我们该如何访问common写的Index呢?我们可以这样
在admin模块儿中要想访问common模块也是这种方法
有了common这样一个模块,它足够安全,它不允许我们直接在url中直接访问,减少了不必要的重复代码的编写。再看一个common的例子
我们改一下application,将其该成app
首先将application文件名改成app,然后再改一下public中的index.php
惯例配置
在ThinkPHP中,配置时非常重要的,ThinkPHP将我们所有的配置最终转化成数组提供给我们使用
ThinkPHP为我们提供了两种获取和设置配置的方式,一种是通过think下的config类来进行改变,一种是通过config助手函数来进行设置和改变,config助手函数其实就是think下的config类或者是一个封装,我们可以很方便的对配置进行设置和获取
应用配置
要知道我们在写项目的时候,是不能对框架中的文件做任何改变的。
应用配置是对整个应用目录有效,也就是说,在当前应用下的所有模块都可以使用当前配置
首先我们在之前创建的conf目录下创建一个config.php(文件名只能是这个)
我在该文件中添加两个配置
然后再执行Index/index方法
就会看见,我们刚写的两个配置已经添加上去了
我们如果想修改think框架下的convention.php里边的某一个配置,都可以在conf/config.php中进行修改
扩展配置
在实际的向项目开发中,我们的配置项会很多,比如缓存配置,session配置,cookie配置,如果将这些配置全部集合在一个文件中,那么这个文件会变得很大,而且不容易维护,我们可以将这些文件拆分成多个文件来维护,所以TP为我们准备了扩展配置
那么现在我们在conf下创建一个目录叫extra 注意:必须叫这个名字才能失效。
现在我们在该文件夹下创建一个email.php,然后在里边返回几个配置,看看有没有被添加到配置中
下面那个key值为email的,是怎么得来的呢?在TP5中,在配置扩展目录中,它默认将这个文件名当做配置项的key
在很多地方我们都会用到连接数据库(database.php)的配置,所以TP5允许我们在conf/config.php的同级目录下创建该文件
注意:配置扩展的优先级高于应用配置
场景配置
场景配置顾名思义就是在不同场景下使用的配置,比如说公司的项目在公司的时候使用的是公司的项目环境,这个时候使用的可能就是公司的配置文件,当我们在家里的时候可能也需要对这个项目进行开发,这个时候我们可能就需要家里的这个配置文件,在不同的环境中是用不同的配置文件,在TP中也为我们提供了这种支持
比如说在我们的应用配置文件中需要定义app_status,将值配置为home
此时我们需要在config.php的同级下创建一个home.php
在里边写一个配置 然后我们会发现
如果我们是办公环境,那么我们就可以将config.php中的app_status改成office然后在config.php的同级目录下创建一个office.php
模块配置
在之前我们学的几个配置,都是在整个应用都有效,没法做到每个模块使用独立的配置,模块配置可以
首先我们在conf目录下创建与模块名相同的文件夹,比如给index模块写配置,就在conf下创建一个index目录,然后在该文件夹下创建一个config.php,在这里写的配置,只对index模块有效
当我们切换到admin模块下,访问他的所有配置项的时候,我们会发现没有这个配置
同样我们还可以在index模块配置下创建extra目录,然后在里边继续添加配置文件
动态配置
动态配置主要用于我们对当前控制器或者是某个方法页面进行动态的配置改变或动态的配置设置
如果我们想让一个配置仅在当前控制器下生效,那么我们需要在该控制器下写一个构造方法,这里假设我用index/Index控制器
当我们再访问admin下的配置项的时候不会有befor这个配置项,说明它只在我们刚才写的那个index/Index控制器下生效.
注意:我们在控制器类的构造方法中进行动态配置的时候,该配置在该控制器下的所有方法中都有效。如果在控制器的某个方法中进行动态配置时,仅在该方法中有效
Config类和助手函数
其实config是ThinkPHP在Config类上做的一层封装,它其实对Config类的使用进行了简化,比如说我们在使用Config类时,首先要定义命名空间,但是我们在使用config这儿函数的时候就不用了,可以直接使用。
Config类位于 thinkphp/library/think/config.php
它里边主要有这几个方法
range方法:调整配置的作用域
parse方法:主要对配置进行解析
load方法:用来加载配置
has方法:来检测某一个配置是否存在
get方法:来获取配置
set方法:设置配置
reset方法:重置配置参数
下面我们来举个例子:(回到index/Index)
下面我们看一下config()助手函数是怎么实现的ThinkPHP默认助手函数都在thinkphp/helper.php中
看config函数的参数,name:配之名 value:配置的值 range:配置的作用域
我们来看一下如何获取某一个配置
然后说一下如何设置值
如果查看的某个配置不在,会返回NULL
然后再看一下将某个配置设置在某一个作用域下
下面我们来看一下has,has是用来检测是否有这个配置
如果想用config()来判断某个配置是否存在,应该这样写
环境变量配置和使用
我们通过学习Thinkphp5环境变量的配置,来搭建出符合我们平时开发中使用的运营环境,比如说开发环境,预上线环境,测试环境以及生产环境。
我们可以在app的同级目录下创建一个.env的文件,然后可以在里边添加配置项
它会自动读到系统的环境变量中
不知道我的为什么没有办法在.env中添加配置,添加不成功
刚开始打)系统中现有的配置(var_dump($_ENV))时,结果是个空数组
百度一下才知道,需要修改一下php.ini中的 variables_order = "GPCS"。需要多添加一个E,即
variables_order = "EGPCS"。
Thinkphp为我们提供了一个很方便的类叫Env类
我们可以使用里边的get()方法来打印环境配置
更具体的关于ThinkPHP配置的,可以参见ThinkPHP5.0手册
TP5.0学习笔记的更多相关文章
- 《TP5.0学习笔记---模型篇》
https://blog.csdn.net/self_realian/article/details/78596261 一.什么是模型 为什么我们要在项目中使用模型,其实我们知道,我们可以直接在控制器 ...
- 《TP5.0学习笔记---模板变量输出、替换和赋值篇》
原文地址:http://blog.csdn.net/self_realian/article/details/75214922 模板变量输出.替换和赋值 我们看一下文件编译的结果,我们知道我们现在写的 ...
- 《TP5.0学习笔记---配置篇》
参考博客:http://blog.csdn.net/self_realian/article/details/75045541
- DirectX 总结和DirectX 9.0 学习笔记
转自:http://www.cnblogs.com/graphics/archive/2009/11/25/1583682.html DirectX 总结 DDS DirectXDraw Surfac ...
- 一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移
不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.superviso ...
- vue2.0学习笔记之路由(二)路由嵌套+动画
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue2.0学习笔记之路由(二)路由嵌套
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- hdcms v5.7.0学习笔记
hdcms v5.7.0学习笔记 https://note.youdao.com/ynoteshare1/index.html?id=c404d63ac910eb15a440452f73d6a6db& ...
- dhtmlxgrid v3.0学习笔记
dhtmlxgrid v3.0学习笔记 分类: dhtmlx JavaScript2012-01-31 15:41 1744人阅读 评论(0) 收藏 举报 stylesheetdatecalendar ...
- OAuth 2.0学习笔记
文章目录 OAuth的作用就是让"客户端"安全可控地获取"用户"的授权,与"服务商提供商"进行互动. OAuth在"客户端&quo ...
随机推荐
- 倒计时7天!AIRIOT新品发布会,6月6日北京见。
随着物联网.大数据.AI技术的成熟和演进,智能物联网技术正在加速.深入渗透至各行业应用. AIRIOT物联网平台作为赋能数字经济发展和产业转型的数字基座,由航天科技控股集团股份有限公司(股票代码:00 ...
- AIRIOT物联网低代码平台如何配置欧姆龙omron驱动?
数据采集与控制是物联网的核心能力之一,AIRIOT物联网低代码平台提供了丰富的驱动,兼容了市面上95%以上的传感器.控制器及数据采集设备等,并且在持续增加中,能够快速.便捷地实现数据采集与控制功能. ...
- Python:用Pandas输出格式化HTML并高亮
输出格式化的HTML 我们已知一个DataFrame记录了模型Model1.Model2在3个Epoch优化中的精度变化情况: frame = pd.DataFrame({"Model1&q ...
- Hugging Face ZeroGPU 计划正式发布—提供价值一千万美元的免费共享 GPU
在人工智能技术领域,GPU 资源一直是推动研究和应用的关键因素.然而,GPU 的成本和可用性对于许多研究人员和开发者来说却是一个显著的障碍. 在 Hugging Face,我们希望人工智能技术可以更加 ...
- uniapp android端和ios端铃声静音,但是还是会震动
uniapp 使用了html5plus的api,可以实现调用原生的api功能,htm5plus官方api文档: https://www.html5plus.org/doc/zh_cn/ios.html ...
- Nginx的正向代理和反向代理
1.Nginx代理 (1)Nginx出现的早期就是作为一个高性能的http.反向代理的web服务器. (2)同时它也提供了IMAP/POP3/SMTP服务,也就是电子邮件代理服务器. (3)它的特点就 ...
- ETL工具-nifi干货系列 第一讲 揭开nifi神秘面纱
1.nifi简介 Apache NiFi 是基于流程编程概念的数据流系统.它支持强大且可扩展的数据路由.转换和系统中介逻辑的有向图.NiFi具有基于Web的用户界面,用于设计.控制.反馈和监控数据流. ...
- Vue学习:20.综合案例-商品列表
学而时用之,方能融会贯通! 实例:商品列表 实现功能 要求表格组件支持动态数据渲染.自定义表头和主体.标签组件需要双击显示输入框并获得焦点,可以编辑标签信息. 思路 首先是表格组件,动态渲染需要使用组 ...
- MySQL插入中文数据时发生错误或者乱码的一些坑
最近新入职的工作,火急火燎就下了个mysql,没想到安装时配置没弄好.今天在测试数据时,插入中文数据到mysql都是问号,先后查了半天修改表结构,数据库编码,my.ini文件都没有用. 首先第一步,打 ...
- java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2 path $
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2 path $ pack ...