PHPでフォロー関数を実装する方法

藏色散人
リリース: 2023-03-13 22:08:02
オリジナル
2244 人が閲覧しました

php でアテンション関数を実装する方法: 1. コントロール層の実装コード「namespace App\Controller\Test...」を作成します; 2. サービス層の実装コード「namespace App\Service\Ptg」を設計します..." ; 3. 倉庫層コードを設定します。

PHPでフォロー関数を実装する方法

この記事の動作環境:Windows7システム、PHP7.1バージョン、DELL G3コンピュータ

実装方法は以下の通りです。 phpの関数?

php redis は次の関数を実装します:

製品の価値

1: 次の関数
2: 機能分析「フォロー」機能
3: 通常の「フォロー」機能には、その背後に4つの重要な値があります

アプリケーションシナリオ

PCまたはAPPで同時にデータ量が少ない場合はデータベースでサポートできますが、データ量が非常に多い場合はキャッシュを使用することをお勧めします。

具体的な実装

1 コントロール層の実装

<?php

namespace App\Controller\Test;

use App\Controller\AbstractController;
use App\Service\Ptg\TestFollowService;
use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\Middleware;
use Hyperf\HttpServer\Annotation\RequestMapping;

/**
 * 测试 - 关注
 * Class TestFollowController
 * @package App\Controller
 * @Controller(prefix="test")
 */
class TestFollowController extends AbstractController
{
    /**
     * 服务层 - 关注
     * @Inject()
     * @var TestFollowService
     */
    protected $testFollowService;

    /**
     * 关注/取消关注
     * @param Request $request
     * @return mixed
     */
    public function follow(Request $request)
    {
        $type = $request->input('type', 'follow');         // 1-关注-follow 2-取消关注-remove
        $userId = $request->input('user_id', 0);    // 我的用户ID
        $otherId = $request->input('other_id', 0);  // 我关注的用户ID
        if ($userId == $otherId) {
            return $this->response->apiResponse();
        }
        $this->testFollowService->follow($type, $userId, $otherId);
        return $this->response->apiResponse();
    }

    /**
     * 我的关注/粉丝
     * @param Request $request
     * @return mixed
     */
    public function myFollowAndFans(Request $request)
    {
        $type = $request->input('type', 'follow');  // 1-关注-follow 2-粉丝-fans
        $userId = $request->input('user_id', 0);    // 我的用户ID
        $page = $request->input('page', 1);         // 页码
        $limit = $request->input('limit', 10);      // 每页显示条数
        $res = $this->testFollowService->myFollowAndFans($userId, $type, $page, $limit);
        return $this->response->apiResponse($res);
    }
}
?>
ログイン後にコピー
2 サービス層の実装

<?php

namespace App\Service\Ptg;

use App\Repository\Redis\TestFollowRedis;
use App\Service\AbstractService;
use Hyperf\Di\Annotation\Inject;

class TestFollowService extends AbstractService
{
    /**
     * 仓储层 - 关注
     * @Inject()
     * @var TestFollowRedis
     */
    protected $testFollowRedis;

    /**
     * 关注/取消关注
     * @param string $type
     * @param int $userId
     * @param int $otherId
     * @return mixed
     */
    public function follow($type = &#39;follow&#39;, int $userId, int $otherId)
    {
        // 关注
        if ($type === &#39;follow&#39;) {
            // 先处理 mysql
            // TODO mysql 操作
            // 然后处理 redis
            $this->testFollowRedis->zAddFollow($userId, $otherId);
            $this->testFollowRedis->zAddFans($otherId, $userId);
        }
        // 取消关注
        if ($type === 'remove') {
            // 先处理 mysql
            // TODO mysql 操作
            // 然后处理 redis
            $this->testFollowRedis->zRemFollow($userId, $otherId);
            $this->testFollowRedis->zRemFans($otherId, $userId);
        }
    }

    /**
     * 我的关注/粉丝
     * @param int $userId 当前登录用户的ID
     * @param string $type 要获取的数据
     * @param int $page 页码
     * @param int $limit 限制条数
     * @return array
     */
    public function myFollowAndFans(int $userId, $type = 'follow', $page = 1, $limit = 10)
    {
        $start = $limit * ($page - 1);
        $end = $start + $limit - 1;
        $res = [];
        if ($type === 'follow') {
            $res = $this->testFollowRedis->zRangeFollow($userId, $start, $end);
        }
        if ($type === 'fans') {
            $res = $this->testFollowRedis->zRangeFans($userId, $start, $end);
        }
        return $res;
    }
}
?>
ログイン後にコピー
ウェアハウス層の実装 [推奨:

PHP ビデオ チュートリアル ]

<?php

namespace App\Repository\Redis;

class TestFollowRedis extends AbstractRedis
{
    /**
     * 关注key
     * @var string
     */
    private $followKey = &#39;%u:follow&#39;;

    /**
     * 粉丝key
     * @var string
     */
    private $fansKey = &#39;%u:fans&#39;;

    /**
     * 前缀
     */
    public function initPrefix()
    {
        return &#39;follow:&#39;;
    }

    /**
     * 增加关注
     * @param $userId
     * @param $otherId
     */
    public function zAddFollow($userId, $otherId)
    {
        $this->redis->zAdd(sprintf($this->prefix . $this->followKey, $userId), time(), $otherId);
    }

    /**
     * 取消关注
     * @param $userId
     * @param $otherId
     */
    public function zRemFollow($userId, $otherId)
    {
        $this->redis->zRem(sprintf($this->prefix . $this->followKey, $userId), $otherId);
    }

    /**
     * 我的关注 | 正序
     * @param int $userId
     * @param int $start
     * @param int $end
     * @return array
     */
    public function zRangeFollow(int $userId, int $start = 0, int $end = 9)
    {
        return $this->redis->zRange(sprintf($this->prefix . $this->followKey, $userId), $start, $end);
    }

    /**
     * 我的关注 | 倒序
     * @param int $userId
     * @param int $start
     * @param int $end
     * @return array
     */
    public function zRevRangeFollow(int $userId, int $start = 0, int $end = 9)
    {
        return $this->redis->zRevRange(sprintf($this->prefix . $this->followKey, $userId), $start, $end);
    }

    /**
     * 增加粉丝
     * @param $userId
     * @param $otherId
     */
    public function zAddFans($userId, $otherId)
    {
        $this->redis->zAdd(sprintf($this->prefix . $this->fansKey, $userId), time(), $otherId);
    }

    /**
     * 移除粉丝
     * @param $userId
     * @param $otherId
     */
    public function zRemFans($userId, $otherId)
    {
        $this->redis->zRem(sprintf($this->prefix . $this->fansKey, $userId), $otherId);
    }

    /**
     * 我的粉丝 | 正序
     * @param int $userId
     * @param int $start
     * @param int $end
     * @return array
     */
    public function zRangeFans(int $userId, int $start = 0, int $end = 9)
    {
        return $this->redis->zRange(sprintf($this->prefix . $this->fansKey, $userId), $start, $end);
    }

    /**
     * 我的粉丝 | 倒序
     * @param int $userId
     * @param int $start
     * @param int $end
     * @return array
     */
    public function zRevRangeFans(int $userId, int $start = 0, int $end = 9)
    {
        return $this->redis->zRevRange(sprintf($this->prefix . $this->fansKey, $userId), $start, $end);
    }
}
ログイン後にコピー

以上がPHPでフォロー関数を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート