2009-08-07 5 views
1

J'essaye de télécharger un fichier avec cakePHP. Voici la vue:Problème de téléchargement de fichier avec cakePHP

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

Et ceci est l'erreur que je reçois:

Avertissement (2): Invalid argument supplied for foreach() [CORE/gâteau/Dispatcher.php, ligne 314]

Edit: débuggage CakePHP me dit que ce sont les lignes de code où le problème se produit:

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

Et ceci est la pile d'appel:

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

Ma fonction de téléchargement est actuellement vide. Qu'est-ce qui se passe?

+1

semble que vous avez besoin explicitement au modèle $ là-bas. essayez de l'associer à un modèle. – helloandre

Répondre

2

Il semble que Dispatcher s'attend à ce que les noms de modèles soient présents lors de la vérification des données téléchargées. Je ne sais pas s'il y a une bonne raison à cela ou si c'est juste un oubli. Quoi qu'il en soit, utilisez simplement un nom de modèle composé, cela n'a pas d'importance. Il satisfera le Dispatcher en créant une structure de données attendue.

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

Essayé d'ajouter le contrôleur explicitement, puisque ce formulaire n'a pas de modèle associé. Mais le problème reste le même. J'ai changé le niveau de débogage à 3 et il semble que le foreach mentionné ci-dessus traite des données des champs de dossier. Je vais mettre à jour la question avec plus d'informations. –

+0

Il semble que vous pouvez créer des formulaires sans modèles en général, mais le répartiteur arrive à attendre un nom de modèle lors de la vérification des champs de fichier. On dirait une incohérence interne. Peu importe, il suffit d'ajouter un nom de modèle inventé. – deceze

0

Lors du téléchargement des fichiers gâteau armes nucléaires $ _POST et met tout en

$this->params['form'] 
tableau

. faire un var_dump sur $ this-> params dans votre vue/contrôleur télécharger et il devrait être là

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

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

vous trouverez beaucoup de :-) intéressant

Questions connexes