PHP에서 주의 기능을 구현하는 방법: 1. 제어 계층 구현 코드 "namespace AppControllerTest..."를 생성합니다. 2. 서비스 계층 구현 코드 "namespace AppServicePtg..."를 설계합니다. 암호.
이 기사의 운영 환경: Windows 7 시스템, PHP 버전 7.1, DELL G3 컴퓨터
PHP에서 다음 기능을 구현하는 방법은 무엇입니까?
php + redis는 follow 기능을 구현합니다:
1: Follow 기능
2: "follow" 기능의 기능 분석
3: 일반적인 "follow" 기능 뒤에는 4가지 중요한 점이 있습니다. Value
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; } } ?>
Warehouse 계층 구현 [권장: 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); } }
위 내용은 PHP에서 팔로우 기능을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!