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.
The behavior is very much a work in progress and should not be considered stable in any way.
- 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)
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 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'
],
]);
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
Simple shell to re-generate all presets for given model
bin/cake image