PHP ThinkPHP 框架入门
ThinkPHP 是国内最流行的 PHP 框架,文档完善、中文友好,适合快速开发。
安装
# 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);