/
marklis
/
transport
Обзор
Документация
Войти
/
marklis
/
transport
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
app/Http/Controllers/MediaController.php
101 строка
4 KB
Мамонов Алексей Анатольевич
Добавление медиа-объектов (видео, ссылок)
21 ноя 2024, 17:31
21 ноя 2024, 17:31
f4316a0
Код
Авторство
О чём код?
<?php namespace App\Http\Controllers; use App\Contracts\Services\{MediaDirectoryServiceContract, MediaItemServiceContract}; use Illuminate\Http\{RedirectResponse, Request}; use Inertia\{Inertia, Response as InertiaResponse}; class MediaController extends BaseController { public MediaDirectoryServiceContract $mediaDirectoryService; public MediaItemServiceContract $mediaItemService; public function __construct(MediaDirectoryServiceContract $mediaDirectoryService, MediaItemServiceContract $mediaItemService) { $this->mediaDirectoryService = $mediaDirectoryService; $this->mediaItemService = $mediaItemService; } public function index(): InertiaResponse { return Inertia::render('Media/ShowDirectory', [ 'mediaDirectories' => $this->mediaDirectoryService->get([], ['parent_id' => null]), 'mediaItems' => $this->mediaItemService->get([], ['media_directory_id' => null]), 'title' => 'Медиа', 'rights' => $this->getRights(), 'routes' => [ 'media' => route('media.index'), 'media.create.video' => route('media.create', ['type' => 'video']), 'media.create.link' => route('media.create', ['type' => 'link']) ] ]); } public function show(string $id): InertiaResponse|RedirectResponse { $mediaItem = $this->mediaItemService->find([], ['id' => $id]); if ($mediaItem) { switch ($mediaItem->type) { case 'video': return Inertia::render('Media/ShowVideo', [ 'id' => $id, 'title' => $mediaItem->title, 'link' => $mediaItem->link, 'format' => $mediaItem->format, 'rights' => $this->getRights() ]); break; case 'link': return redirect($mediaItem->link); break; } } else { $mediaDirectory = $this->mediaDirectoryService->find(['title'], ['id' => $id]); if ($mediaDirectory) { return Inertia::render('Media/ShowDirectory', [ 'mediaDirectories' => $this->mediaDirectoryService->get([], ['parent_id' => $id]), 'mediaItems' => $this->mediaItemService->get([], ['media_directory_id' => $id]), 'title' => $mediaDirectory->title, 'rights' => $this->getRights(), 'routes' => [ 'media' => route('media.index'), 'media.create.video' => route('media.create', ['type' => 'video']), 'media.create.link' => route('media.create', ['type' => 'link']) ] ]); } else { return Inertia::render('Error'); } } } public function create(Request $request) { switch ($request->input('type')) { case 'video': return Inertia::render('Media/CreateVideo', [ 'mediaDirectories' => $this->mediaDirectoryService->get(['id', 'title']), 'rights' => $this->getRights(), ]); case 'link': return Inertia::render('Media/CreateLink', [ 'mediaDirectories' => $this->mediaDirectoryService->get(['id', 'title']), 'rights' => $this->getRights(), ]); } } public function store(Request $request) { $result = $this->mediaItemService->creating($request->collect(), $request->file('file')[0] ?? null); if ($result['status'] == 'success') { return redirect(route('media.index')); } else { return back()->with([ 'message' => 'Ошибка', ]); } } }