How to implement the attention function in php: 1. Create the control layer implementation code "namespace App\Controller\Test..."; 2. Design the service layer implementation code "namespace App\Service\Ptg..." ; 3. Set the warehousing layer code.
The operating environment of this article: windows7 system, PHP7.1 version, DELL G3 computer
How to implement the follow function in php?
php redis implements the following function:
1: Following function
2: Functional analysis "Follow" function
3: The ordinary "Follow" function has 4 important values behind it
Specific implementationOn PC or APP At the same time, if the amount of data is small, the database can still support it. If the amount of data is very large, it is better to use caching.
1 Control layer implementation<?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); } } ?>Copy after login
2 Service layer implementation<?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; } } ?>Copy after login
Warehouse layer implementation [Recommended:PHP video tutorial]
<?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); } }Copy after login
The above is the detailed content of How to implement the follow function in php. For more information, please follow other related articles on the PHP Chinese website!