PHP ThinkPHP 框架入门

ThinkPHP 是国内最流行的 PHP 框架,文档完善、中文友好,适合快速开发。

安装

BASH 实例
# PHP 需要先安装 Composer
composer create-project topthink/think myapp
cd myapp
php think run  # 启动内置服务器
``

访问 http://localhost:8000 看到欢迎页即安装成功。

目录结构

` myapp/ ├── app/ │ ├── controller/ # 控制器 │ ├── model/ # 模型 │ └── view/ # 视图 ├── config/ # 配置文件 ├── public/ # 网站根目录(入口文件) ├── route/ # 路由定义 └── think # 命令行工具 `

路由

`php // route/app.php use think\facade\Route;

Route::get('/', 'Index/index'); Route::get('user/:id', 'User/show'); Route::post('user/create', 'User/create');

// 资源路由(自动生成增删改查路由) Route::resource('article', 'Article'); `

控制器

`php // app/controller/User.php namespace app\controller;

use think\Request; use app\model\User as UserModel;

class User { public function index(): string { $users = UserModel::select(); return json($users); }

public function show(int $id): string { $user = UserModel::find($id); if (!$user) { return json(['error' => '用户不存在'], 404); } return json($user); }

public function create(Request $request): string { $data = $request->post(); $user = UserModel::create($data); return json($user); } } `

模型

`php // app/model/User.php namespace app\model;

use think\Model;

class User extends Model { protected $table = 'users';

// 自动时间戳 protected $autoWriteTimestamp = true;

// 字段类型 protected $type = [ 'status' => 'integer', ];

// 关联:一个用户有多篇文章 public function articles() { return $this->hasMany(Article::class); } }

// 使用 $users = User::where('status', 1)->order('id', 'desc')->limit(10)->select(); $user = User::find(1); $user = User::where('email', 'test@example.com')->find();

User::create(['name' => '张三', 'email' => 'zs@example.com']); User::where('id', 1)->update(['name' => '李四']); User::destroy(1); `

视图

`php // 控制器中返回视图 public function index(): \think\response\View { $users = User::select(); return view('user/index', ['users' => $users]); } `

`html <!-- app/view/user/index.html --> {extend name="layout/base" /} {block name="content"} <ul> {volist name="users" id="user"} <li>{$user.name} - {$user.email}</li> {/volist} </ul> {/block} `

数据库查询

`php use think\facade\Db;

// 原生查询 $users = Db::query('SELECT * FROM users WHERE status = ?', [1]);

// 查询构造器 $users = Db::table('users') ->where('status', 1) ->where('age', '>', 18) ->order('created_at', 'desc') ->paginate(10);

// 事务 Db::transaction(function() { Db::table('accounts')->where('id', 1)->dec('balance', 100); Db::table('accounts')->where('id', 2)->inc('balance', 100); }); `

中间件

``php // app/middleware/Auth.php namespace app\middleware;

class Auth { public function handle($request, \Closure $next) { if (!session('user_id')) { return redirect('/login'); } return $next($request); } }

// 在路由上使用 Route::get('dashboard', 'Dashboard/index')->middleware(\app\middleware\Auth::class);