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

v1.50 2018-06-15 09:38 UTC

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