PHPackages                             grandfelix/woodyattachments - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. grandfelix/woodyattachments

ActiveCakephp-plugin

grandfelix/woodyattachments
===========================

WoodyAttachments file upload plugin for CakePHP 3

19PHP

Since Sep 6Pushed 2y ago1 watchersCompare

[ Source](https://github.com/grandfelix/woodyattachments)[ Packagist](https://packagist.org/packages/grandfelix/woodyattachments)[ RSS](/packages/grandfelix-woodyattachments/feed)WikiDiscussions master Synced 2mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

WoodyAttachments CakePHP 3 plugin
=================================

[](#woodyattachments-cakephp-3-plugin)

CakePHP 3 file upload plugin.

Requirements
------------

[](#requirements)

CakePHP 3 PHP &gt; 5.4.16

imagine/imagine is used for image manipulation

Installation
------------

[](#installation)

```
composer require GrandFelix/WoodyAttachments

```

run composer update in shell

run migrations

```
bin/cake migrations migrate --plugin WoodyAttachments

```

How to use it
-------------

[](#how-to-use-it)

Add this to your Table file:

```
$this->addBehavior('WoodyAttachments.Upload', [
            'fields' => [
                'images' => [
                    'allowedFileTypes' => ['image/jpeg', 'image/png'],
                    'fileSize' => '2MB',
                    'numberOfFiles' => 20,
                    'operations' => [ // remove all this if you don't want to make any file operations
                        'thumb' => [ // this wil be folder name uploads folder
                            'thumbnail' => [
                                'w' => 270,
                                'h' => 198
                            ],
                            'effects' => ['negative'] // add Imagine effects
                        ],
                        'mid' => [ // this wil be folder name uploads folder
                            'widen' => [
                                'size' => 600
                            ],
                            'effects' => ['grayscale'],
                            'rotate' => ['degrees' => 90]
                        ],
                    ]
                ],
                'pdf' => [
                    'allowedFileTypes' => ['application/pdf'],
                    'fileSize' => '2MB',
                ]
            ]
        ]);
```

Currently there are only file operations for images...

For multiple upload add this to your view file:

```
echo $this->Form->input('images[]',
    [
        'multiple' => true,
        'label' => 'Pictures',
        'type' => 'file'
    ]);
```

or this for single upload:

```
echo $this->Form->input('pdf',
    [
        'label' => 'PDF file',
        'type' => 'file'
    ]);
```

Form input must have the same name as in configuration in Table when loading behavior. So in this example images and pdf

And don't forget to add \['type' =&gt; 'file'\] in $this-&gt;Form-&gt;create('ModelName', \['type' =&gt; 'file'\])

Change main upload path in config/bootstrap.php

Other
-----

[](#other)

- Files are saved in webroot/{your\_file\_upload\_folder\_from\_config}/{Year}/{Month}/{Model}/\*
- when you delete item, files will also be deleted...

TODO
----

[](#todo)

- A lot of code improvements because it was all created very fast
- Move file operations to other place..
- Create helper to render files automatically
- Administration controller
- Configurable file saving paths
- Recognize file type and use file operations for that file type
- ...

###  Health Score

14

—

LowBetter than 2% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity21

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/0c894b1831c80ef134e773c9722b0ccd5642ae7a4cdb2252f9ede40dfb466a4f?d=identicon)[GrandFelix](/maintainers/GrandFelix)

---

Top Contributors

[![GrandFelix](https://avatars.githubusercontent.com/u/5418644?v=4)](https://github.com/GrandFelix "GrandFelix (9 commits)")

### Embed Badge

![Health badge](/badges/grandfelix-woodyattachments/health.svg)

```
[![Health](https://phpackages.com/badges/grandfelix-woodyattachments/health.svg)](https://phpackages.com/packages/grandfelix-woodyattachments)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
