2009-08-07 11 views
1

Ich versuche, eine Datei mit CakePHP hochladen. Dies ist die Ansicht:Datei-Upload-Problem mit CakePHP

echo $form->create(null, array('action' => 'upload', 'type' => 'file')); 
echo $form->file('img'); 
echo $form->submit('Enviar Imagem'); 
echo $form->end(); 

Und das ist der Fehler Ich erhalte:

Warnung (2): Invalid argument für foreach geliefert() [CORE/Kuchen/dispatcher.php, Linie 314]

Edit: CakePHP Debug sagt mir, dass diese die Codezeilen, wo das Problem passiert:

foreach ($_FILES['data'] as $key => $data) { 
    foreach ($data as $model => $fields) { 
     foreach ($fields as $field => $value) { 

Und dies ist der Call-Stack:

Dispatcher::parseParams() - CORE/cake/dispatcher.php, line 314 
Dispatcher::dispatch() - CORE/cake/dispatcher.php, line 118 
[main] - APP/webroot/index.php, line 88 

Meine Upload-Funktion ist derzeit leer. Was ist los?

+1

sieht finden wie Sie explizit bei $ Modell dort brauchen. Versuchen Sie es mit einem Modell zu verbinden. – helloandre

Antwort

2

Es scheint, dass der Dispatcher beim Prüfen der hochgeladenen Daten Modellnamen erwartet. Ich weiß nicht, ob es einen guten Grund dafür gibt oder ob es nur ein Versehen ist. Wie auch immer, benutze einfach einen erfundenen Modellnamen, es spielt keine Rolle. Es erfüllt den Dispatcher, indem es eine erwartete Datenstruktur erstellt.

echo $form->create('File', array(
    'url' => array('controller' => 'myController', 'action' => 'upload'), 
    'type' => 'file' 
)); 
+0

Versucht, den Controller explizit hinzuzufügen, da diesem Formular kein Modell zugeordnet ist. Aber das Problem bleibt das gleiche. Ich habe den Debug-Level auf 3 geändert und es scheint, dass der oben erwähnte foreach Daten aus Dateifeldern behandelt. Ich werde die Frage mit weiteren Informationen aktualisieren. –

+0

Es scheint, dass Sie Formulare ohne Modelle im Allgemeinen erstellen können, aber der Dispatcher erwartet beim Prüfen von Dateifeldern einen Modellnamen. Scheint wie eine interne Inkonsistenz. Es ist egal, fügen Sie einfach einen beliebigen Modellnamen hinzu. – deceze

0

Wenn Dateien Kuchen Nukes $ _POST Hochladen und bringt alles in

$this->params['form'] 

Array. tun ein var_dump auf $ this-> params in Upload-Ansicht/Controller und es sollte dort

0

/app/views/images/upload.ctp

echo $form->create('Image', array('action' => 'upload', 'type' => 'file')); 
echo $form->file('img'); 
echo $form->submit('Enviar Imagem'); 
echo $form->end(); 

/app/controllers/images_controller.php sein

function upload(){ 
    if(!empty($this->data)){ 
    pr($this->data); 
    } 
} 

Sie werden eine Menge interessanter :-)