Поля

File

Основы

Содержит все Базовые методы.

Перед использованием необходимо убедиться, что для директории storage установлена символическая ссылка.
php artisan storage:link

Поле File используется для загрузки файлов.

use MoonShine\UI\Fields\File;
 
File::make('File')
<x-moonshine::form.wrapper label="File">
<x-moonshine::form.file
name="file"
/>
</x-moonshine::form.wrapper>

File File

Чтобы правильно сгенерировать URL файла, вы должны определить переменную окружения APP_URL таким образом, чтобы она соответствовала URL вашего приложения.

Disk

Метод disk() позволяет изменить filesystems disk.

disk(string $disk)
File::make('File')
->disk('public')

По умолчанию используется disk public. Вы можете изменить его в файле конфигурации.

При использовании драйвера local возвращаемое значение url не является URL. По этой причине мы рекомендуем всегда хранить ваши файлы с именами, которые будут создавать действительные URL.

Директория

По умолчанию файлы будут сохраняться в корневом каталоге диска. Метод dir() позволяет указать директорию для сохранения файлов относительно корневой директории.

dir(string $dir)
File::make('File')
->dir('docs')

Допустимые расширения

Используя метод allowedExtensions(), вы можете указать, какие файлы будут доступны для загрузки.

allowedExtensions(array $allowedExtensions)
File::make('File')
->allowedExtensions(['pdf', 'doc', 'txt'])

Множественная загрузка

Для загрузки нескольких файлов используйте метод multiple().

multiple(Closure|bool|null $condition = null)
File::make('File')
->multiple()

В базе данных поле должно быть типа "text" или "json". Также необходимо указать cast — "array", "json" или "collection".

Удаление файлов

Чтобы иметь возможность удалять файлы, необходимо использовать метод removable().

removable(
Closure|bool|null $condition = null,
array $attributes = []
)
  • $condition - условие выполнения метода,
  • $attributes - дополнительные атрибуты кнопки.
File::make('File')
->removable()

Кнопка удаления будет доступна в режиме редактирования поля.

Удаляя ресурс, файлы так же удаляются.

При массовом удалении элементов ресурса, удаление файлов не производится. Удаление файлов при массовом удалении элементов необходимо реализовать самостоятельно.

Атрибуты

File::make('File')
->removable(
attributes: ['@click.prevent' => '$event.target.closest(`.x-removeable`).remove()']
)

disableDeleteFiles()

Метод disableDeleteFiles() позволит удалить только запись в базе данных, но не удалять сам файл.

disableDeleteFiles()
File::make('File')
->removable()
->disableDeleteFiles()

enableDeleteDir()

Метод enableDeleteDir() удаляет директорию, указанную в методе dir(), если она пуста.

enableDeleteDir()
File::make('File')
->dir('docs')
->removable()
->enableDeleteDir()

Запрет на скачивание

Метод disableDownload() позволяет исключить возможность скачивания файла.

disableDownload(Closure|bool|null $condition = null)
File::make('File', 'file')
->disableDownload()

Оригинальное имя файла

При загрузке по умолчанию генерируется имя файла. Метод keepOriginalFileName() позволяет сохранить файл с оригинальным именем.

keepOriginalFileName()
File::make('File')
->keepOriginalFileName()

Пользовательское имя файла

Метод customName() позволяет сохранить файл с пользовательским именем.

customName(Closure $name)
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Str;
 
File::make('File', 'file')
->customName(fn(UploadedFile $file, Field $field) => Str::random(10) . '.' . $file->extension())

Имена элементов

Метод names() позволяет изменить отображаемое имя без изменения имени файла.

names(Closure $closure)
  • $closure - замыкание принимает имя файла и индекс файла.
File::make('File', 'file')
->names(fn(string $filename, int $index = 0) => 'File ' . $index + 1)

Сортировка перетаскиванием

Вы можете указать URL, который обработает позиции и сохранит новые.

File::make('Files')
->reorderable(fn(File $ctx) => "/reorder/" . $ctx->getData()->getKey())
->multiple(),

Атрибуты элементов

Метод itemAttributes() позволяет добавить дополнительные атрибуты к элементам.

itemAttributes(Closure $closure)
  • $closure - замыкание принимает имя файла и индекс файла.
File::make('File', 'file')
->itemAttributes(fn(string $filename, int $index = 0) => [
'style' => 'width: 250px; height: 250px;'
])

Атрибуты dropzone

File::make('Files')
->dropzoneAttributes(fn(File $ctx) => ['class' => 'custom-class'])
->multiple(),

Вспомогательные методы

getRemainingValues()

Метод getRemainingValues() позволяет получить значения, которые остались в форме, с учетом удаления.

getRemainingValues()

removeExcludedFiles()

Метод removeExcludedFiles() позволяет физически удалить файлы в процессе.

removeExcludedFiles()