File
Для прикрепления файла к ресурсу используется библиотека spatie/laravel-medialibrary.
Регистрация медиа-коллекции в модели.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
class Post extends Model implements HasMedia
{
use HasFactory;
use InteractsWithMedia;
public function registerMediaCollections(): void
{
// Коллекция для файла
$this->addMediaCollection('file')->singleFile();
}
}
В livewire компоненте нужно подключить трейт HasMedia и добавить новое публичное свойство, которое совпадает с названием медиа-коллекции в модели.
<?php
namespace App\Http\Livewire\Admin\Posts;
use App\Models\Post;
use WebVovan\RockCms\Http\Livewire\ResourceComponent;
use WebVovan\RockCms\Rules\FileMedia;
use WebVovan\RockCms\Traits\Livewire\HasMedia;
class PostItem extends ResourceComponent
{
use HasMedia;
...
// Поле для изображения
public $file;
// Правила валидации полей
public function rules()
{
return [
'file' => new FileMedia(),
];
}
/**
* Вызывается один раз при инициализации компонента
*/
public function init()
{
...
// Инициализация свойства с файлом
$this->file = $this->resource->getFirstMedia('file');
}
/**
* Вызывается при сохранении ресурса
*/
public function save()
{
...
// Сохранение файла
$this->saveSingleMedia($this->resource, $this->file, 'file');
}
...
}
Для загрузки доступны форматы, перечисленные в config/livewire.php
'temporary_file_upload' => [
'disk' => null, // Example: 'local', 's3' Default: 'default'
'rules' => null, // Example: ['file', 'mimes:png,jpg'] Default: ['required', 'file', 'max:12288'] (12MB)
'directory' => null, // Example: 'tmp' Default 'livewire-tmp'
'middleware' => null, // Example: 'throttle:5,1' Default: 'throttle:60,1'
'preview_mimes' => [ // Supported file types for temporary pre-signed file URLs.
'png', 'gif', 'bmp', 'svg', 'wav', 'mp4', 'pdf',
'mov', 'avi', 'wmv', 'mp3', 'm4a',
'jpg', 'jpeg', 'mpga', 'webp', 'wma',
],
'max_upload_time' => 5, // Max duration (in minutes) before an upload gets invalidated.
],
Вывод поля:
<x-rock-cms::fields.single-file :model="$file" field="file" title="Файл"/>
Опции:
readonly - только для чтения

Last updated