BannerService.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. namespace App\Services\Base;
  3. use App\Contracts\Repositories\Base\BannerRepository;
  4. use App\Repositories\Criteria\Base\BannerCriteria;
  5. use App\Repositories\Eloquent\Base\BannerRepositoryEloquent;
  6. use App\Repositories\Presenters\Base\BannerPresenter;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Support\Facades\Storage;
  9. use Illuminate\Support\Str;
  10. class BannerService
  11. {
  12. /**
  13. * @var BannerRepositoryEloquent
  14. */
  15. private $bannerRepository;
  16. /**
  17. * BannerService constructor.
  18. *
  19. * @param BannerRepositoryEloquent $bannerRepositoryEloquent
  20. */
  21. public function __construct(BannerRepositoryEloquent $bannerRepositoryEloquent)
  22. {
  23. $this->bannerRepository = $bannerRepositoryEloquent;
  24. }
  25. /**
  26. * @param Request $request
  27. *
  28. * @return mixed
  29. * @throws \Prettus\Repository\Exceptions\RepositoryException
  30. */
  31. public function handleList(Request $request)
  32. {
  33. $this->bannerRepository->pushCriteria(new BannerCriteria($request));
  34. $this->bannerRepository->setPresenter(BannerPresenter::class);
  35. return $this->bannerRepository->searchBannersByPage();
  36. }
  37. /**
  38. * @param $id
  39. *
  40. * @return \Illuminate\Database\Eloquent\Model
  41. */
  42. public function handleProfile($id)
  43. {
  44. $this->bannerRepository->setPresenter(BannerPresenter::class);
  45. return $this->bannerRepository->searchBannerBy($id);
  46. }
  47. /**
  48. * @param array $data
  49. *
  50. * @return mixed
  51. * @throws \Prettus\Validator\Exceptions\ValidatorException
  52. */
  53. public function handleStore($data)
  54. {
  55. $banner = $this->bannerRepository->create($data);
  56. return $banner;
  57. }
  58. /**
  59. * @param array $data
  60. *
  61. * @return mixed
  62. * @throws \Prettus\Validator\Exceptions\ValidatorException
  63. */
  64. public function handleUpdate($data)
  65. {
  66. $banner = $this->bannerRepository->update($data, $data['id']);
  67. return $banner;
  68. }
  69. /**
  70. * @param Request $request
  71. *
  72. * @return mixed
  73. * @throws \Prettus\Validator\Exceptions\ValidatorException
  74. */
  75. public function handleDelete($id)
  76. {
  77. return $this->bannerRepository->delete($id);
  78. }
  79. public function handleUpload(Request $request)
  80. {
  81. $disk = 'public';
  82. // 获取上传的文件
  83. $file = $request->file('file');
  84. if (!$file->isFile()) return false;
  85. $type = $request->get('dir', 'default');
  86. $dir = $type;
  87. $dir = str_replace('_', DIRECTORY_SEPARATOR, $dir);
  88. $newName = Str::random(32) . '.' . $file->getClientOriginalExtension();
  89. $path = Storage::disk($disk)->putFileAs($dir, $file, $newName);
  90. $url = Storage::disk($disk)->url($path);
  91. $banner = $this->bannerRepository->create([
  92. 'name' => $newName,
  93. 'original_name' => $file->getClientOriginalName(),
  94. 'path' => $path,
  95. 'url' => $url,
  96. 'disk' => $disk,
  97. 'size' => $file->getSize()
  98. ]);
  99. return $banner;
  100. }
  101. }