1 Star 0 Fork 1

lilei / tp6-demo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

ThinkPHP 6.0

概述

基于 thinkphp 6.0 的基础代码示例。

开发环境

  • PHP7.1+,兼容PHP8.0。
  • MySQL 8.0
  • redis
  • nginx

项目部署

-- 拉取代码
$ git clone https://gitee.com/xiaoyulu/tp6-demo.git
$ cd tp6-demo

-- 安装
$ composer install -vvv

-- 创建配置文件
$ cp .example.env .env

-- 在 .env 文件里配置数据库
[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = tp6-demo
USERNAME = tp6-demo
PASSWORD = 123456
HOSTPORT = 3306
CHARSET = utf8
DEBUG = true


-- 执行数据库迁移,生成测试表
$ php think migrate:run


-- redis 队列
config/queue.php,default=redis
$ php think queue:work --queue=default      	# 运行队列【可选,调试时使用】
$ php think queue:listen --queue=default        # 监听队列【可选,调试时使用】


-- 导入 postman 文件
tp6-demo.postman_collection.json

-- 设置 postman 变量
{{tp6-demo}}, tp6-demo 设置为 http://tp6-demo.test/,最后的反斜线别少了。

文档

package

topthink/think-ide-helper

模式注释

-- 所有模型
php think ide-helper:model

-- 指定模型
php think ide-helper:model app\\model\\User

robmorgan/phinx

生成配置文件

vendor/bin/phinx init

phinx.php

environments:
    default_migration_table: phinxlog
    default_environment: development
    production:
        adapter: mysql
        host: localhost
        name: production_db
        user: root
        pass: ''
        port: 3306
        charset: utf8
        collation: utf8_unicode_ci
        table_prefix: dev_ # 表前缀
        table_suffix: _v1  # 表后缀

团队规范

类名规范

model 模型不带后缀,其它必须要,避免去除命名空间外调用重名。

User
UserController
UserMiddleware
UserCommand
UserEvent
UserListener
UserService
UserSubscribe
UserValidate

中间件 - 调用

放在路由里统一调用,原因是拥有直观性,从一个文件里就知道中间件由哪个路由进行了使用

路由执行顺序:全局中间件->应用中间件->路由中间件->控制器中间件

route/app.php

Route::rule('hello/:name', 'hello')->middleware('auth');

事件

多使用事件系统,降低系统的耦合性。事件对于业务的扩展的优势是在不更改原代码的基础上做功能扩展。

nginx 伪静态

location / {
   if (!-e $request_filename) {
   		rewrite  ^(.*)$  /index.php?s=/$1  last;
    }
}

路由 - 命名

如果路由的控制器或者方法是驼峰写法,建议使用以下规范:

app/controller/api/v1/UserLoginLogController.php

Route::resource('user-login-log', \app\controller\api\v1\UserLoginLogController::class);

如果不使用资源路由的形式,建议使用以下规范:

Route::get('user/login-log', '\app\controller\api\v1\UserLoginLogController@index')->name('index');
Route::get('user/login-log/index', '\app\controller\api\v1\UserLoginLogController@index')->name('index');// 默认 index 可以不用写

路由 - 配置

config/route.php

// 是否强制使用路由
'url_route_must' => true,

// 路由是否完全匹配
'route_complete_match' => true,

路由 - 资源路由

https://www.kancloud.cn/manual/thinkphp6_0/1037501

支持设置RESTFul请求的资源路由,方式如下:

Route::resource('blog', 'Blog');
标识 请求类型 生成路由规则 对应操作方法(默认)
index GET blog index
create GET blog/create create
store POST blog/store store
show GET blog/:id show
edit GET blog/:id/edit edit
update PUT blog/:id update
delete DELETE blog/:id delete

请求

vendor/topthink/framework/src/think/Request.php

HTTP 请求的系统类,可以获取你所需要的请求资源。

建议写法:

// 获取 get 传参
$request->get('arg');

// 获取 post 传参
$request->post('arg');

目的是对应路由的请求方式(get,post),也好让其他队员在不查看路由的情况下,得知请求方式。

请求-输入变量

https://www.kancloud.cn/manual/thinkphp6_0/1037519

文档里有讲到输入变量过滤

use think\Request;

public function index(Request $reqeust)
{
	$request->get('username', '', 'htmlspecialchars');
}

输入变量强转类型

$request->get('user_id/d');
修饰符 作用
s 强制转换为字符串类型
d 强制转换为整型类型
b 强制转换为布尔类型
a 强制转换为数组类型
f 强制转换为浮点类型

.env 环境配置

https://www.kancloud.cn/manual/thinkphp6_0/1037484

因为是在开发环境,所以我们新建一个开发本的配置,并不加入版本控制中去。

// .env.example - 示例
// .env.testing - 测试
// .env.develop - 开发
// .env - 生产

cp .example.env .env.testing

public/index.php

$http = (new App())->setEnvName('testing')->http;

SQL 调试

调用执行的 SQL 语句

User::findOrEmpty(1);
echo User::getLastSql();
# SELECT * FROM 'think_user' WHERE `id` = 1

返回当前的查询 SQL 而不执行

echo User::fetchSql()->findOrEmpty(1);

SQL 监听

Db::listen(function($sql, $runtime, $master) {
    // 进行监听处理
});

监听方法支持三个参数,依次是执行的SQL语句,运行时间(秒),以及主从标记(如果没有开启分布式的话,该参数为null,否则为布尔值)。

数据库迁移

https://book.cakephp.org/phinx/0/en/migrations.html#working-with-columns

在创建迁移文件时,请使用以下指令:

-- 创建表 Users 是表名
php think migrate:create CreateTableUsers
-- 生成的文件 *_create_table_users.php

-- 删除表
php think migrate:create DropTableUsers
-- drop_table_users.php

-- 增加表列(column),在实际中,需要将 column 替换为你的列
-- 强烈建议不要偷懒,一个文件增加一个表列(column)
php think migrate:create AddColumnToUsersTable
-- add_column_to_users_table.php

-- 修改表列
php think migrate:create AlterColumnToUsersTable
-- *_alter_column_to_users_table.php

可能你会觉得文件名太长了,不雅观。其实该文件名最大的优点就是直观性,让开发人员了解该迁移文件的内容。

日志通道

先皮配置

config/log.php

'channels' => [
	// api-controller 日志通道
    'api-controller' => [
        'type'          => 'file',
        'single'        => 'api-controller_'.date('Ymd'),// 日志文件名
        'max_files'     => 30,
        'json'          => false,
        'time_format'   => 'Y-m-d H:i:s',
        'format'        => '[%s][%s] %s',
    ],
],

日志通道调用

use think\facade\Log;

// 写入日志, string|array $message
Log::channel('api-controller')->write($message, 'info');

表单令牌

文档

空文件

简介

for ThinkPHP 6.0 展开 收起
PHP 等 3 种语言
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
PHP
1
https://gitee.com/xiaoyulu/tp6-demo.git
git@gitee.com:xiaoyulu/tp6-demo.git
xiaoyulu
tp6-demo
tp6-demo
master

搜索帮助