PostsController.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. namespace Modules\Api\Controllers;
  3. use Hyperf\Validation\Contract\ValidatorFactoryInterface;
  4. use App\Constants\CommonConstant;
  5. use App\Model\PostsModel;
  6. use App\Repositories\Utils\M3u8CacheRepository;
  7. class PostsController extends BaseController
  8. {
  9. public function lists(ValidatorFactoryInterface $validatorFactory)
  10. {
  11. $inputData = $this->getJsonData();
  12. $rules = [
  13. 'is_hot' => 'nullable|int',
  14. 'page' => 'nullable|int',
  15. 'page_size' => 'nullable|int',
  16. ];
  17. $validator = $validatorFactory->make($inputData, $rules);
  18. if ($validator->fails()) {
  19. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  20. return json_fail($validator->errors()->first());
  21. }
  22. $page = $inputData['page'] ?? 1;
  23. $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
  24. if ($pageSize > 100) {
  25. $pageSize = CommonConstant::PAGE_SIZE;
  26. }
  27. $page = format_page($page);
  28. $pageSize = intval($pageSize);
  29. if ($pageSize <= 0) {
  30. $pageSize = CommonConstant::PAGE_SIZE;
  31. }
  32. $columns = ['uid','title', 'content', 'image', 'video_cover_url', 'views','created_at', 'id'];
  33. $query = PostsModel::query()->where('status', 1);
  34. if (isset($inputData['is_hot']) && $inputData['is_hot'] == 1) {
  35. $query = $query->where('is_hot', 1)->orderByDesc('views');
  36. }
  37. $arrData = $query->orderByDesc('created_at')->paginate($pageSize, $columns, 'page', $page);
  38. $imgInt = 3;
  39. foreach($arrData->items() as &$v) {
  40. $aImage = explode(',',$v->image);
  41. $sImage = '';
  42. if (!empty($v->video_cover_url)) {
  43. $v->video_cover_url = M3u8CacheRepository::getVideoUrl($v['video_cover_url']);
  44. $imgInt = 2;
  45. }
  46. $v->user->avatar = M3u8CacheRepository::getImageUrl($v->user->avatar);
  47. $v['user'] = $v->user;
  48. for ($i = 0; $i < $imgInt; $i++) {
  49. $sImage = M3u8CacheRepository::getImageUrl($aImage[$i]);
  50. }
  51. $v->is_like = $v->likes($this->getUserId())->count();
  52. $v->is_favorites = $v->favorites($this->getUserId())->count();
  53. $v->comment_count = $v->comments()->count();
  54. $v->content = truncateText($v->content, 30);
  55. $v->image = $sImage;
  56. }
  57. return json_success($arrData);
  58. }
  59. }