Picture.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Database\Eloquent\Model;
  4. use Illuminate\Http\UploadedFile;
  5. use Illuminate\Support\Facades\Input;
  6. use Illuminate\Support\Facades\Storage;
  7. use Illuminate\Support\Facades\Validator;
  8. class Picture extends Model
  9. {
  10. //
  11. protected $fillable = ['path', 'cache', 'item_id', 'real_name', 'mime_type', 'size', 'updated_at'];
  12. protected $guarded = ['id'];
  13. public $timestamps = true; // для seeder дожна быть public
  14. public static function fromRequest(Item $item)
  15. {
  16. $pictures = [];
  17. $files = Input::file()['files'] ?? [];
  18. foreach ($files as $file) {
  19. $pictures[] = self::store($item, $file);
  20. }
  21. return $pictures;
  22. }
  23. public static function store(Item $item, UploadedFile $file): Picture
  24. {
  25. if (self::validatePicture($file)) {
  26. $prefix = 'items/item_' . $item->id;
  27. $picture = new self([
  28. 'path' => Storage::disk('images')->putFile($prefix, $file),
  29. 'item_id' => $item->id,
  30. 'real_name' => $file->getClientOriginalName(),
  31. 'mime_type' => $file->getClientOriginalExtension(),
  32. 'size' => $file->getSize()
  33. ]);
  34. $picture->save();
  35. return $picture;
  36. }
  37. return redirect()->back()->with('message', 'Файл должен быть картинкой до 5 Mb');
  38. }
  39. public function item()
  40. {
  41. return $this->belongsTo(Item::class);
  42. }
  43. public static function validatePicture(UploadedFile $file): bool
  44. {
  45. $validFile['image'] = $file;
  46. $rules = ['image' => 'file|image|max:5000'];
  47. return Validator::make($validFile, $rules)->passes();
  48. }
  49. }