kaliel/image

CakePHP 4.0 Image upload behavior

Installs: 6

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 1

Forks: 12

Type:cakephp-plugin

2.0.0 2020-03-05 13:41 UTC

This package is auto-updated.

Last update: 2024-04-07 23:21:48 UTC


README

Software License Build Status

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)

Installation

You can install this plugin into your CakePHP application using composer:

php composer.phar require kaliel/image

Load the plugin by adding the following statement in your project's src/Application.php:

public function bootstrap(): void
{
    parent::bootstrap();

    $this->addPlugin('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