安装配置
官网下载TP5完整版(初学者学习用的)
解压到本地的开发环境phpstudy中,默认的入口文件是public,访问public会看到TP5成功页面。
目录介绍
开发一个项目的时候,通常分为前台和后台,前台一般放在index模块中,后台一般放在admin模块中。
模块内部,都遵循着MVC架构
下面对application文件夹中的文件做一些介绍;
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模块,然后里面写一些其他模块会常用的控制器,或者其他模块依赖的控制器,让他们继承。
惯例配置与应用配置与扩展配置
所谓应用位置,就是对app文件夹中文件都起作用的配置。
创建了配置文件后,必须要在入口文件出定义配置文件的路径,并且要将配置文件命名为config.php才可以。
通常是不允许修改TP5框架的惯例配置的,这样不安全也不规范,只要定义了应用配置,那么应用配置文件中的配置的值会代替惯例配置中相同的配置,若是没有相同的值,那么就会新添加应用配置中的值。(惯例配置不会遭到修改)
如果项目比较大,配置信息也就多,放在一个配置文件中不合适,所以就有了扩展配置。优先级是扩展配置会覆盖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()函数进行配置就可以了。
我上面只是在方法中没有输出config()配置罢了,不然只要访问方法,就可以看到。
环境配置
环境配置结合场景配置,先在根目录创建.env文件,然后在应用配置的config文件中利用 think\Env 这个类中的 Env::get()函数获取.env文件中的值,来对场景进行选择。这样就不用修改场景,只需要修改.env中的配置的值就可以了。
绑定入口文件
绑定入口文件之后,就可以直接加控制器和方法来访问了,如果绑定了控制器,那么只要输入方法就可以了。
通常用于接口使用,比如让第三方接入的时候,不希望第三方访问我们的index模块或者admin模块,那么就用这个绑定入口文件来解决。
另外,一旦进行了入口文件的绑定,比如我上面绑定了index,那么我也无法访问admin模块下的页面了。只能访问index模块中的页面
路由
若要使用路由,那么首先要开启路由,在convention.php文件中默认开启路由。
不过,因为要用到我们的app中,所以需要将开启语句复制到conf/config.php中。
一旦设置好路由的规则后并且开启了url_route_must=true,那么访问原来的index/Index/info/id/5就会报错,只能访问news/5。所以,要想原来访问的地址也能访问,就将url_route_must=false
这里输出的是news/10,因为这里之前定义了index/index/info的路由为news/:id,如果没有定义过,那么输出就是原来的路径,而不是路由的路径
请求对象的获取
实际上,可以仔细参考一下这个框架的编写风格,感觉能学到不少编程思想。
由于上面返回的基本上都是关键数组,所以,如果想获取某个返回的数组中参数的值,可以直接在方法中加上参数名。
上面的param方法,会返回get,post,pathinfo这几个的值
上图第三个参数,是用来过滤获取到的值的,之所以是用intval,是对获取到的值进行整数强制转换。
推荐自己写代码不用助手函数input,用request类那样的写法,这样代码的可读性更高,但是input还是要了解,因为每个人的代码不同。
控制器中不建议使用die函数,可以用return来结束。
上面用到了Config类,但是却忘记 use think/Config;
了
返回对象一般都是动态配置,因为不能保证每个控制器的返回对象都相同。
视图和模板
控制器中,可以使用view()函数来将与controller同一层的view模块中的与控制器同名的index文件夹中的与index()方法同名的intex.html渲染出来。这个是一个对应关系。Index控制器对应的是view/index文件夹
只要做到view文件夹路径后的文件名对应模块名就可以了,控制器中的view()方法可以指定参数。
view('./html/index.html')函数里面传入这样的参数,代表是从入口文件进去了,而不是像view('index')这样代表view/index.html
return view('index',[
'email'=>'123456@qq.com',
'name'=>'xxx'
])
类似这样的用法,是view()函数向指定要渲染的html页面传输变量emali和变量name的值。只需要在显示的位置{$email}
或者{$name}
就可以了。
要渲染的页面,只要输入大写的STATAC,那么就会被下面这个view函数的第三个参数的值所替换,通俗点看就是渲染了常量。
不过,上面的方法还是不推荐使用,代码可读性不高。实际开发中,最好是继承think\Controller,然后,使用$this->fetch()来渲染。用法和view()一样。
也可以直接使用$this->assign('a','a的值')
来给要渲染的页面上的a变量赋值。
当view文件夹中没有任何要渲染的模板的时候,就用到了下面这个函数
同时也比较有用的一个方法是$this->display('只显示我这个字符串内容'),这是只传入一个参数的时候。
在渲染页面的时候,TP5框架让html页面中用的是花括号来表示变量的,但是,这个也可以在tp5中进行修改,让其他的符号或者其他的值来代替花括号的作用。
在配置文件中,可以设置下面这个参数的值,来全局替换某个关键词为某个值
常用的有一些系统默认设置的字符串替换:
上面这些修改指定字符串值的方法,最神奇的使用地方就是,假如我们修改了某个文件的位置,那么只要设置指定字符串的值,就可以了,否则还得一个代码一个代码的进行修改。
先看看下面能输出哪些值,然后理解在tp5中,模板是如何获取这些值的
上面这个错了,是获取app的路径,不是当前页面的路径
在模板中进行变量计算的时候,可以用#进行占位,之所以要占位,是因为{$email|md5}
是把email这个参数传入md5这个函数中,而有的函数,有好几个参数传入,也有传入的顺序,所以就需要用到#来进行占位。
下面这样的注释,更加安全,因为html代码中看不到。如果用html的注释,那么就会在前端的网页源码中找到
模板循环标签
在模板中,用{volist name="list" id="data"} {/volist}
这一对标签来将控制器中的数组list进行循环,上图中会循环输出二维数组list中全部的name值,还附带<p>
标签。
offset参数代表从数组的几个元素开始遍历,length参数代表遍历的长度,mod代表对当前循环次数取余。
比较标签
条件判断标签
还有notbetween这样的参数
上面的 if 标签内部还可以用AND和OR这样的逻辑语句
模板的布局包含和继承
当在block中嵌套使用block的时候,就可以向下方这样使用
这部分知识,主要就是include,extend,block的灵活运用。
下面可以尝试做ThinkPHP5开发的项目来进行实战了。实战中再多记录一些笔记。