File

# Основы

Перед использованием необходимо убедиться, что на директорию 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()
];
}
 
//...
Attributes
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()

Рецепт: сохранение изображений в связанной таблице.