josbeir / image
CakePHP 3.0 Image upload behavior
Installs: 3 223
Dependents: 0
Suggesters: 0
Security: 0
Stars: 20
Watchers: 5
Forks: 12
Type:cakephp-plugin
Requires
- php: >=5.6
- cakephp/cakephp: ~3.6
- cakephp/plugin-installer: *
- intervention/image: ~2.0
Requires (Dev)
- cakephp/cakephp-codesniffer: ^3.0
- phpunit/phpunit: ^5.7|^6.0
This package is not auto-updated.
Last update: 2024-10-29 04:09:20 UTC
README
Image behavior that works much like Cake's built in Translate Behavior by adding fields with image data to every entity the table returns.
- Uploads can be either $_FILE based or just a string containing path. 'copy' or 'move_uploaded_file' is used accordingly.
- Validating should be done by cake's nice validation options and is therefore not included in the behavior itself.
- Image presets are generated using Intervention/Image. See the documentation page.
Notes
The behavior is very much a work in progress and should not be considered stable in any way.
Configuration parameters
- fields: Fields used for images, should be the name of the field as key and the type as value (many, one)
- presets: Array of presets containing a list of Intervention/Image methods and their parameters, can also be a callable function with the image object passed
- path: The base path where the uploaded images should be stored
- table: The table name of for storing the image data (see Config/Schema/images.sql)
- manager: Settings for Intervention\Image\ImageManager (defaults to driver : imagick)
Usage
Install using composer
"require": { "josbeir/image": "~1.0" }
And run php composer.phar install
Enable the plugin by adding it to bootstrap.php
Plugin::load('Image');
Init the database table by using cakephp's migrations
bin/cake migrations migrate -p Image
Enable the image behavior by adding it to the Table's initialize hook
public function initialize(array $config) { $this->addBehavior('Image.Image', [ 'path' => WWW_ROOT . 'assets', 'fields' => [ 'images' => 'many', 'main' => 'one' ], ]); }
Image presets
Image manipulation is handled by Intervention/Image and configuring presets is pretty straightforward. In the example below the preset 'overview' is generated by looping trough various Intervention/Image helper functions
$this->addBehavior('Image.Image', [ 'path' => WWW_ROOT . 'assets', 'presets' => [ 'overview' => [ 'resize' => [ 200, 200 ], // $image->resize(200, 200); 'crop' => [ 150, 150] // $image->crop(150,150); 'canvas' => function($image) { // you can use callback functions for more advanced stuff // do some fancy stuff here return $image; }, ] ], 'fields' => [ 'image' => 'one' ], ]);
Helper
I've included a basic helper to render the images in your templates.
$this->Image->render($entity->field); // Original image $this->Image->render($entity->field, [ 'preset' => 'presetName' ]); // Preset $this->Image->render($entity->field, [ 'preset' => 'presetName', 'alt' => 'Cool image' ]); // Preset + image attributes $this->Image->url($entity->field, 'presetName'); // Returns the image path with an optional preset argument
Shell
Simple shell to re-generate all presets for given model
bin/cake image