Files and Media ​
Files and Media (Images) follow the same triple pattern. Use Files for documents (PDF, DOC); use Images (Media) for images with cropping and transformations.
Files ​
Entity: HasFiles ​
use Unusualify\Modularous\Entities\Traits\HasFiles;
class MyModel extends Model
{
use HasFiles;
}Relationships: morphToMany(File::class, 'fileable') with pivot role, locale.
Methods:
file($role, $locale = null)— URL of first file for role/localefilesList($role, $locale = null)— array of URLsfileObject($role, $locale = null)— File model
Repository: FilesTrait ​
Add to your repository:
use Unusualify\Modularous\Repositories\Traits\FilesTrait;
class MyRepository extends Repository
{
use FilesTrait;
}Columns: Inputs with type containing file are registered as file columns (e.g. documents, attachments).
Hydrate: FileHydrate ​
Route config:
[
'type' => 'file',
'name' => 'documents',
'translated' => false,
]Output: type → input-file, rendered by VInputFile.
Media (Images) ​
Entity: HasImages ​
use Unusualify\Modularous\Entities\Traits\HasImages;
class MyModel extends Model
{
use HasImages;
}Relationships: morphToMany(Media::class, 'mediable') with pivot role, locale. Supports crop params (crop_x, crop_y, crop_w, crop_h).
Methods:
medias()— relationshipfindMedia($role, $locale = null)— first Media for role/localeimage($role, $locale = null)— URLimagesList($role, $locale = null)— array of URLs
Repository: ImagesTrait ​
Add to your repository. Handles hydrateImagesTrait, afterSaveImagesTrait, getFormFieldsImagesTrait.
Hydrate: ImageHydrate ​
Route config:
[
'type' => 'image',
'name' => 'images',
'translated' => false,
]Output: type → input-image, rendered by VInputImage.
Filepond (Direct Upload) ​
Filepond is one-to-many direct binding (no file library). Use when you need simple file upload without Media/File library.
Entity: HasFileponds ​
use Unusualify\Modularous\Entities\Traits\HasFileponds;
class MyModel extends Model
{
use HasFileponds;
}Relationships: morphMany(Filepond::class, 'filepondable').
Repository: FilepondsTrait ​
Hydrate: FilepondHydrate ​
Route config:
[
'type' => 'filepond',
'name' => 'attachments',
'max' => 5,
'acceptedExtensions' => ['pdf', 'doc', 'docx'],
]See File Storage with Filepond for full setup.