File

Вы просматриваете документацию старой версии MoonShine. Рассмотрите возможность обновления вашего проекта до MoonShine 2.x.

Прежде чем использовать файловое поле необходимо убедиться, что на директорию storage установлена символическая ссылка

php artisan storage:link
use MoonShine\Fields\File;
 
//...
public function fields(): array
{
return [
//...
 
File::make('File', 'file')
->dir('/') // Директория где будут хранится файлы в storage (по умолчанию /)
->disk('public') // Filesystems disk
->allowedExtensions(['jpg', 'gif', 'png']) // Допустимые расширения
 
//...
];
}
//...

Для правильной генерации URL-адреса файла вы должны определить переменную окружения APP_URL таким образом, чтобы она соответствовала URL-адресу вашего приложения.

При использовании драйвера local возвращаемое значение url не представляет собой URL-адрес. По этой причине мы рекомендуем всегда хранить ваши файлы с именами, которые будут создавать действительные URL-адреса.

# Мультизагрузка

Для загрузки нескольких файлов используется метод multiple()

use MoonShine\Fields\File;
 
//...
public function fields(): array
{
return [
//...
File::make('File', 'file')
->multiple(),
//...
];
}
//...

Поле в базе необходимо типа text или json.
Также необходимо добавить cast для eloquent модели - json, или array, или collection.

# Удаление файлов

Для возможности удаления файлов необходимо воспользоваться методом removable()

use MoonShine\Fields\File;
 
//...
public function fields(): array
{
return [
//...
File::make('File', 'file')
->removable(),
//...
];
}
//...

Метод disableDeleteFiles() позволят удалить только запись в базе данных, но не удалять сам файл

use MoonShine\Fields\File;
 
//...
public function fields(): array
{
return [
//...
File::make('File', 'file')
->removable()
->disableDeleteFiles(),
//...
];
}
//...

Метод enableDeleteDir() удаляет директорию указанную в методе dir(), если она пуста

use MoonShine\Fields\File;
 
//...
public function fields(): array
{
return [
//...
File::make('File', 'file')
->dir('/images/')
->removable()
->enableDeleteDir(),
//...
];
}
//...

# Запрет на скачивание

Если необходимо исключить возможность скачивания файла воспользуйтесь методом disableDownload()

use MoonShine\Fields\File;
 
//...
public function fields(): array
{
return [
//...
File::make('File', 'file')
->disableDownload(),
//...
];
}
//...

# Оригинальное имя файла

Если необходимо сохранять оригинальное имя файла от клиента воспользуйтесь методом keepOriginalFileName()

use MoonShine\Fields\File;
 
//...
public function fields(): array
{
return [
//...
File::make('File', 'file')
->keepOriginalFileName(),
//...
];
}
//...

# Произвольное имя файла

Если необходимо сохранять произвольное имя файла воспользуйтесь методом customName('file_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) => Str::random(10) . '.' . $file->extension()),
//...
];
}
//...