# Основы
Перед использованием необходимо убедиться, что на директорию storage
установлена символическая ссылка.
php artisan storage:link
Поле File используется для загрузки файлов и включает в себя все базовые методы.
use MoonShine\Fields\File; //... public function fields(): array{ return [ File::make('File') ];} //...
Для правильной генерации URL-адреса файла вы должны определить переменную окружения APP_URL
таким образом,
чтобы она соответствовала URL-адресу вашего приложения.
# Disk
Метод disk()
позволяет изменить filesystems disk.
disk(string $disk)
use MoonShine\Fields\File; //... public function fields(): array{ return [ File::make('File') ->disk('public') ];} //...
По умолчанию используется disk public
.
Вы можете изменить его в файле
конфигурации
.
При использовании драйвера local
возвращаемое значение url
не представляет собой URL-адрес.
По этой причине мы рекомендуем всегда хранить ваши файлы с именами, которые будут создавать действительные URL-адреса.
# Директория
По умолчанию файлы будут сохраняться в корневой директории диска.
Метод dir()
позволяет указать директорию для сохранения файлов относительно корневой директории.
dir(string $dir)
use MoonShine\Fields\File; //... public function fields(): array{ return [ File::make('File') ->dir('docs') ];} //...
# Допустимые расширения
Используя метод allowedExtensions()
можно указать какие файлы будут доступны для загрузки.
allowedExtensions(array $allowedExtensions)
use MoonShine\Fields\File; //... public function fields(): array{ return [ File::make('File') ->allowedExtensions(['pdf', 'doc', 'txt']) ];} //...
# Мультизагрузка
Для загрузки нескольких файлов используется метод multiple()
.
multiple(Closure|bool|null $condition = null)
use MoonShine\Fields\File; //... public function fields(): array{ return [ //... File::make('File') ->multiple(), //... ];} //...
Поле в базе данных должно иметь тип text или json.
Также необходимо добавить cast для eloquent модели - json, или array, или collection.
# Удаление файлов
Для возможности удаления файлов необходимо воспользоваться методом removable()
.
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( attributes: ['@click.prevent' => '$event.target.closest(`.x-removeable`).remove()'] ) ];} //...
Метод disableDeleteFiles()
позволят удалить только запись в базе данных,
но не удалять сам файл.
disableDeleteFiles()
use MoonShine\Fields\File; //... public function fields(): array{ return [ File::make('File') ->removable() ->disableDeleteFiles() ];} //...
Метод enableDeleteDir()
удаляет директорию указанную в методе dir()
, если она пуста.
enableDeleteDir()
use MoonShine\Fields\File; //... public function fields(): array{ return [ File::make('File') ->dir('docs') ->removable() ->enableDeleteDir() ];} //...
# Запрет на скачивание
Метод disableDownload()
позволяет исключить возможность скачивания файла.
disableDownload(Closure|bool|null $condition = null)
use MoonShine\Fields\File; //... public function fields(): array{ return [ File::make('File', 'file') ->disableDownload() ];} //...
# Оригинальное имя файла
При загрузке по умолчанию генерируется имя файла.
Метод keepOriginalFileName()
позволяет сохранить файл с оригинальным именем.
keepOriginalFileName()
use MoonShine\Fields\File; //... public function fields(): array{ return [ File::make('File') ->keepOriginalFileName() ];} //...
# Произвольное имя файла
Метод customName()
позволяет сохранить файл с произвольным именем.
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()) ];} //...
# Названия элементов
Метод names()
позволяет изменить отображаемое название, без изменения имени файла.
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) ];} //...
# Атрибуты элементов
Метод itemAttributes()
позволяет добавить дополнительные атрибуты для элементов.
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;' ]) ];} //...
# Вспомогательные методы
Метод getRemainingValues()
позволяет получить значения
которые остались в форме с учетом удаления.
getRemainingValues()
Метод removeExcludedFiles()
позволяет физически удалить файлы в процессе.
removeExcludedFiles()
Рецепт: сохранение изображений в связанной таблице.