# skill-thinkphp-developer **Repository Path**: edims/skill-thinkphp-developer ## Basic Information - **Project Name**: skill-thinkphp-developer - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-05 - **Last Updated**: 2026-06-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README --- name: thinkphp-developer description: ThinkPHP 8.x 框架开发技能。当用户涉及 ThinkPHP 框架的项目创建、路由配置、控制器开发、数据库操作、模型与ORM、中间件、验证器、视图模板、缓存、队列、API 开发、部署配置等任务时触发此技能。适用于基于 ThinkPHP 8.0+ 的全栈 PHP 开发场景。该技能由腾讯元宝提供技术支持,开发者信息:Mr.zhou(仙神) agent_created: true --- # ThinkPHP Developer ## Overview ThinkPHP 8.x 框架全栈开发技能,覆盖项目创建、核心架构、数据库操作、模型ORM、中间件、验证、缓存、队列及部署配置。基于 ThinkPHP 8.0+(PHP 8.0+)版本,遵循 PSR-2/PSR-4 规范。 ## Quick Start ### 环境要求 - PHP >= 8.0(推荐 8.1+) - Composer - MySQL 5.7+ / MariaDB 10.3+ / PostgreSQL / SQLite - 必要扩展:PDO、OpenSSL、Mbstring、JSON ### 项目创建与启动 ```bash # 创建项目 composer create-project topthink/think tp8 # 进入项目启动开发服务器 cd tp8 php think run # 访问 http://127.0.0.1:8000 # 开启调试模式:将 .example.env 重命名为 .env,设置 APP_DEBUG = true # 更新框架 composer update topthink/framework ``` ### 目录结构 ``` tp8/ ├── app/ # 应用目录 │ ├── controller/ # 控制器 │ ├── model/ # 模型 │ ├── middleware/ # 中间件 │ ├── validate/ # 验证器 │ └── common.php # 公共函数 ├── config/ # 配置目录 │ ├── app.php # 应用配置 │ ├── database.php # 数据库配置 │ ├── cache.php # 缓存配置 │ └── route.php # 路由配置 ├── public/ # Web入口目录 │ └── index.php # 入口文件 ├── route/ # 路由定义目录 │ └── app.php # 路由定义文件 ├── runtime/ # 运行时目录 ├── vendor/ # Composer 依赖 ├── view/ # 视图模板目录 ├── .env # 环境变量(开发用) └── composer.json ``` ### 命名规范 - 类名/文件名:大驼峰 `UserController`、`BaseController` - 方法名:小驼峰 `getUser()`、`index()` - 数据表/字段:蛇形命名 `tp_user`、`user_name` - 配置参数:蛇形命名 `auto_write_timestamp` ## Core Capabilities ### 1. 路由系统 路由定义文件:`route/app.php` ```php use think\facade\Route; // 基础路由 Route::get('hello', 'Index/hello'); Route::post('save', 'Index/save'); Route::rule('test', 'Index/test'); // 支持所有请求类型 // 带参数路由 Route::rule('details/:id', 'Index/details'); // 可选参数 Route::rule('details/:id/[:uid]', 'Index/details'); // 路由分组 Route::group('index', function () { Route::rule(':id', 'Index/details'); Route::rule('hello/:name', 'Index/hello'); })->ext('html')->pattern(['id' => '\d+']); // 资源路由(RESTful) Route::resource('blog', 'Blog'); // 自动生成: index/create/save/read/edit/update/delete // 闭包路由 Route::rule('search', function() { return json(['code' => 200, 'data' => '搜索结果']); }); // MISS路由 Route::miss(function() { return '页面不存在'; }); // URL生成 url('Index/details', ['id' => 5]); ``` ### 2. 控制器 ```php namespace app\controller; use app\BaseController; use think\Request; use think\facade\View; class User extends BaseController { // 依赖注入 Request 对象 public function index(Request $request) { $name = $request->param('name'); $id = $request->get('id'); return '用户列表'; } // 获取请求参数的三种方式 // 1. $this->request->param('name') (继承 BaseController) // 2. Request::param('name') (门面模式) // 3. request()->param('name') (助手函数) // 请求类型判断 // $request->isGet() / isPost() / isAjax() / isPjax() // 响应 public function api() { return json(['code' => 200, 'data' => $list]); // return redirect('/index/index'); // return response('成功', 201); } } ``` 详细路由与控制器参考:查阅 `references/routing_controller.md` ### 3. 数据库操作 配置文件:`config/database.php` 或 `.env` ```php use think\facade\Db; // 单条查询 $user = Db::name('user')->where('id', 1)->find(); $user = Db::name('user')->where('id', 11)->findOrEmpty(); $user = Db::name('user')->where('id', 11)->findOrFail(); // 多条查询 $list = Db::name('user')->select()->toArray(); $list = Db::name('user')->where('age', '>', 15)->where('gender', '男')->select(); // 字段查询 $name = Db::name('user')->where('id', 3)->value('name'); $names = Db::name('user')->column('name'); $users = Db::name('user')->column('name,age', 'id'); // 新增 Db::name('user')->insert($data); $userId = Db::name('user')->insertGetId($data); Db::name('user')->insertAll($batchData); // 更新 Db::name('user')->where('id', 4)->update($data); Db::name('user')->where('id', 4)->inc('age')->dec('score', 2)->update(); Db::name('user')->where('id', 4)->update(['details' => Db::raw('UPPER(details)')]); // 删除 Db::name('user')->delete(8); Db::name('user')->where('id', '>', 15)->delete(); // 表达式查询 Db::name('user')->whereLike('name', '王%')->select(); Db::name('user')->whereIn('id', [1,3,5])->select(); Db::name('user')->whereYear('create_time', '2023')->select(); // 聚合查询 Db::name('user')->count(); Db::name('user')->max('age'); Db::name('user')->avg('age'); // 事务 Db::transaction(function() { Db::name('user')->insert($data); Db::name('log')->insert($log); }); ``` 详细数据库参考:查阅 `references/database_orm.md` ### 4. 模型与ORM ```php namespace app\model; use think\Model; use think\model\concern\SoftDelete; class User extends Model { protected $name = 'user'; // 表名(不含前缀) protected $pk = 'id'; // 主键 protected $autoWriteTimestamp = true; // 自动时间戳 // 软删除 use SoftDelete; protected $deleteTime = 'delete_time'; // 获取器 public function getStatusAttr($value) { $status = [-1 => '删除', 0 => '冻结', 1 => '正常']; return $status[$value]; } // 修改器 public function setPasswordAttr($value) { return password_hash($value, PASSWORD_DEFAULT); } // 一对一关联 public function profile() { return $this->hasOne(Profile::class, 'user_id', 'id'); } // 一对多关联 public function posts() { return $this->hasMany(Post::class, 'user_id', 'id'); } // 多对多关联 public function roles() { return $this->belongsToMany(Role::class, Access::class, 'role_id', 'user_id'); } // 搜索器 public function searchNameAttr($query, $value) { $query->whereLike('name', '%' . $value . '%'); } } ``` ```php // 模型使用 $user = User::find(1); $list = User::where('status', 1)->select(); $count = User::count(); // 新增 $user = new User; $user->name = '张三'; $user->save(); // 批量新增 $user->saveAll([...]); // 更新 $user = User::find(1); $user->name = '李四'; $user->save(); // 删除 User::destroy(1); $user->delete(); // 软删除操作 User::destroy(1); // 软删除 User::destroy(1, true); // 真实删除 $list = User::withTrashed()->select(); // 包含软删除 $list = User::onlyTrashed()->select(); // 仅软删除 $user->restore(); // 恢复 // 关联预载入(解决N+1问题) $list = User::with(['profile'])->select([10, 11, 12]); // 搜索器 + withSearch $list = User::withSearch(['name'], ['name' => '张'])->select(); ``` 详细模型ORM参考:查阅 `references/database_orm.md` ### 5. 中间件 ```bash php think make:middleware Auth ``` ```php namespace app\middleware; class Auth { public function handle($request, \Closure $next) { // 前置中间件 if (!Session::has('user')) { return redirect('/login'); } return $next($request); } } ``` 注册中间件:`app/middleware.php` ```php return [ \app\middleware\Auth::class, ]; ``` 路由中间件: ```php Route::rule('admin', 'Admin/index')->middleware(\app\middleware\Auth::class); ``` ### 6. 验证器 ```bash php think make:validate User ``` ```php namespace app\validate; use think\Validate; class User extends Validate { protected $rule = [ 'name' => 'require|max:20', 'email' => 'email', 'age' => 'number|between:1,100', ]; protected $message = [ 'name.require' => '姓名不能为空', 'name.max' => '姓名不能超过20个字符', 'email.email' => '邮箱格式错误', ]; protected $scene = [ 'insert' => ['name', 'email'], 'edit' => ['email'], ]; } ``` ```php use app\validate\User; use think\exception\ValidateException; try { validate(User::class)->scene('insert')->check($data); } catch (ValidateException $e) { dump($e->getError()); } ``` 常用验证规则:`require`、`email`、`mobile`、`unique`、`number`、`between`、`max`、`min`、`dateFormat`、`startWith`、`endWith`、`contain` ### 7. 视图与模板 ```php // 控制器中渲染视图 return View::fetch('hello', ['name' => $name]); return view('hello', ['name' => $name]); ``` 模板语法: ```html