Datei-Upload in CakePHP 2.3

7

Ich bin neu in CakePHP und ich versuche, einen einfachen Datei-Upload mit CakePHP 2.3 hier ist mein Controller

zu erstellen %Vor%

und mein add.ctp

%Vor%

speichert Vorname, Nachname, Schlüsselwörter und den Namen der Datei in DB, aber die Datei, die ich in app / webroot / Dokumente speichern möchte, speichert nicht, kann jemand helfen? Danke

  

Aktualisieren

     

thaJeztah ich tat wie du sagtest, aber es gibt einige Fehler hier ist Controller, wenn ich nicht falsch bin

%Vor%
  

und mein add.ctp

%Vor%
  

und die Fehler sind

     

Hinweis (8): Konvertierung von Array zu String   [CORE \ Cake \ Model \ Datasource \ DboSource.php, Zeile 1005]

     

Datenbankfehler Fehler: SQLSTATE [42S22]: Spalte nicht gefunden: 1054 Unbekannt   Spalte 'Array' in 'Feldliste'

     

SQL-Abfrage: INSERT INTO first.posts (Vorname, Nachname, Schlüsselwörter,   doc_file) VALUES ('dfg', 'cbhcfb', 'dfdbd', Array)

     

und Victor ich habe deine Version auch gemacht, es funktioniert auch nicht.

    
Hovo 28.04.2013, 11:05
quelle

4 Antworten

14

Sie scheinen den falschen "Schlüssel" zu verwenden, um auf die geposteten Daten zuzugreifen;

%Vor%

Sollte dem 'Alias' von Ihnen entsprechen Model; singular und ein capital erster Buchstabe

%Vor%

Außerdem ist $this->data ein Wrapper für $this->request->data für die Abwärtskompatibilität, daher ist es besser, dies zu verwenden;

%Vor%

Um den Inhalt der geposteten Daten zu überprüfen und zu verstehen, wie sie strukturiert sind, können Sie sie mit diesem debuggen;

%Vor%

Achten Sie darauf, das Debugging zu aktivieren, indem Sie debug auf 1 oder 2 auf app/Config/core.php

setzen

Aktualisieren; Duplizieren Form Tags!

Ich habe gerade bemerkt, dass Sie auch mehrere (verschachtelte) Formulare in Ihrem Code erstellen;

%Vor%

Verschachteln von Formularen funktioniert nie , entfernen Sie diese Zeile und fügen Sie 'type = & gt; Datei 'an die erste Form->create()

Verwenden Sie nur die Datei name für die Datenbank

Das Problem "Array zu String-Konvertierung" ist darauf zurückzuführen, dass Sie versuchen, die Daten von 'doc_file' für Ihre Datenbank direkt zu verwenden. Da es sich um ein Datei-Upload-Feld handelt, enthält 'doc_file' ein Array mit Daten ('name', 'tmp_name' usw.).

Für Ihre Datenbank benötigen Sie nur den 'Namen' dieses Arrays, daher müssen Sie die Daten vor dem Speichern in der Datenbank ändern.

Für Beispiel auf diese Weise;

%Vor%     
thaJeztah 29.04.2013, 11:15
quelle
2

.. Stellen Sie sicher, dass das Dokumentenverzeichnis bereits existiert und prüfen Sie, ob Sie berechtigt sind, darauf zu schreiben? Wenn es nicht existiert, erstellen Sie es oder in Ihrem Code überprüfen Sie, ob es existiert und erstellen Sie es, wenn es nicht da ist: Beispiel für Code, der prüft, ob das Verzeichnis vorhanden ist oder nicht und erstellen Sie es dann laden Sie die Datei -

%Vor%

stellen Sie außerdem sicher, dass Sie keine leere / leere Datei hochladen - dies kann fehlschlagen.

    
Victor 29.04.2013 06:41
quelle
2

Nur wenn jemand wieder danach sucht. Hier ist mein Code (getestet und auf CakePHP 2.5.5 verwendet). Es basiert auf Ссылка & amp; Ссылка

Datei anzeigen (* .ctp)

%Vor%

Controller-Funktion (* .php)

%Vor%     
Britc 17.11.2014 16:40
quelle
1

Ich habe den kompletten Leitfaden zum Hochladen von Dateien und Bildern in CakePHP von hier gefunden - Umgang mit Datei-Uploads in CakePHP

Der Beispielcode ist unten angegeben.

Controller:

%Vor%

Anzeigen:

%Vor%     
JoyGuru 05.05.2016 07:33
quelle