This package is deprecated. New and improved version of it here https://github.com/mindz-team/laravel-media
Package to organise media files and it's customization
composer require shortcodes/media
Model must use trait Shortcodes/Media/Mediable and implement HasMedia interface
To register collections add method registerMediaCollections and add collections you need
public function registerMediaCollections()
{
$this->addMediaCollection('avatar')->singleFile();
$this->addMediaCollection('my-other-collection');
}
You can define if collection is singular (add singleFile() method) or multiple (by default)
To be able to upload media files you have to set media routes. You can do that by placing Route::mediaRoutes(); in your routes file.
Then you will be able to use it under POST /media in basic namespace while providing file field
In response you will get:
"data": {
"id": 1,
"name": "example",
"size": 272605,
"url": "http://localhost/storage/60/example.jpg"
}
If your disk is not set to public the URL you receive will be proper for chosen disk.
After uploading media it is placed in MediaLibrary and can be attach to model
To attach file to model you need simply to make request (POST or PATCH) to create or modify model with parameters previously described in registerMediaCollections method like in example
Model::create([...$someArticleAttributes,
'avatar': 1
]);
In avatar single collection you need to provide media id received while uploading media.
While updating model object that already have an avatar and collection is set to
singleFile()avatar will be replaced
To attach multiple media files to model you need simply to make request (POST or PATCH) to create or modify model with parameters previously described in registerMediaCollections method like in example
Model::create([...$someArticleAttributes,
'my-other-collection': [1,2,3,4]
]);
In my-other-collection property collection you need to provide array of media ids received while uploading media.
REMEMBER! While updating model object collection not set to single all skipped media id in array will be deleted.
In this case images are automatically reordered by provided ids.
In case you need to add media file without removing all missing in array you can use add key in collection data request
Model::create([...$someArticleAttributes,
'my-other-collection': [
'add' => [1]
]
]);
In case you need to remove selected media from object you can use delete key in collection data request
Model::create([...$someArticleAttributes,
'my-other-collection': [
'delete' => [3, 4]
]
]);
You may also attach file directly to demanded models providing proper fields in request model_type,model_id,model_collection.
The model_collection field is optional. Remember that model_type must use trait Mediable
You may also add some manipulations to uploaded media.
For now only available manipulation ther is is cropping.
You can perform it by performing PATCH request
PATCH /media/{mediaId}
{
"manipulations": [
{
"type":"crop",
"x":0,
"y":0,
"width":10,
"height": 500
}
]
}
where x and y are coordinates to starting point and width and height are dimentions of cropped rectangle.
More about library can be found at official documentation page https://github.com/spatie/laravel-medialibrary