Поля

File

Основы

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

File 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()

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