Основы
Перед использованием необходимо убедиться, что для директории 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()
Рецепт: сохранение изображений в связанной таблице.