iamx/laravel-media

This a simple way to use media files in laravel

V1.0.1 2021-12-29 23:35 UTC

This package is auto-updated.

Last update: 2024-04-29 04:47:40 UTC


README

Installation

$ composer require iamx/laravel-media

Publish migration file

$ php artisan vendor:publish --provider="iamx\Media\Providers\MediaServiceProvider" --tag="migrations"

Usage

Import the media trait in your model

Note: Only available for images for now

<?php

namespace App;

use iamx\Media\Traits\MediaTrait;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    use MediaTrait;
}

Quick example:

public function store(Request $request)
{
    $this->validate($request, [
        'avatar' => 'required|image|mimes:png,jpg,jpeg'
    ]);

    $user = User::first();

    $user->addMedia($request->file('avatar'))->store();
}
Upload options:
public function store(Request $request)
{
    $this->validate($request, [
        'avatar' => 'required|image|mimes:png,jpg,jpeg'
    ]);

    $user = User::first();

    $user->addMedia($request->file('avatar'))
            ->withThumbnail(200, 200) // Create a thumbnail of file, accepts with and height values
            ->withName('avatar') // Set custom media name
            ->toDisk('avatars') // Set storage disk
            ->toCollection('gallery') // Set collection name
            ->store();
}
Getting media of model:
$user = User::first();

// Verify is model has media
if($user->hasMedia()) {
    return response()->json($user->getMedia());
}

// Access to media
$user->getMedia();
// Or
$user->media_library;
It will return a response like this:
[
    {
        "id": 4,
        "name": "d6871be4-2690-4965-a98a-df835973fc4b.png",
        "type": "png",
        "collection": "gallery",
        "media": "http://laravel-packages.test/storage/1/d6871be4-2690-4965-a98a-df835973fc4b.png",
        "thumbnail": "http://laravel-packages.test/storage/1/thumbnail_d6871be4-2690-4965-a98a-df835973fc4b.png"
    },
    ...
]
Update a item of media
public function update(Request $request, $id)
{
    $this->validate($request, [
        'avatar' => 'required|image|mimes:png,jpg,jpeg'
    ]);

    $user = User::find($id);
    $mediaId = 3;
    $user->updateMedia($request->file('avatar'), $mediaId);
}
Optional parameters of updateMedia function:
public function update(Request $request, $id)
{
    $this->validate($request, [
        'avatar' => 'required|image|mimes:png,jpg,jpeg'
    ]);

    $user = User::find($id);
    $mediaId = 3;
    $mediaName = 'avatar';
    $createThumbnail = true;
    $thumbnailWidth = 200;
    $thumbnailHeight = 200;

    $user->updateMedia($request->file('avatar'), $mediaId, $mediaName, $createThumbnail, $thumbnailWidth, $thumbnailHeight);
    
}
Delete media
public function destroy($id)
{
    $user = User::find($id);

    // Delete all related media
    $user->deleteMedia();

    // Delete a single media by id
    $mediaId = 3;
    $user->deleteMedia($mediaId);

    // Delete a entire collection
    $collectionName = "gallery";
    $user->deleteCollection($collectionName);
}