实战案例:使用 ThinkPHP 开发博客与电商系统
                           
天天向上
发布: 2025-01-22 01:01:11

原创
209 人浏览过

本教程通过实战案例,详细讲解如何使用 ThinkPHP 开发博客与电商系统。您将学习博客系统的用户注册、文章发布、评论与点赞功能的实现,以及电商系统的商品展示、购物车、订单管理和支付功能。同时,本案例涵盖数据库设计与优化、RESTful API 开发、前后端接口对接及角色与权限管理等内容,帮助您深入理解 ThinkPHP 在实际项目中的应用。


1. 搭建一个简单的博客系统

功能需求
  • 用户注册、登录、发布文章、评论、点赞等基本功能
  • 实现用户权限控制和角色管理
  • 文章搜索与标签功能
项目结构
├── application
│   ├── admin        # 后台管理模块
│   ├── index        # 前端展示模块
│   ├── common       # 公共模块
├── config           # 配置文件
├── public           # 前端入口文件
└── runtime          # 缓存和日志目录
1.1 用户注册与登录
  • 数据库设计:首先设计用户表(user 表)存储用户信息。
  CREATE TABLE user (
      id INT AUTO_INCREMENT PRIMARY KEY,
      username VARCHAR(50) NOT NULL,
      password VARCHAR(255) NOT NULL,
      email VARCHAR(100) NOT NULL,
      created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  );
  • 用户注册:用户提交注册表单,系统对用户输入的信息进行验证,成功后将用户信息存入数据库。
  public function register() {
      $data = input('post.');
      $validate = \think\facade\Validate::make([
          'username' => 'require|max:25',
          'password' => 'require|min:6',
          'email' => 'email',
      ]);

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

      // 加密密码
      $data['password'] = password_hash($data['password'], PASSWORD_BCRYPT);

      $user = new \app\model\User();
      $user->save($data);

      return json(['message' => '注册成功']);
  }
  • 用户登录:用户登录时,通过输入用户名和密码进行验证。
  public function login() {
      $data = input('post.');

      // 查找用户
      $user = \app\model\User::where('username', $data['username'])->find();
      if (!$user || !password_verify($data['password'], $user->password)) {
          return json(['error' => '用户名或密码错误']);
      }

      // 登录成功,生成 Token
      $token = jwt_encode($user->id); // 使用 JWT 生成令牌
      return json(['token' => $token]);
  }
1.2 发布文章与评论
  • 文章发布:文章表(posts)存储文章内容,用户可以通过后台发布文章。
  CREATE TABLE posts (
      id INT AUTO_INCREMENT PRIMARY KEY,
      title VARCHAR(255) NOT NULL,
      content TEXT NOT NULL,
      user_id INT NOT NULL,
      created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  );

发布文章控制器:

  public function publish() {
      $data = input('post.');

      $validate = \think\facade\Validate::make([
          'title' => 'require|max:255',
          'content' => 'require',
      ]);
      if (!$validate->check($data)) {
          return json(['error' => $validate->getError()]);
      }

      $data['user_id'] = session('user_id'); // 当前登录用户ID
      $post = new \app\model\Post();
      $post->save($data);

      return json(['message' => '文章发布成功']);
  }
  • 评论功能:评论表(comments)存储评论内容,关联用户和文章。
  CREATE TABLE comments (
      id INT AUTO_INCREMENT PRIMARY KEY,
      post_id INT NOT NULL,
      user_id INT NOT NULL,
      content TEXT NOT NULL,
      created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  );

发布评论:

  public function comment() {
      $data = input('post.');

      $validate = \think\facade\Validate::make([
          'post_id' => 'require|integer',
          'content' => 'require',
      ]);

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

      $data['user_id'] = session('user_id'); // 当前登录用户ID
      $comment = new \app\model\Comment();
      $comment->save($data);

      return json(['message' => '评论成功']);
  }
1.3 点赞功能

文章点赞表(likes)用于存储用户对文章的点赞行为。

CREATE TABLE likes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    post_id INT NOT NULL,
    user_id INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

点赞操作:

public function like() {
    $data = input('post.');

    $like = \app\model\Like::where('post_id', $data['post_id'])->where('user_id', session('user_id'))->find();
    if ($like) {
        return json(['message' => '已经点赞过']);
    }

    $like = new \app\model\Like();
    $like->save($data);

    return json(['message' => '点赞成功']);
}
1.4 用户权限控制和角色管理

角色管理表(roles)存储不同的用户角色,权限表(permissions)存储角色对应的权限。

CREATE TABLE roles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL
);

CREATE TABLE permissions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    role_id INT NOT NULL,
    permission VARCHAR(50) NOT NULL
);

通过权限控制实现不同角色的访问控制(如管理员可以管理所有文章,普通用户只能发布和评论文章)。

1.5 文章搜索与标签功能

为文章添加标签,通过关联表(post_tags)存储文章与标签的关系。

CREATE TABLE tags (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL
);

CREATE TABLE post_tags (
    post_id INT NOT NULL,
    tag_id INT NOT NULL
);

文章搜索功能:

public function search() {
    $keyword = input('get.keyword');
    $posts = \app\model\Post::where('title', 'like', "%$keyword%")->select();
    return json(['posts' => $posts]);
}

2. 实现一个电商系统

功能需求
  • 商品展示、分类、购物车、订单、支付等功能
  • 数据库存储设计与优化
  • API 和前端接口对接
项目结构
├── application
│   ├── admin        # 后台管理模块
│   ├── index        # 前端展示模块
│   ├── common       # 公共模块
├── config           # 配置文件
├── public           # 前端入口文件
└── runtime          # 缓存和日志目录
2.1 商品展示与分类
  • 数据库设计:设计商品表(products)和分类表(categories)存储商品与分类信息。
  CREATE TABLE categories (
      id INT AUTO_INCREMENT PRIMARY KEY,
      name VARCHAR(100) NOT NULL
  );

  CREATE TABLE products (
      id INT AUTO_INCREMENT PRIMARY KEY,
      name VARCHAR(255) NOT NULL,
      price DECIMAL(10, 2) NOT NULL,
      category_id INT NOT NULL,
      description TEXT,
      image VARCHAR(255)
  );
  • 商品展示:前端可以通过 API 获取商品列表,并按分类进行展示。
  public function getProducts() {
      $category_id = input('get.category_id', 0);
      $products = \app\model\Product::where('category_id', $category_id)->select();
      return json(['products' => $products]);
  }
2.2 购物车功能

设计购物车表(cart)存储用户的购物车商品。

CREATE TABLE cart (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    product_id INT NOT NULL,
    quantity INT NOT NULL
);
  • 添加到购物车
  public function addToCart() {
      $data = input('post.');
      $cart = new \app\model\Cart();
      $cart->save($data);
      return json(['message' => '添加到购物车成功']);
  }
2.3 订单与支付功能

设计订单表(orders)和支付表(payments)。

CREATE TABLE orders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    total_price DECIMAL(10, 2) NOT NULL,
    status ENUM('pending', 'paid', 'shipped', 'completed') NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE

 payments (
    id INT AUTO_INCREMENT PRIMARY KEY,
    order_id INT NOT NULL,
    amount DECIMAL(10, 2) NOT NULL,
    payment_method VARCHAR(50) NOT NULL,
    payment_status ENUM('pending', 'completed', 'failed') NOT NULL
);
  • 创建订单
  public function createOrder() {
      $user_id = session('user_id');
      $total_price = input('post.total_price');
      $order = new \app\model\Order();
      $order->save(['user_id' => $user_id, 'total_price' => $total_price, 'status' => 'pending']);
      return json(['message' => '订单创建成功']);
  }
2.4 API 和前端接口对接

在电商系统中,前端与后端的接口对接是通过 API 来实现的。前端通过 AJAX 请求调用 API,获取商品、订单等信息。

前端示例(通过 AJAX 获取商品列表):

$.ajax({
    url: '/api/products',
    type: 'GET',
    data: { category_id: 1 },
    success: function(response) {
        console.log(response.products);
    }
});

通过这些实战项目,您可以全面了解 ThinkPHP 在实际应用中的使用方式,掌握从基础到高级的开发技巧,快速搭建和维护 Web 应用。

发表回复 0

Your email address will not be published. Required fields are marked *