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/world
http://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/helloworld
http://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';
}
}
0 条评论