Auto upload handling with Eloquent models trait
, (*1)
This package provides a trait that will automatic handlind upload when saving/updating/deleting any Eloquent model with upload form request., (*2)
Requires
- php: >=7.1
- illuminate/database: ^5.7|^6.0|^7.0|^8.0|^9.0
- illuminate/support: ^5.7|^6.0|^7.0|^8.0|^9.0
- illuminate/http: ^5.7|^6.0|^7.0|^8.0|^9.0
- padosoft/io: "^1.9",
- padosoft/laravel-request: "^1.0|^2.0",
- padosoft/support: "^1.6|^2.1|^3.0.4"
-
Installation
You can install the package via composer:
``` bash
$ composer require padosoft/laravel-uploadable, (*3)
## Usage
Your Eloquent models should use the `Padosoft\Uploadable\Uploadable` trait and the `Padosoft\Uploadable\UploadOptions` class.
You can define `getUploadOptions()` method in your model.
Here's an example of how to implement the trait with implementation of getUploadOptions():
```php
<?php
namespace App;
use Padosoft\Uploadable\Uploadable;
use Padosoft\Uploadable\UploadOptions;
use Illuminate\Database\Eloquent\Model;
class YourEloquentModel extends Model
{
use Uploadable;
/**
* Retrive a specifice UploadOptions for this model, or return default UploadOptions
* @return UploadOptions
*/
public function getUploadOptions() : UploadOptions
{
if($this->uploadOptions){
return $this->uploadOptions;
}
$this->uploadOptions = UploadOptions::create()->getUploadOptionsDefault()
->setUploadBasePath(public_path('upload/' . $this->getTable()))
->setUploadsAttributes(['image', 'image_mobile']);
return $this->uploadOptions;
}
}
You can specified uploads attributes with:, (*4)
public function getUploadOptions() : UploadOptions
{
return UploadOptions::create()
->setUploadsAttributes(['image', 'image_mobile']);
}
You can set the base upload path for your model:, (*5)
public function getUploadOptions() : UploadOptions
{
return UploadOptions::create()
->setUploadBasePath(public_path('upload/news'));
}
You can set different path for each (or for some) upload attributes in your model:, (*6)
public function getUploadOptions() : UploadOptions
{
return UploadOptions::create()
->setUploadPaths(['image_mobile' => '/mobile' ]);
}
It support validation to accept files by specified list of Mime Type:, (*7)
public function getUploadOptions() : UploadOptions
{
return UploadOptions::create()
->setMimeType([
'image/gif',
'image/jpeg',
'image/png',
]);
}
By default every uploaded file will rename with 'original_name_'.$model->id.'.original_ext'
but you can redefine a custom function for renaming file:, (*8)
/**
* Generate a new file name for uploaded file.
* Return empty string if $uploadedFile is null.
* @param \Illuminate\Http\UploadedFile $uploadedFile
* @param String $uploadField
* @return string
*/
public function generateNewUploadFileName(\Illuminate\Http\UploadedFile $uploadedFile, string $uploadField) : string
{
if($uploadField=='image'){
return 'pippo.jpg';
}else{
return 'pippo_mobile.jpg';
}
}
This class use Laravel 'local' Storage Disk for default.
You can set different disk in your model:, (*9)
public function getUploadOptions() : UploadOptions
{
return UploadOptions::create()
->setStorageDisk('ftp');
}
For all options see UploadOptions class., (*10)
Change log
Please see CHANGELOG for more information what has changed recently., (*11)
Testing
bash
$ composer test, (*12)
Contributing
Please see CONTRIBUTING for details., (*13)
Security
If you discover any security related issues, please email instead of using the issue tracker., (*14)
Credits
About Padosoft
Padosoft (https://www.padosoft.com) is a software house based in Florence, Italy. Specialized in E-commerce and web sites., (*15)
License
The MIT License (MIT). Please see License File for more information., (*16)