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手册希望这篇博客对初学ThinkPHP5.0的小伙伴有帮助,后边还会陆续有URL篇,视图篇等