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