TrixAttachmentController.php 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. <?php
  2. namespace App\library\trix;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Http\Response;
  5. use Illuminate\Routing\Controller;
  6. use Illuminate\Support\Facades\Storage;
  7. use Illuminate\Support\Facades\Validator;
  8. use Ramsey\Uuid\Uuid;
  9. use Te7aHoudini\LaravelTrix\Models\TrixAttachment;
  10. class TrixAttachmentController extends Controller
  11. {
  12. public function store(Request $request)
  13. {
  14. $validator = Validator::make($request->all(), [
  15. 'file' => 'required|file',
  16. 'modelClass' => 'required',
  17. 'field' => 'required',
  18. ]);
  19. if ($validator->fails()) {
  20. return response()->json(['errors'=>$validator->errors()], Response::HTTP_UNPROCESSABLE_ENTITY);
  21. }
  22. $fileName = date('Ymd').Uuid::uuid1().".".$request->file->getClientOriginalExtension();
  23. $attachment = $request->file->storeAs('/',$fileName, $request->disk ?? config('laravel-trix.storage_disk'));
  24. $url = Storage::disk($request->disk ?? config('laravel-trix.storage_disk'))->url($attachment);
  25. TrixAttachment::create([
  26. 'field' => $request->field,
  27. 'attachable_type' => $request->modelClass,
  28. 'attachment' => $attachment,
  29. 'disk' => $request->disk ?? config('laravel-trix.storage_disk'),
  30. ]);
  31. return response()->json(['url' => $url], Response::HTTP_CREATED);
  32. }
  33. }