基于 thinkphp 6.0 的基础代码示例。
-- 拉取代码
$ 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/,最后的反斜线别少了。
dump()
调试输出。模式注释
-- 所有模型
php think ide-helper:model
-- 指定模型
php think ide-helper:model app\\model\\User
生成配置文件
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');
多使用事件系统,降低系统的耦合性。事件对于业务的扩展的优势是在不更改原代码的基础上做功能扩展。
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 | 强制转换为浮点类型 |
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 语句
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');
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。