框架

ThinkPHP

Db、模型、控制器、Facade 与路由常用片段。 — 共 17 条

共 17 条代码片段

A. 数据库

查询单条 / 列表

use think\facade\Db;

$user = Db::name('user')->where('id', 1)->find();
$list = Db::name('user')->where('status', 1)->order('id', 'desc')->page(1, 20)->select();
$count = Db::name('user')->where('status', 1)->count();

新增 / 更新 / 删除

Db::name('user')->insert([
  'name' => 'vic',
  'email' => 'vic@example.com',
]);

$id = Db::name('user')->insertGetId(['name' => 'vic']);

Db::name('user')->where('id', 1)->update(['name' => 'nalan']);
Db::name('user')->where('id', 1)->delete();

关联查询

Db::name('user')->alias('u')
  ->leftJoin('order o', 'u.id = o.user_id')
  ->field('u.id,u.name,count(o.id) as order_count')
  ->group('u.id')
  ->select();

事务

Db::startTrans();
try {
    Db::name('account')->where('id', 1)->dec('balance', 100)->update();
    Db::name('account')->where('id', 2)->inc('balance', 100)->update();
    Db::commit();
} catch (\Throwable $e) {
    Db::rollback();
    throw $e;
}

模型查询

use app\model\User;

$user = User::find(1);
$list = User::where('status', 1)->order('id', 'desc')->paginate(20);
User::create(['name' => 'vic', 'email' => 'vic@example.com']);
$user->save(['name' => 'nalan']);
$user->delete();

B. 控制器与请求

获取请求参数

use think\facade\Request;

$id = Request::param('id/d', 0);
$name = Request::param('name/s', '');
$data = Request::only(['name', 'email']);
$all = Request::param();

// 控制器内
$id = $this->request->param('id/d');
$isPost = $this->request->isPost();

返回 JSON

return json([
  'code' => 0,
  'msg' => 'ok',
  'data' => $data,
]);

return json(['code' => 1, 'msg' => '参数错误'], 400);

验证器

use think\facade\Validate;

$validate = Validate::rule([
  'name' => 'require|max:64',
  'email' => 'require|email',
  'mobile' => 'mobile',
]);

if (!$validate->check($data)) {
  return json(['code' => 1, 'msg' => $validate->getError()]);
}

控制器示例

namespace app\controller;

use app\BaseController;
use app\model\User;

class UserController extends BaseController
{
    public function index()
    {
        $page = $this->request->param('page/d', 1);
        $list = User::order('id', 'desc')->page($page, 20)->select();
        return json(['code' => 0, 'data' => $list]);
    }
}

C. 常用 Facade

Cache 缓存

use think\facade\Cache;

Cache::set('user:1', $user, 3600);
$user = Cache::get('user:1');
Cache::delete('user:1');
Cache::remember('user:1', function () {
  return User::find(1);
}, 3600);

Session

use think\facade\Session;

Session::set('user_id', 1);
$userId = Session::get('user_id');
Session::delete('user_id');
Session::clear();

Config 配置

use think\facade\Config;

$appName = Config::get('app.app_name');
$debug = config('app.app_debug');

Log 日志

use think\facade\Log;

Log::info('用户登录', ['user_id' => 1]);
Log::error('支付失败', ['order_id' => $orderId]);

Env 环境变量

use think\facade\Env;

$host = Env::get('database.hostname');
$debug = env('app_debug', false);

D. 路由与中间件

路由定义

use think\facade\Route;

Route::get('user/:id', 'User/read');
Route::post('user', 'User/save');
Route::resource('blog', 'Blog');
Route::group('api', function () {
  Route::get('list', 'Api/list');
})->middleware(\app\middleware\Auth::class);

中间件

namespace app\middleware;

class Auth
{
    public function handle($request, \Closure $next)
    {
        $token = $request->header('Authorization');
        if (!$token) {
            return json(['code' => 401, 'msg' => '未登录']);
        }
        return $next($request);
    }
}

URL 生成

url('user/read', ['id' => 1]);
(string) url('index/index');