Bildupload in CakePHP

Oft benötigt man eine schnelle und simple Umsetzung des Bilduploads für sein Projekt. In meinem Fall für die Verifikation von Nutzern auf einer Plattform. Jose Gonzalez hat sich dem angenommen und ein Plugin dafür geschrieben, dessen Funktionsweise ich hier kurz erklären möchte.

Installation

Am einfachsten geht das über Composer – einfach im Root Verzeichnis eurer App den folgenden Befehl aufrufen

composer require josegonzalez/cakephp-upload

Danach das Plugin über

bin/cake plugin load Josegonzalez/Upload

aktivieren.

Nutzung

View

In meinem Fall benötige ich nur ein Feld in meiner „Users“ Table ( file varchar(255) ). Das muss ich dann in einfach meinem add View hinzufügen:

src/Template/Users/add.ctp

<?= $this->Form->create($user,['type' => 'file']) ?>
<?php
echo $this->Form->input('file', ['label'=>__('Identifikation'), 'type' => 'file', 'id' => 'images0', 'required' => 'required', 'accept' => 'image/jpg,image/jpeg']);
?>

Vergesst dabei nicht den ‚type‘ beim erstellen des Forms anzugeben.

Model

/src/Model/Table/UsersTable.php

Das Model

/**
     * Initialize method
     *
     * @param array $config The configuration for the Table.
     * @return void
     */
    public function initialize(array $config)
    {
        parent::initialize($config);

//other Stuff

$this->addBehavior('Josegonzalez/Upload.Upload', [
		    // You can configure as many upload fields as possible,
		    // where the pattern is `field` => `config`
		    //
		    // Keep in mind that while this plugin does not have any limits in terms of
		    // number of files uploaded per request, you should keep this down in order
		    // to decrease the ability of your users to block other requests.
		    'file' => []
	    ]);
    }

Ihr könnte danach noch beliebig Regeln hinzufügen – dazu müsst Ihr die versch. Validator Provider hinzufügen:

$validator->provider('upload', \Josegonzalez\Upload\Validation\UploadValidation::class);
	    // OR
	    $validator->provider('upload', \Josegonzalez\Upload\Validation\ImageValidation::class);
	    // OR
	    $validator->provider('upload', \Josegonzalez\Upload\Validation\DefaultValidation::class);

In meinem Fall haben ich folgende hinzugefügt:

$validator->add('file', 'fileUnderFormSizeLimit', [
		    'rule' => 'isUnderFormSizeLimit',
		    'message' => 'This file is too large',
		    'provider' => 'upload'
	    ]);


	    $validator->add('file', 'fileCompletedUpload', [
		    'rule' => 'isCompletedUpload',
		    'message' => 'This file could not be uploaded completely',
		    'provider' => 'upload'
	    ]);

	    $validator->add('file', 'fileFileUpload', [
		    'rule' => 'isFileUpload',
		    'message' => 'There was no file found to upload',
		    'provider' => 'upload'
	    ]);

	    $validator->add('file', 'fileSuccessfulWrite', [
		    'rule' => 'isSuccessfulWrite',
		    'message' => 'This upload failed',
		    'provider' => 'upload'
	    ]);

	    $validator->add('file', 'fileAboveMinHeight', [
		    'rule' => ['isAboveMinHeight', 300],
		    'message' => 'This image should at least be 200px high',
		    'provider' => 'upload'
	    ]);

Die komplette Liste dazu findet Ihr HIER

Probleme

Ich hatte Anfangs Probleme mit den Berechtigungen beim schreiben, bzw. öffnen der Dateien. Setzt daher eure Berechtigungen richtig – die Dateien werden nach folgendem Muster gespeichert:

webroot/files/Controller/Formfield

in meinem Fall also webroot/files/Users/file

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.