安装配置

官网下载TP5完整版(初学者学习用的)

解压到本地的开发环境phpstudy中,默认的入口文件是public,访问public会看到TP5成功页面。

目录介绍

一般开发中,代码都是写在application这个文件夹中

开发一个项目的时候,通常分为前台和后台,前台一般放在index模块中,后台一般放在admin模块中。

也可以自己新建一个模块

模块内部,都遵循着MVC架构

controller、model、view都可以自己在模块中创建

下面对application文件夹中的文件做一些介绍;

image.png

command.php 命令行启动TP5框架需要读取的文件

common.php 常用的函数,都写在这个文件中

config.php 配置文件,开启什么,关闭什么,都在这设置

database.php 连接数据库时候读取的文件,比如用户名

route.php 路由文件,美化url的

tags.php 扩展框架的时候用到

下载的第三方库都放在这里

入口文件

static 这里放的是css、html之类的静态文件

favicon.ico 这个是网站图标,在标签栏显示的

index.php 网站入口文件,所有的请求都会经过这里

robots.txt 禁止搜索引擎爬取页面的设置

router.php 在没有部署网站环境的情况下,配置这个文件可以让网站运行

开发规范(命名规范)

目录 只是小写字母和下划线构成

类的文件名以命名空间定义,并且命名空间和类库文件所在路径一致。

类的文件采用驼峰,并且首字母大写,其余文件为小写加下划线。

类名和类文件名保持一致,采用驼峰命名,首字母大写。

函数使用驼峰命名,首字母小写。

属性名采用驼峰,首字母小写

以双下划线开头的函数或方法为魔术方法。

常量以大写字母和下划线命名

表和字段必须以小写字母和下划线命名方式,不能以下划线开头。

模块设计

自己创建的common模块

可以自己创建common模块,然后里面写一些其他模块会常用的控制器,或者其他模块依赖的控制器,让他们继承。

image.png

惯例配置与应用配置与扩展配置

所谓应用位置,就是对app文件夹中文件都起作用的配置。

定义配置文件路径

创建了配置文件后,必须要在入口文件出定义配置文件的路径,并且要将配置文件命名为config.php才可以。

通常是不允许修改TP5框架的惯例配置的,这样不安全也不规范,只要定义了应用配置,那么应用配置文件中的配置的值会代替惯例配置中相同的配置,若是没有相同的值,那么就会新添加应用配置中的值。(惯例配置不会遭到修改)

image.png

如果项目比较大,配置信息也就多,放在一个配置文件中不合适,所以就有了扩展配置。优先级是扩展配置会覆盖conf/config.php配置,会覆盖TP5惯例配置。另外,扩展配置文件夹必须叫做extra文件夹,同时TP5为了人性化,允许与conf/config.php同级创建database.php,但是,这个database.php是属于extra扩展配置的,拥有扩展配置的优先级覆盖。

场景切换配置

在惯例配置中,有'app_statues'参数,默认为空,但是可以在应用配置conf/config.php中设置该参数的值为场景名称,然后再创建该场景名称的配置文件,在里面写入想配置的参数就可以了。只要想切换场景,就修改conf/config.php这个应用配置文件中'app_status'的值即可。

惯例配置参数展示

在conf/config.php中,只要调整'app_status'的值为home,那么就会调用conf/home.php中的配置。

应用配置实例

不过,由于TP5的BUG,必须要在conf/home.php中将完整的database.php中的代码复制过来,否则,修改完一处参数后,整个应用配置只有修改后的这个参数,原来的database.php中的其他参数就默认没有了。

以上内容的配置,都是对整个应用起作用的,针对模块的单独的配置,下面会有。

模块配置与动态配置

模块配置

只要像上方那样做修改就可以了。

而动态配置,指的就是在控制器中进行配置,或者在控制器的方法中进行配置。说的再直白点,就是在类中用构造方法配合config()函数进行配置,这种配置,对整个类都有作用。若想对指定方法配置,那么就在那个方法中用config()函数进行配置就可以了。

image.png

我上面只是在方法中没有输出config()配置罢了,不然只要访问方法,就可以看到。

环境配置

环境配置结合场景配置,先在根目录创建.env文件,然后在应用配置的config文件中利用 think\Env 这个类中的 Env::get()函数获取.env文件中的值,来对场景进行选择。这样就不用修改场景,只需要修改.env中的配置的值就可以了。

绑定入口文件

绑定入口文件之后,就可以直接加控制器和方法来访问了,如果绑定了控制器,那么只要输入方法就可以了。

绑定入口文件

通常用于接口使用,比如让第三方接入的时候,不希望第三方访问我们的index模块或者admin模块,那么就用这个绑定入口文件来解决。

另外,一旦进行了入口文件的绑定,比如我上面绑定了index,那么我也无法访问admin模块下的页面了。只能访问index模块中的页面

api的应用

路由

若要使用路由,那么首先要开启路由,在convention.php文件中默认开启路由。

不过,因为要用到我们的app中,所以需要将开启语句复制到conf/config.php中。

开启路由

一旦设置好路由的规则后并且开启了url_route_must=true,那么访问原来的index/Index/info/id/5就会报错,只能访问news/5。所以,要想原来访问的地址也能访问,就将url_route_must=false

info方法需要传入形参id

这里输出的是news/10,因为这里之前定义了index/index/info的路由为news/:id,如果没有定义过,那么输出就是原来的路径,而不是路由的路径

路由助手函数的输出

请求对象的获取

重点是Request类的使用,以及里面的方法

实际上,可以仔细参考一下这个框架的编写风格,感觉能学到不少编程思想。

由于上面返回的基本上都是关键数组,所以,如果想获取某个返回的数组中参数的值,可以直接在方法中加上参数名。

其他获取的一些内容

上面的param方法,会返回get,post,pathinfo这几个的值

image.png

上图第三个参数,是用来过滤获取到的值的,之所以是用intval,是对获取到的值进行整数强制转换。

推荐自己写代码不用助手函数input,用request类那样的写法,这样代码的可读性更高,但是input还是要了解,因为每个人的代码不同。

控制器中不建议使用die函数,可以用return来结束。

返回对象

上面用到了Config类,但是却忘记 use think/Config;了

返回对象一般都是动态配置,因为不能保证每个控制器的返回对象都相同。

视图和模板

控制器渲染视图

控制器中,可以使用view()函数来将与controller同一层的view模块中的与控制器同名的index文件夹中的与index()方法同名的intex.html渲染出来。这个是一个对应关系。Index控制器对应的是view/index文件夹

只要做到view文件夹路径后的文件名对应模块名就可以了,控制器中的view()方法可以指定参数。

view()对应的路径就是view文件夹

view('./html/index.html')函数里面传入这样的参数,代表是从入口文件进去了,而不是像view('index')这样代表view/index.html

view()函数的参数不同,路径也不同

return view('index',[

'email'=>'123456@qq.com',

'name'=>'xxx'

])

类似这样的用法,是view()函数向指定要渲染的html页面传输变量emali和变量name的值。只需要在显示的位置{$email}或者{$name}就可以了。

渲染变量

要渲染的页面,只要输入大写的STATAC,那么就会被下面这个view函数的第三个参数的值所替换,通俗点看就是渲染了常量。

第三个参数,渲染常量STATAC

不过,上面的方法还是不推荐使用,代码可读性不高。实际开发中,最好是继承think\Controller,然后,使用$this->fetch()来渲染。用法和view()一样。

推荐使用$this->fethc()

也可以直接使用$this->assign('a','a的值')来给要渲染的页面上的a变量赋值。

$this->assign()的用法

当view文件夹中没有任何要渲染的模板的时候,就用到了下面这个函数

同时也比较有用的一个方法是$this->display('只显示我这个字符串内容'),这是只传入一个参数的时候。

传入两个参数的用法

在渲染页面的时候,TP5框架让html页面中用的是花括号来表示变量的,但是,这个也可以在tp5中进行修改,让其他的符号或者其他的值来代替花括号的作用。

几种渲染模板时候赋值的方式

赋值方法还挺多的

在配置文件中,可以设置下面这个参数的值,来全局替换某个关键词为某个值

设置全局值替换

常用的有一些系统默认设置的字符串替换:

这几个很常用

上面这些修改指定字符串值的方法,最神奇的使用地方就是,假如我们修改了某个文件的位置,那么只要设置指定字符串的值,就可以了,否则还得一个代码一个代码的进行修改。

先看看下面能输出哪些值,然后理解在tp5中,模板是如何获取这些值的

输出查看$_SERVER有哪些值

$_SERVER的值

模板获取$_SERVER中指定的值

获取其他的值

获取更多的值

上面这个错了,是获取app的路径,不是当前页面的路径

在模板中进行变量计算的时候,可以用#进行占位,之所以要占位,是因为{$email|md5}是把email这个参数传入md5这个函数中,而有的函数,有好几个参数传入,也有传入的顺序,所以就需要用到#来进行占位。

模板中进行变量的计算

还可以同时叠加好几个函数

变量遇到js

下面这样的注释,更加安全,因为html代码中看不到。如果用html的注释,那么就会在前端的网页源码中找到

更安全的注释

模板循环标签

循环标签的使用

在模板中,用{volist name="list" id="data"} {/volist}这一对标签来将控制器中的数组list进行循环,上图中会循环输出二维数组list中全部的name值,还附带

标签。

list数组

offset参数代表从数组的几个元素开始遍历,length参数代表遍历的长度,mod代表对当前循环次数取余。

其他参数

foreach迭代

for循环

for在模板中的其他参数

比较标签

比较标签,eq和equal相等的

不相等的比较标签

大于、小于标签

大于等于、小于等于

image.png

条件判断标签

Think.get.level这里的level是get传的参数

image.png

还有notbetween这样的参数

几个常用标签

上面的 if 标签内部还可以用AND和OR这样的逻辑语句

模板的布局包含和继承

当在block中嵌套使用block的时候,就可以向下方这样使用

{__block__}是使用被继承薄板中的值

这部分知识,主要就是include,extend,block的灵活运用。

下面可以尝试做ThinkPHP5开发的项目来进行实战了。实战中再多记录一些笔记。

tp5框架原理详解_笔记:TP5框架完整学习笔记相关推荐

  1. 第10课:底实战详解使用Java开发Spark程序学习笔记

    第10课:底实战详解使用Java开发Spark程序学习笔记 本期内容: 1. 为什么要使用Java? 2. 使用Java开发Spark实战 3. 使用Java开发Spark的Local和Cluster ...

  2. ASP.NET Core分布式项目实战(详解oauth2授权码流程)--学习笔记

    最近公司产品上线,通宵加班了一个月,一直没有更新,今天开始恢复,每日一更,冲冲冲 任务13:详解oauth2授权码流程 我们即将开发的产品有一个用户 API,一个项目服务 API,每个服务都需要认证授 ...

  3. 官网实例详解-目录和实例简介-keras学习笔记四

    https://github.com/keras-team/keras/tree/master/examples Keras examples directory Keras实例目录 (点击跳转) 官 ...

  4. python学习详解_深入解析Python小白学习【操作列表】

    1.遍历列表 需要对列表中的每个元素都执行相同的操作时,可使用for 循环: magicians = ['alice','david','carolina'] for magician in magi ...

  5. shiro详解-shiro史上最全学习笔记

    1.shiro简介 1.1.基本功能点 Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境.Shiro 可以帮助我们完成:认证.授权.加密 ...

  6. 第10课:底实战详解使用Java开发Spark程序学习笔记(二)

    Maven下的Spark配置: http://maven.outofmemory.cn/org.apache.spark,这个网站提供了Spark core.Spark Streaming使用Mave ...

  7. tp5框架原理详解_tp5框架知识点

    项目包含的关键点,后台,前台. 入口文件. 通用配置文件. 数据库配置文件. 共有文件,css,images,js. 控制器,模型,视图. 共有类. 共有函数. 属性,方法. 命名规范. 命名空间. ...

  8. linux中c语言结构体详解,Linux C语言结构体-学习笔记

    Linux C语言结构体简介 前面学习了c语言的基本语法特性,本节进行更深入的学习. 预处理程序. 编译指令: 预处理, 宏定义, 建立自己的数据类型:结构体,联合体,动态数据结构 c语言表达式工具 ...

  9. Arduino语法详解,部分带注释(学习笔记)

    Arduino 的程序可以划分为三个主要部分:结构.变量(变量与常量).函数 函数部分参考官方:Arduino Reference - Arduino Reference 结构部分  一.结构 1.1 ...

  10. 【网络协议详解】——GNS3的使用(学习笔记)

最新文章

  1. Javascript:郁闷了好久终于找到原因了,原理还不明白
  2. linux环境-docker安装rabbitmq
  3. “注册编辑已被管理员停用”之解决办法
  4. 113. Path Sum II
  5. 从独角兽到上市:我们与TAPD的故事
  6. 【mongoDB运维篇③】replication set复制集
  7. bondat蠕虫传播与对抗
  8. 阿里公开600页技术图(附下载链接),程序员看完少走10年弯路! | 干货
  9. 铺地毯(洛谷-P1003)
  10. mysql5.1安装失败_解决MySQL5.1安装时出现Cannot create windows service for mysql.error:0
  11. JQuery获得绝对,相对位置的坐标方法
  12. matlab cftool 最小二乘,最小二乘法与matlab拟合工具箱cftool
  13. mysql报错:1194-table “xxx“ is marked as crashed and should be repaired
  14. 【django接口自动化1】环境搭建
  15. java使用flex生成swf_flex动态生成矢量swf字体--java动态生成swf文件
  16. transition和transition的区别
  17. Android Studio 中文社区
  18. 面试宝典之高分回答面试题(一)
  19. 洛谷 P1536 村村通
  20. 使用Clang作为编译器 —— AddressSanitizer

热门文章

  1. 记录一下qt发布程序(.exe)心得,报错0xc00007b错误
  2. 领秀加速器软件介绍及功能介绍
  3. JAVA_JDK下载与安装教程(小白)
  4. Delphi XE11APP编译出错
  5. java之pdf打印
  6. Go语言高性能编程手册(万字长文)
  7. 电脑广告太多,请避免安装这些软件
  8. 10个Python实战编程项目,有趣又好玩
  9. python制作小游戏大全_python制作小游戏(一)
  10. 计算机二级java技巧,计算机二级java难学吗