亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php怎么實現關注功能

發布時間:2021-11-19 10:02:16 來源:億速云 閱讀:184 作者:柒染 欄目:編程語言

php怎么實現關注功能,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

php實現關注功能的方法:1、創建控制層實現代碼“namespace App\Controller\Test...”;2、設計服務層實現代碼“namespace App\Service\Ptg...”;3、設置好倉儲層代碼即可。

本文操作環境: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 = 'follow', int $userId, int $otherId)
    {
        // 關注
        if ($type === 'follow') {
            // 先處理 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 = '%u:follow';

    /**
     * 粉絲key
     * @var string
     */
    private $fansKey = '%u:fans';

    /**
     * 前綴
     */
    public function initPrefix()
    {
        return 'follow:';
    }

    /**
     * 增加關注
     * @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);
    }
}

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

饶河县| 宜宾市| 漠河县| 洛宁县| 北宁市| 临沧市| 南溪县| 方城县| 缙云县| 屯门区| 贵定县| 新乡市| 北京市| 成都市| 应用必备| 永仁县| 武夷山市| 卓资县| 远安县| 高雄市| 汪清县| 莱芜市| 西乡县| 宣化县| 寿宁县| 舟山市| 中牟县| 宝丰县| 卢氏县| 舒城县| 通榆县| 安多县| 永登县| 申扎县| 罗定市| 横峰县| 金寨县| 勃利县| 新竹市| 驻马店市| 泰和县|