Основы
Перед использованием необходимо убедиться, что для директории storage установлена символическая ссылка.
php artisan storage:link
Поле File используется для загрузки файлов и включает все базовые методы.
use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File')];}//...use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File')];}//...

Чтобы корректно генерировать URL файла, необходимо определить переменную окружения APP_URL таким образом, чтобы она соответствовала URL вашего приложения.
Диск
Метод disk() позволяет изменить диск файловой системы.
disk(string $disk)disk(string $disk)
use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File')->disk('public')];}//...use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File')->disk('public')];}//...
По умолчанию используется диск public. Вы можете изменить его в файле конфигурации.
При использовании драйвера local возвращаемое значение url не является URL. По этой причине мы рекомендуем всегда хранить ваши файлы с именами, которые будут создавать допустимые URL.
Директория
По умолчанию файлы будут сохраняться в корневой директории диска.
Метод dir() позволяет указать директорию для сохранения файлов относительно корневой директории.
dir(string $dir)dir(string $dir)
use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File')->dir('docs')];}//...use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File')->dir('docs')];}//...
Допустимые расширения
Используя метод allowedExtensions(), вы можете указать, какие файлы будут доступны для загрузки.
allowedExtensions(array $allowedExtensions)allowedExtensions(array $allowedExtensions)
use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File')->allowedExtensions(['pdf', 'doc', 'txt'])];}//...use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File')->allowedExtensions(['pdf', 'doc', 'txt'])];}//...
Мультизагрузка
Для загрузки нескольких файлов используйте метод multiple().
multiple(Closure|bool|null $condition = null)multiple(Closure|bool|null $condition = null)
use MoonShine\Fields\File;//...public function fields(): array{return [//...File::make('File')->multiple(),//...];}//...use MoonShine\Fields\File;//...public function fields(): array{return [//...File::make('File')->multiple(),//...];}//...
Поле в базе данных должно быть типа text или json. Также необходимо добавить приведение типа для eloquent модели - json, или array, или collection.
Удаление файлов
Чтобы иметь возможность удалять файлы, необходимо использовать метод removable().
removable(Closure|bool|null $condition = null,array $attributes = [])removable(Closure|bool|null $condition = null,array $attributes = [])
-$condition - условие для выполнения метода
-$attributes - дополнительные атрибуты кнопки
use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File')->removable()];}//...use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File')->removable()];}//...
Атрибуты
use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File')->removable(attributes: ['@click.prevent' => '$event.target.closest(`.x-removeable`).remove()'])];}//...use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File')->removable(attributes: ['@click.prevent' => '$event.target.closest(`.x-removeable`).remove()'])];}//...
disableDeleteFiles()
Метод disableDeleteFiles() позволит удалить только запись в базе данных, но не удалять сам файл.
disableDeleteFiles()disableDeleteFiles()
use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File')->removable()->disableDeleteFiles()];}//...use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File')->removable()->disableDeleteFiles()];}//...
enableDeleteDir()
Метод enableDeleteDir() удаляет директорию, указанную в методе dir(), если она пуста.
enableDeleteDir()enableDeleteDir()
use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File')->dir('docs')->removable()->enableDeleteDir()];}//...use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File')->dir('docs')->removable()->enableDeleteDir()];}//...
Запрет на скачивание
Метод disableDownload() позволяет исключить возможность скачивания файла.
disableDownload(Closure|bool|null $condition = null)disableDownload(Closure|bool|null $condition = null)
use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File', 'file')->disableDownload()];}//...use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File', 'file')->disableDownload()];}//...
Оригинальное имя файла
По умолчанию при загрузке генерируется имя файла. Метод keepOriginalFileName() позволяет сохранить файл с оригинальным именем.
keepOriginalFileName()keepOriginalFileName()
use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File')->keepOriginalFileName()];}//...use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File')->keepOriginalFileName()];}//...
Пользовательское имя файла
Метод customName() позволяет сохранить файл с пользовательским именем.
customName(Closure $name)customName(Closure $name)
use MoonShine\Fields\File;use Illuminate\Http\UploadedFile;use Illuminate\Support\Str;//...public function fields(): array{return [File::make('File', 'file')->customName(fn(UploadedFile $file, Field $field) => Str::random(10) . '.' . $file->extension())];}//...use MoonShine\Fields\File;use Illuminate\Http\UploadedFile;use Illuminate\Support\Str;//...public function fields(): array{return [File::make('File', 'file')->customName(fn(UploadedFile $file, Field $field) => Str::random(10) . '.' . $file->extension())];}//...
Имена элементов
Метод names() позволяет изменить отображаемое имя без изменения имени файла.
names(Closure $closure)names(Closure $closure)
$closure- замыкание принимает имя файла и индекс файла.
use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File', 'file')->names(fn(string $filename, int $index = 0) => 'File ' . $index + 1)];}//...use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File', 'file')->names(fn(string $filename, int $index = 0) => 'File ' . $index + 1)];}//...
Атрибуты элемента
Метод itemAttributes() позволяет добавить дополнительные атрибуты к элементам.
itemAttributes(Closure $closure)itemAttributes(Closure $closure)
$closure- замыкание принимает имя файла и индекс файла.
use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File', 'file')->itemAttributes(fn(string $filename, int $index = 0) => ['style' => 'width: 250px; height: 250px;'])];}//...use MoonShine\Fields\File;//...public function fields(): array{return [File::make('File', 'file')->itemAttributes(fn(string $filename, int $index = 0) => ['style' => 'width: 250px; height: 250px;'])];}//...
Вспомогательные методы
getRemainingValues()
Метод getRemainingValues() позволяет получить значения, которые остались в форме, с учетом удаления.
getRemainingValues()getRemainingValues()
removeExcludedFiles()
Метод removeExcludedFiles() позволяет физически удалить файлы в процессе.
removeExcludedFiles()removeExcludedFiles()
Рецепт: сохранение изображений в связанной таблице.