百搜论坛欢迎您的加入!
adimg adimg
 
昨日:篇  今日:篇   总帖:篇   会员:
博主最大Lv63   
THINKPHP5(TP5)新手入门必看教程     

THINKPHP5是一个很好的PHP框架,简称TP5,如果你会PHP,可以很容易的掌握这个框架,针对于想要学习tp5的同学,我们简单对TP5的安装和配置,及文件结构做一下介绍。


安装配置

官网下载TP5完整版(初学者学习用的)
解压到本地的开发环境phpstudy中,默认的入口文件是public,访问public会看到TP5成功页面。

目录介绍

image.png

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

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

image.png

也可以自己新建一个模块

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

image.png

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

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

image.png

image.png

command.php    命令行启动TP5框架需要读取的文件
common.php    常用的函数,都写在这个文件中
config.php    配置文件,开启什么,关闭什么,都在这设置
database.php    连接数据库时候读取的文件,比如用户名
route.php    路由文件,美化url的
tags.php    扩展框架的时候用到

image.png

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

image.png

入口文件

static    这里放的是css、html之类的静态文件
favicon.ico    这个是网站图标,在标签栏显示的
index.php    网站入口文件,所有的请求都会经过这里
robots.txt    禁止搜索引擎爬取页面的设置
router.php    在没有部署网站环境的情况下,配置这个文件可以让网站运行

开发规范(命名规范)

目录    只是小写字母和下划线构成
类的文件名以命名空间定义,并且命名空间和类库文件所在路径一致。
类的文件采用驼峰,并且首字母大写,其余文件为小写加下划线。
类名和类文件名保持一致,采用驼峰命名,首字母大写。
函数使用驼峰命名,首字母小写。
属性名采用驼峰,首字母小写
以双下划线开头的函数或方法为魔术方法。
常量以大写字母和下划线命名
表和字段必须以小写字母和下划线命名方式,不能以下划线开头。

模块设计

image.png

自己创建的common模块

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

image.png

image.png

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

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

image.png

定义配置文件路径

创建了配置文件后,必须要在入口文件出定义配置文件的路径,并且要将配置文件命名为config.php才可以。
通常是不允许修改TP5框架的惯例配置的,这样不安全也不规范,只要定义了应用配置,那么应用配置文件中的配置的值会代替惯例配置中相同的配置,若是没有相同的值,那么就会新添加应用配置中的值。(惯例配置不会遭到修改)

image.png

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'的值即可。

image.png

惯例配置参数展示

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

image.png

应用配置实例

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

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

模块配置与动态配置

image.png

模块配置

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

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

image.png

image.png

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

环境配置

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

绑定入口文件

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

image.png

绑定入口文件

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

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

image.png

api的应用

路由

若要使用路由,那么首先要开启路由,在convention.php文件中默认开启路由。
不过,因为要用到我们的app中,所以需要将开启语句复制到conf/config.php中。

image.png

开启路由

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

image.png

info方法需要传入形参id

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

image.png

路由助手函数的输出

请求对象的获取

image.png

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

实际上,可以仔细参考一下这个框架的编写风格,感觉能学到不少编程思想。
由于上面返回的基本上都是关键数组,所以,如果想获取某个返回的数组中参数的值,可以直接在方法中加上参数名。

image.png

其他获取的一些内容

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

image.png

image.png

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

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

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

image.png

返回对象

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

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


视图和模板

image.png

控制器渲染视图

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

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

image.png

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

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

image.png

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

return view('index',['email'=>'123456@qq.com','name'=>'xxx'])

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

image.png

渲染变量

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

image.png

第三个参数,渲染常量STATAC

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

image.png

推荐使用$this->fethc()

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

image.png

$this->assign()的用法

当view文件夹中没有任何要渲染的模板的时候,就用到了下面这个函数
同时也比较有用的一个方法是$this->display('只显示我这个字符串内容'),这是只传入一个参数的时候。

image.png

传入两个参数的用法

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

image.png

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

image.png

赋值方法还挺多的

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

image.png

设置全局值替换

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

image.png

这几个很常用

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

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

image.png

输出查看$_SERVER有哪些值

image.png

$_SERVER的值

image.png

模板获取$_SERVER中指定的值

image.png

获取其他的值

image.png

获取更多的值

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

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

image.png

模板中进行变量的计算

image.png

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

image.png

变量遇到js

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

image.png

更安全的注释

模板循环标签

image.png

循环标签的使用

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

image.png

list数组

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

image.png

其他参数

image.png

foreach迭代

image.png

for循环

image.png

for在模板中的其他参数

比较标签

image.png

比较标签,eq和equal相等的

image.png

不相等的比较标签

image.png

大于、小于标签

image.png

大于等于、小于等于

image.png

image.png

条件判断标签

image.png

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

image.png

image.png

还有notbetween这样的参数

image.png

几个常用标签

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

模板的布局包含和继承

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

image.png

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

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

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



本文地址:http://www.hnzzwz.com/blog/post/49.html
版权声明:本文为原创文章,版权归 ll2l 所有,欢迎分享本文,转载请保留出处!

 0  已被阅读了1412次  楼主 2020-07-24 13:44:36
回复列表

回复: THINKPHP5(TP5)新手入门必看教程

联系站长 友链申请桂ICP备19000949号-1     桂ICP备19000949号-1
您的IP:3.137.170.183,2024-04-20 20:30:14,Processed in 0.01764 second(s).
免责声明: 本网不承担任何由内容提供商提供的信息所引起的争议和法律责任。
Powered by HadSky 7.12.9
已有0次打赏
(0) 分享
分享
取消
免责声明
1、本站资源,均来自网络,版权归原作者,所有资源和文章仅限用于学习和研究目的 。
2、不得用于商业或非法用途,否则,一切责任由该用户承担 !
如果觉得本文还不错请点个赞或者打赏点轻币哦~
拒绝伸手党,拿走请回复,尊重楼主,尊重你我他~

侵权删除请致信 E-Mail:207882320@qq.com