【问题标题】:File upload problem with cakePHPcakePHP的文件上传问题
【发布时间】:2009-08-07 20:24:28
【问题描述】:

我正在尝试使用 cakePHP 上传文件。这是视图:

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

这是我得到的错误:

警告 (2):为 foreach() 提供的参数无效 [CORE/cake/dispatcher.php,第 314 行]

编辑: cakePHP 的调试告诉我这些是发生问题的代码行:

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

这是调用堆栈:

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

我的上传功能目前是空的。发生了什么?

【问题讨论】:

  • 看起来你在 $model 那里明确需要。尝试将其与模型相关联。

标签: cakephp file-upload


【解决方案1】:

在检查上传的数据时,Dispatcher 似乎期望模型名称存在。我不知道这是否有充分的理由,或者这只是一个疏忽。无论如何,只需使用一个虚构的模型名称,没关系。它将通过创建它所期望的数据结构来满足 Dispatcher。

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

【讨论】:

  • 尝试显式添加控制器,因为此表单没有关联模型。但问题仍然是一样的。我将调试级别更改为 3,似乎前面提到的 foreach 正在处理来自文件字段的数据。我会用更多信息更新问题。
  • 看起来您通常可以在没有模型的情况下创建表单,但调度程序在检查文件字段时碰巧期望模型名称。好像是内部矛盾。没关系,只要添加任何虚构的模型名称即可。
【解决方案2】:

上传文件时蛋糕核弹 $_POST 并将所有内容放入

$this->params['form'] 

数组。 在您的上传视图/控制器中对 $this->params 执行 var_dump,它应该在那里

【讨论】:

    【解决方案3】:

    /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);
      }
    }
    

    你会发现很多有趣的:-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 2010-10-17
      相关资源
      最近更新 更多