ThinkPHP6 入门
框架简介
- ThinkPHP6.0 是目前框架正式版的最新版本,发布于 2019 年 10 月 24 日;
- TP 框架是免费开源的、轻量级的、简单快速且敏捷的 PHP 框架;
- 你可以免费使用 TP 框架,甚至可以将你的项目商用;
- ThinkPHP6.0 要求 PHP 版本是 7.1+以上,官方推荐 7.3;
- 那我该学习哪个版本?如果你的生产环境是 5.6 ~ 7.0 之间,推荐 TP5.1;
- 如果你是自己的 vps 服务器,可以安装较高的 PHP 版本 7.1+,推荐 TP6.x;
- 集成环境这里采用 windows 结合 wamp,其它系统或环境满足版本要求即可;
- 除了 PHP7.1+,还需要开启 PDO 数据库引擎和 MBstring 字符串扩展;
- 我在以往的 wamp 版本上添加了一个目前最新的 PHP7.3.11;(PHP7.4 是 RC)
安装步骤
- 官网不提供软件包下载,采用 Composer 下载和更新;
- 这里只演示 windows 安装,Mac 和 Linux 方法参考一下手册;
- 在 Windows 中,你需要下载并运行 Composer-Setup.exe;
- 打开 windows 下的运行:cmd,然后运行如下代码(或 Mac 和 Linux 控制台):
composer config -g repo.packagist composer https://packagist.phpcomposer.com
- 如果上述地址产生阻碍,可以使用国内的:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
- 现在,先启用服务器环境,测试本地 Web 环境是否正常;
- 如果你是首次安装 ThinkPHP6.0,那么先从 cmd 中切换到你要加载的目录;
composer create-project topthink/think tp6
- 如果要更新你的项目版本,直接进入项目根目录,然后直接如下代码:
composer update topthink/framework
测试运行
- 在 cmd 命令行的项目目录中,输入运行命令;
php think run
-
在浏览器输入:
http://127.0.0.1:8000或http://localhost:8000 -
如果 80 端口没有被占用的情况下,使用如下命令直接访问
http://localhost;php think run -p 80 -
也可以通过修改nginx或apache的配置文件将web解析到框架的public目录
开发规范和目录结构
开发规范
- ThinkPHP6.0 遵循的是 PSR-2 的命名规范和 PSR-4 的自动加载;
- 目录和文件的规范如下:
a. 目录名(小写+下划线);
b. 类库和函数文件统一以.php为后缀;
c. 类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致;
d. 类(包含接口和 Trait)文件采用驼峰式命名(首字母大写),其它采用小写+下划线命名;
e. 类名(包括接口和 Trait)和文件名保持一致,统一采用驼峰式命名(首字母大写);
- 函数和类、属性命名规范如下:
a. 类的命名采用驼峰法(首字母大写),如:User,UserType;
b. 函数的命名使用小写字母和下划线(小写字母开头)的方式,如:get_client_ip;
c. 方法的命名使用驼峰法(首字母小写),如:getUserName;
d. 属性的命名使用驼峰法(首字母小写),如:tableName;
e. 特例:以双下划线__打头的函数或方法作为魔术方法,如:__call和__autoload;
- 常量与配置的规范如下:
a. 常量以大写字母和下划线命名,如:APP_PATH;
b. 配置参数以小写字母和下划线命名,如:url_convert;
c. 环境变量定义使用大写字母和下划线命名,如:APP_DEBUG;
- 数据表和字段的规范如下:
a. 数据表和字段采用小写加下划线方式命名;
b. 并注意字段名不要以下划线开头,如: think_user表和user_name
c. 字段不建议使用驼峰和中文作为数据表及字段命名;
目录结构
- ThinkPHP6.0 支持多应用模式部署,
app是应用目录; - 默认情况下,是采用的单模式,如下图结构:

- 多应用模式下,结构如下图:

- 上图中,
app_name可以有多个,即多应用模式; - 在目录结构上,只确保对外可访问的仅
public目录;

- 在 app 目录中,还提供了一些文件,这些文件将在后面逐步讲到;

开启调试与配置文件
开启调试
- 在开发阶段,我们建议开启框架的调试模式;
- 调试模式开启后,会牺牲一些执行效率,但大大提高了开发排错的能力;
- 当项目部署到生产环境时,再关闭调试模式即可;
- 安装好的 TP6.0 默认并没有开启调试,可以在域名后面胡乱输入字符回车;
- 此时,页面只会提示:
页面错误,请稍后再试~,表示调试未开启; - 通过命令行安装的 TP6.0,会自动在根目录生成一个
.example.env文件; - 这个
.env文件是环境配置文件,我们只要删除前面的.example即可生效; - 此时,刷新页面,右下角会出现 Trace 调试小图标,说明调试开启了;
- 查看
.env文件,打开调试的环境变量为APP_DEBUG = true,false关闭;

- 那么,开启调试模式有那些显著的优势呢?
a. 记录系统运行流程的执行过程; b. 展示错误和调试信息,并开启日志记录; c. 模版修改可以及时生效(不会被缓存干扰); d. 启动右下角的 Trace 调试功能,更加强大; e. 发生异常时,也会显示异常信息;
- 当然,还有一种模式,就是关闭调试的时候,也可以显示简要的错误信息;
- 首先,关闭调试模式:
APP_DEBUG = false; - 然后,根目录下
config的app.php最后一样设置为:
'show_error_msg' => true,
配置信息
- 配置文件有两种形式,开启调试我们采用的
.env文件这是一种,适合本地; - 另一种配置文件,在根目录下的
config里,有很多类型的配置,适合部署; - 官方手册明确表示:
.env环境变量用于本地开发测试,部署后会被忽略; - 那么,我们怎么去获取这些配置文件的值呢?
- 对于
.env文件,比如[DATABASE]下的HOSTNAME = 127.0.0.1获取方式如下:

- 对于 config 文件,比如 database.php 下的 hostname,获取方式如下:

- 也可以判断这两种文件的配置是否存在,使用 has 方法判断:

- 关于这两种配置文件的优先级,在本地测试时
.env优先于 config; - 从
config配置中可以看出,它是先读取.env的,然后再默认配置一个自己的; - 而到了部署环境,
.env会被忽略,则自动切换到config配置;
URL 访问模式
URL 解析
- ThinkPHP 框架非常多的操作都是通过 URL 来实现的;
- 多应用:
http://serverName/index.php/应用/控制器/操作/参数/值…; - 单应用:
http://serverName/index.php/控制器/操作/参数/值…; - 由于 TP6.0 默认是单应用模式,多应用需要作为扩展安装,避免混乱暂时搁置;
http://serverName是域名地址,比如127.0.0.1:8000或localhost/tp6/index.php这个文件,是根目录下public/下的index.php(入口文件);- 控制器:
app目录下有一个controller控制器目录的Test.php(控制器); Test.php控制器的类名也必须是class Test,否则错误;- 操作就是控制器类里面的方法,比如:
index(默认免写)或hello(必写); - 那么完整形式为:
http://127.0.0.1/test/hello/name/worldhttp://127.0.0.1/index.php/test/hello/name/world
<?php
namespace app\controller;
use app\BaseController;
class Test extends BaseController
{
public function index()
{
return 'hello';
}
// 链接中的/test/hello/name/world分别为
// /类名/方法名/形参名/值
public function hello($name = 'ThinkPHP6')
{
return 'hello,' . $name;
}
}
URL 兼容模式
- 上个要点已经了解了 URL 所有访问规则,通过创建 Test 控制器更加了解;
- 如果上面那种形式的 URL 不支持的话,可以使用兼容模式的方式来访问:
http://localhost?s=test/hello/name/world
控制器
控制器定义
- 控制器,即
controller,控制器文件存放在app/controller目录下; - 如果想改变系统默认的控制器文件目录,可以在
config下route.php配置:

'controller_layer' => 'controller123',
- 类名和文件名大小写保持一致,并采用驼峰式(首字母大写);

- 从上面两段代码得知
Test.php的实际位置为:app\controller\Test.php - 在
Test类创建两个方法index(默认)和hello,访问 URL 如下:
http://localhost/test/http://localhost/test/hello
- 那么如果创建的是双字母组合,比如
class HelloWorld,访问 URL 如下:
http://localhost/helloworldhttp://localhost/hello_world
- 如果你想避免引入同类名时的冲突,可以
route.php设置控制器后缀:
'controller_suffix' => true,
- 此时,
Test.php就必须改成TestController.php,并类名也需要增加后缀;
渲染输出
- ThinkPHP 直接采用方法内
return返回的方式直接就输出了; - 使用json输出,直接采用
json函数;
$data = array('a'=>1, 'b'=>2, 'c'=>3);
return json($data);
- 不推荐使用
die,exit等PHP方法中断代码执行,推荐助手函数halt();
halt('中断测试');

基础.空.多级控制器
基础控制器
- 一般来说,创建控制器后,推荐继承基础控制器来获得更多的方法;
- 基础控制器仅仅提供了控制器验证功能,并注入了
think\App和think\Request; - 这两个对象后面会有章节详细讲解,下面我们继承并简单使用一下;
<?php
namespace app\controller;
use app\BaseController;
class Test extends BaseController
{
public function index()
{
//返回实际路径
echo $this->app->getBasePath();
//返回当前方法名
echo $this->request->action();
}
}
空控制器
- 在单应用模式下,我们可以给项目定义一个
Error控制器类,来提醒错误;
<?php
namespace app\controller;
class Error
{
public function index()
{
return '当前控制器不存在!';
}
}
多级控制器
- 所谓多级控制器,就是在控制器
controller目录下再建立目录并创建控制器; - 我们在
controller目录下建立group目录,并创建Blog.php控制器; - 而此时,我们需要访问的地址为:
http://localhost/group.blog
<?php
namespace app\controller\group;
use app\BaseController;
class Blog extends BaseController
{
public function index()
{
return 'index';
}
}
Alipay
Wechat
0 条评论