Media
Adalah module yang bertugas menangani service file upload.
Instalasi
Jalankan perintah di bawah di folder aplikasi:
mim app install lib-media
Konfigurasi
Tambahkan konfigurasi seperti di bawah pada aplikasi/module untuk menentukan handler yang akan digunakan untuk menangani file. Masing-masing handler akan dipanggil sampai menemukan handler yang tidak mengembalikan nilai null.
return [
'libMedia' => [
'handlers' => [
'name' => 'Class'
]
]
];
Custom Handler
Untuk membuatkan file handler, pastikan class tersebut mengimplementasikan
interface LibMedia\Iface\Handler
. Dan tambahkan method seperti di bawah:
static function getLocalPath(string $path): ?string
Download file dari storage untuk di proses di lokal ketika lazy sizer bernilai false. Fungsi ini mengharapkan pengembalian nilai path ke lokal file dimana file didownload.
static function getPath(string $url): ?string
Fungsi untuk mengidentifikasi kalau file tersebut dikenali dan bisa diproses
oleh handler ini. Fungsi ini harus mengembalikan path file sesuai dengan yang
ada pada tabel media
property path
jika file dikenali, atau null
jika
tidak dikenali.
static function isLazySizer(string $path, $width, $height, $compress): ?string
Adalah fungsi untuk mengecek jika proses resize/compress akan dilakukan dengan
metode lazy atau tidak, jika tidak, maka fungsi ini harus mengembalikan nilai
null
. Jika ia, maka fungsi ini diharapkan mengembalika nilai lazy
resize/compress URL yang akan digunakan oleh frontend.
static function upload(string $local, string $name): ?string
Upload file kembali ke remote ketika selesai diproses di lokal. Fungsi ini diharapkan mengembalikan final URL ke file tersebut.
get(object $opt): ?object
Fungsi yang akan dipanggil untuk menggenerasi file compresi, dan resizes. Method ini akan di panggil dengan parameter seperti di bawah:
$params = (object)[
'file' => 'aa/bb/cc/dd/filename.jpg',
'size' => [ // optional
'width' => 100,
'height' => 150
]
];
Properti size
adalah optional, dan mungkin tidak ada.
Fungsi tersebut diharapkan mengembalikan data seperti berikut:
return (object)[
'none' => 'http://target.aa/bb/dd/filename_100x150.jpg',
'webp' => 'http://target.aa/bb/dd/filename_100x150.jpg.webp',
'size' => [
'width' => 100,
'height' => 150
]
];
Ketika file diminta, system mengharapkan handler membuatkan file kompresi brotli, dan gzip untuk digunakan front-end.
Formatter
Jika module lib-formatter
terpasang, maka module ini menambah 2 tipe format
sebagai berikut:
media
Mengubah nilai suatu properti menjadi object media untuk mempermudah mendapatkan nilai-nilai media:
'field' => [
'type' => 'media'
]
Objek yang dihasilkan bisa digunakan untuk mendapatkan suatu ukuran gambar atau kompresi webp dengan perintah seperti di bawah:
$field->_100x50;
Aksi diatas akan mengembalikan url file gambar untuk ukuran gambar lebar 100 dan tinggi 50. Untuk mendapatkan file webp, gunakan perintah seperti di bawah:
$field->webp;
$field->_100x50->webp;
media-list
Mengubah nilai menjadi array media. Format tipe ini mengharapkan nilai suatu properti adalah string dengan suatu separator.
'field' => [
'type' => 'media-list',
'separator' => ',' // PHP_EOL, |, json
]