Welcome to the Cookbook

loading...

7.3.4 File Fields

Um ein Datei-Upload-Feld in einem Formular zu erzeugen, musst du zuerst sicherstellen, dass der Formulartyp auf "multipart/form-data" eingestellt ist. Los geht's also mit einer der nachfolgenden Create-Funktionen.

echo $this->Form->create('Document', array('enctype' => 'multipart/form-data') );
// oder
echo $this->Form->create('Document', array('type' => 'file'));
  1. echo $this->Form->create('Document', array('enctype' => 'multipart/form-data') );
  2. // oder
  3. echo $this->Form->create('Document', array('type' => 'file'));

Als nächstes fügst du deiner View-Datei eine der folgenden Zeilen hinzu.

echo $this->Form->input('Document.submittedfile', array('between'=>'<br />','type'=>'file'));

// oder

echo $this->Form->file('Document.submittedfile');
  1. echo $this->Form->input('Document.submittedfile', array('between'=>'<br />','type'=>'file'));
  2. // oder
  3. echo $this->Form->file('Document.submittedfile');

Auf Grund der Beschränkungen von HTML selbst, ist es nicht möglich, einem File-Feld einen Vorgabewert zu übergeben. Beim Anzeigen des Formulars wird der Inhalt des File-Feldes demnach immer leer sein.

Bei der Übertragung des Formulars senden File-Felder ein Array von Werten an das verarbeitende Skript.

Für das obige Beispiel sehen die Werte des übertragenen Arrays wie folgt aus, sofern CakePHP auf einem Windows-System installiert wurde. Die Pfadangabe der Variable 'tmp_name' wird auf einer Unix-Umgebung anders aussehen.


$this->data['Document']['submittedfile'] = array(
    'name' => conference_schedule.pdf
    'type' => application/pdf
    'tmp_name' => C:/WINDOWS/TEMP/php1EE.tmp
    'error' => 0
    'size' => 41737
);
  1. $this->data['Document']['submittedfile'] = array(
  2. 'name' => conference_schedule.pdf
  3. 'type' => application/pdf
  4. 'tmp_name' => C:/WINDOWS/TEMP/php1EE.tmp
  5. 'error' => 0
  6. 'size' => 41737
  7. );

Dieses Array wird von PHP selbst erzeugt. Für weitere Informationen, wie PHP mit der Verarbeitung von File-Feldern umgeht, lohnt sich ein Blick auf das File-Upload-Kapitel der PHP-Dokumentation.

7.3.4.1 Validating Uploads

Es gibt zur Zeit keine Übersetzung für diesen Abschnitt. Bitte hilf mit und übersetze ihn. Mehr Informationen zu Übersetzungen

Below is an example validation method you could define in your model to validate whether a file has been successfully uploaded.

// Based on comment 8 from: http://bakery.cakephp.org/articles/view/improved-advance-validation-with-parameters

function isUploadedFile($params){
	$val = array_shift($params);
	if ((isset($val['error']) && $val['error'] == 0) ||
	(!empty( $val['tmp_name']) && $val['tmp_name'] != 'none')) {
		return is_uploaded_file($val['tmp_name']);
	}
	return false;
}
  1. // Based on comment 8 from: http://bakery.cakephp.org/articles/view/improved-advance-validation-with-parameters
  2. function isUploadedFile($params){
  3. $val = array_shift($params);
  4. if ((isset($val['error']) && $val['error'] == 0) ||
  5. (!empty( $val['tmp_name']) && $val['tmp_name'] != 'none')) {
  6. return is_uploaded_file($val['tmp_name']);
  7. }
  8. return false;
  9. }