Основы
Перед использованием необходимо убедиться, что для директории storage установлена символическая ссылка.
php artisan storage:link
Поле File используется для загрузки файлов и включает все базовые методы.
use MoonShine\Fields\File; //... public function fields(): array{ return [ File::make('File') ];} //...
Чтобы корректно генерировать URL файла, необходимо определить переменную окружения APP_URL
таким образом, чтобы она соответствовала URL вашего приложения.
Диск
Метод disk()
позволяет изменить диск файловой системы.
disk(string $disk)
use MoonShine\Fields\File; //... public function fields(): array{ return [ File::make('File') ->disk('public') ];} //...
По умолчанию используется диск 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. Также необходимо добавить приведение типа для 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()
позволит удалить только запись в базе данных, но не удалять сам файл.
disableDeleteFiles()
use MoonShine\Fields\File; //... public function fields(): array{ return [ File::make('File') ->removable() ->disableDeleteFiles() ];} //...
enableDeleteDir()
Метод 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()
позволяет получить значения, которые остались в форме, с учетом удаления.
getRemainingValues()
removeExcludedFiles()
Метод removeExcludedFiles()
позволяет физически удалить файлы в процессе.
removeExcludedFiles()
Рецепт: сохранение изображений в связанной таблице.