《TP5.0学习笔记---配置篇》

ThinkPHP5与ThinkPHP6之争:哪个更好? ThinkPHP5以其稳定的性能和丰富的功能赢得了开发者的青睐,而ThinkPHP6则在继承前者的基础上,进行了大量的改进和优化。社区支持方面,ThinkPHP5和6都拥有庞大的用户群体和活跃的社区支持,但由于ThinkPHP6是最新版本,其社区支持和更新速度可能更加迅速。稳定性方面,两者都经过了长时间的验证和迭代,但ThinkPHP6在新特性上可能存在一定的兼容性问题,需要开发者进行一定的适配和调整。最重要的是选择适合自己的版本,并在开发过程中不断学习和掌握新知识和技能,提高自己的开发能力。 阅读详情

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篇,视图篇等
学习TP5(一):TP5框架下载与快速入门使用 目录目标下载安装TP5框架下载运行demo前提准备配置web服务器了解框架结构 目标 下载 TP5 框架并在本地运行出 TP5 默认 demo 下载安装TP5框架 thinkphp 5.0 是为API开发而设计的的高性能框架,虽然发布时间不长,但是因为上手容易,所以在国内很流行。反正就是一个挺好的后端框架,学学没毛病。 下载 直接在官网下载(http://www.thinkphp.cn/),也... 阅读详情

相关推荐

【PHP】TP5.0及Fastadmin中将查询数据返回对象转为数组

在 ThinkPHP 5.0 中,对模型查询返回的对象进行了优化,默认情况下,使用 all 或 select 方法查询数据库将返回一个对象数组集合。这个集合是模型的实例数组,不是传统意义上的数组。因此,。

q8688的博客 2958

学习笔记-TP5框架学习笔记\(路由\)

TP5框架简单理解 (PS:只做粗略、关键知识的记录,TP程序的开始。详情请阅读官方手册) 1. 架构总览 TP程序的开始 PHP >=5.3.0, PHP7 ThinkPHP5.0应用基于MVC(模型-视图-控制器)的方式来组织。 MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型(M)、视图(V)、控制器(C),它们各自处理...

ai agent 1704

TP5.1模板布局中遇到的坑,配置完不生效解决办法

起初用TP5.0的配置方法,不成功,后来查看TP5.1开发文档,才解决了问题。 特此记录一下自己的粗心大意,也希望能帮到其他人 1、目前用TP5.1,但是由于以前用TP5.0,现在习惯性把config.php当成配置文件。然后文件目录为 2、修改config.php配置文件的template,开启模板布局 最后加上 'layout_on' => true, 'layout_name' => 'layout', 'layout_item' => '{

alianada的博客 2848

TP5.0学习笔记---配置篇

TP5.0学习笔记TP5目录结构介绍application目录是应用目录,我们整个应用所有的内容都写在这个目录中,在后续开发中,我们更多的时候都是在编写这个目录中的文件。在它里边有一个index文件夹,它叫做模块儿,叫做Index模块儿,在它里边有一个controlller文件夹,它就是我们模块儿的控制层,在我们写代码的时候,我们还会在里边创建model和view文件夹,这样就组成了这个Index...

xinzi11243094的博客 900

TP5使用phpunit并配置idea/phpstorm

TP5使用phpunit并配置idea/phpstorm吐槽步骤总结1. 安装tp5的phpunit2.下载phpunit ,强烈建议下载7.0及以上版本3.开始配置4.ideaunit.xml5.autoload.php一些问题1.编辑器执行单元测试方法时 貌似没发使用tp的config函数,env函数也失效2.编辑器可以每次只执行一个测试方法,效率会高一点3.建议使用2个命名空间 吐槽 tp5...

又是废柴的一天。。。 1543

tp5.1/TP5.1项目配置

1.app.php // 应用调试模式 'app_debug' => true, // 应用Trace 'app_trace' => true, // 是否支持多模块 'app_multi_module' => true, // 入口自动绑定模块 'auto...

尼古拉斯鹏 7946

tp5中怎么用redis

通过配置和调用相关方法,可以方便地在TP5中使用Redis进行缓存和Session管理,提高系统的效率和性能。TP5是一款基于PHP开发的高性能框架,它可以与Redis一起使用,来提高应用程序的性能和扩展能力。注意:在以上代码中,'channel'是发布和订阅的频道名称,'key'是Redis键的名称,'lock_key'是锁的名称。注意:在以上代码中,'redis'是在配置文件中配置的Redis连接名称。注意:在以上代码中,'redis'是在配置文件中配置的Redis连接名称。

叶落无痕的博客 2262

TP5.0 支持数据库类型

一、TP5.0 支持数据库类型 Mysql、SqlServer、PgSQL、Sqlite等数据库的支持。 二、如何连接数据库 a、配置文件目录 C:\AppServ\www\tp5\application\database.php b、如何配置 return [ ...

qq_43293739的博客 603

TP5.1使用Redis以及Windows配置Redis环境(超详细0难度)

Redis是典型的NoSql(非关系型数据库)之一,他是一个高性能的Key-Value数据库。它支持数据的持久化,官方测试读的速度是110000次/s,写的速度是81000次/s ,由于Redis提供了键过期的功能,所以现在被广泛用于缓存,合理运用缓存不仅可以提升站点访问速度还可以大幅降低数据库压力。 下面我会从0开始讲解如何在你的Windows下配置好Redis环境 以及Redis在TP5.1...

Sol的博客 3533

tp5 php+sqlserver之如何连接sqlserver数据库

如果说用php去开发一个网站的话,大家都会想到使用数据库mysql,跟php搭配,网上很多源码都是采用了php+mysql的方式配合开发。最近刚好有一个需求,就是使用sqlserver当数据库去开发一个网站,这里就简单介绍一个如何去连接sqlserver数据库,以及一些简单的数据库操作方法,看完这篇之后,你就会知道,其实无论是哪种数据库去开发,其实原理都很相似,只要掌握一种,其他就可以快速上手。但...

jianai0602的博客 7220

创新实训——TP5.0框架下的think-captcha验证码扩展包

之前在进行前端登陆页面实现的过程中,用到了TP5.0自带的think-captcha验证码包,现在在这里补充上介绍和用法。首先,如果你是TP5.05之前的版本,需要自己去下载captcha,如果想从通过命令行直接下载需要安装composer,5.05之后的版本会自带think-captcha包。thinkphp\vendor\topthink\think-capcha1.html中验证码的显示:&...

qq_38530808的博客 6413

tp5.0框架要求php环境,ThinkPHP5.0框架 从0开始--配置篇

最近接触了一下ThinkPHP5.0框架,发现这个框架的简洁明了度完全优越于Java Spring等之类的MVC框架,TP没有那么多复杂代码、也没有那么复杂的配置,是一个能够简单上手的MVC框架。这么好的东西,给大家分享一下,并总结一下自己所学到的。如有错误,欢迎指正。一、介绍篇ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发...

weixin_35851482的博客 506

【上海校区】PHP最新面试题-TP5和TP3.2的区别

 由于TP5.0是一个全新的颠覆重构版本,所以现在面试很多面试官喜欢问TP3.2和TP5之间的区别,那他们之间到底有哪些区别呢?一、目录TP3.2目录  TP5目录 二、需要摒弃的 3.X 旧思想模型的变动       新版的模型查询返回默认‘对象’,系统默认增加了'toArray'方法,许多开发者在'all'或'select'尝试使用'toArray'来 转换为数组,但是'all'或'selec...

qq_39332786的博客 6294

TP5.1钩子的实现以及TP6.0事件的原理

TP框架的钩子功能很早就有了,tp5.1对它的实现又重新构造了,钩子的功能其实就是在代码中侵入其他代码流程。比如在初始化完后监听一个钩子,如果我们注册了这个钩子,并且绑定了一个行为,执行到这里的时候会执行我们绑定的行为。 钩子的使用 创建行为类,不用继承任何类 namespace app\http\behavior; class ActionBegin { public func...

littlexiaoshuishui的博客 2363

Java 大视界 -- Java+Spark MLlib 构建智能推荐系统:协同过滤算法实战与优化(441)

Java+Spark MLlib构建智能推荐系统实战 本文详细介绍了基于Java和Spark MLlib构建协同过滤推荐系统的全流程实践方案。主要内容包括: 架构设计:采用离线批处理为主、近实时更新为辅的架构,包含数据采集层、处理层、模型层、推荐生成层、存储层和应用层六大模块,可支撑千万级用户推荐需求。 技术实现: 使用Spark MLlib的ALS算法进行协同过滤模型训练 提供数据清洗、模型训练、推荐生成等核心代码实现 采用MySQL存储推荐结果,支持批量插入和事务保障 生产级优化: 版本化模型存储规避覆

【青云交】华为云云享专家 | 阿里云开发者社区专家博主 技术圈个人影响力前 9 | 博客之星 TOP12 优快云 首位四榜(原力榜 / 作者周榜 / 领军人物 / 综合热榜)榜首,破平台纪录! 苏州地区全榜霸榜,感恩全网十多万粉丝同行! 2539

DM9000有线网卡驱动编写

DM9000有线网卡驱动编写 1.DM9000简介   DM9000 是一款完全集成的、性价比高、引脚数少、带有通用处理器接口的单芯片快速以太网控制器。 自 带一个 10/100M PHY 和 4K 双字的 SRAM ,DM9000A 为适应各种处理器提供了 8 位、16 位数据接口访问 内部存储器,DM9000 拥有自动协商功能,DM9000 特性如下:   1.集成自适应 10/100M 收发器。   2.内置 16k 字节的 SRAM。   3.支持硬件帧校验。   4.兼容 3.3V 和 5.0V

weixin_44453694的博客 4672

tp5中build.php,tp5框架学习笔记总结一

ThinkPHP5.0.7与TP3并非版本迭代的关系,对小白来说,下面的就是很明显的区别和TP3区别application中除了应用(框架中,指前后台模块,比如admin文件夹),其他的都是文件了,TP3是自动生成common文件夹入口文件在public中,样式我们习惯放public/static里面,单字母方法没了,需要可以自己定义,大部分助手函数可以替代。控制器名不需要加class。一些写法...

weixin_39997194的博客 313

【论文精读】Latent Diffusion

Latent Diffusion

weixin_44934783的博客 4476

TP5框架Redis的使用

TP5.0 config类配置redis缓存 'cache' => [ // 使用复合缓存类型 'type' => 'complex', // 默认使用的缓存 'default' => [ // 驱动方式 'type' => 'File', // 缓存保存目录 ...

m0_51200080的博客 2238

vmware vsphere 证书过期告警处理方法

vSphere Clinet 管理页面出现“证书告警” ,检查证书未发现现有证书有过期现象

m0_51902127的博客 3638

运动目标成像必学:5分钟搞懂keystone变换原理与避坑指南

本文深入浅出地解析了雷达信号处理中的Keystone变换原理,它是解决运动目标距离徙动问题的关键技术。文章通过直观比喻和简化公式,阐述了该变换如何通过变量代换实现距离与慢时间的解耦合,将倾斜轨迹“掰直”,从而提升成像与检测性能。同时,文中重点指出了实际应用中关于大速度场景、插值误差、多目标处理及高阶运动补偿等关键避坑点,为工程实践提供了宝贵指南。

ios99的博客 403
上一篇: crontab 计划任务的知识
下一篇: <TP5之URL路由篇章>
勋彰
博客等级 码龄9年 36粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值