上传文件时,CakePHP中的“注意:数组到字符串转换”

时间:2016-01-19 01:13:02

标签: php cakephp file-upload cakephp-2.x

我在表格上遇到了一些问题,这让我感到疯狂。

每当我尝试将图像上传到我的数据库时,我都会

.Columns(col =>
{
   col.ForeignKey(c => c.ScheduleID, (System.Collections.IEnumerable)ViewBag.schedules, "ID", "EventDate").Title("Date");
})

我不确定我做错了什么或错过了什么。任何帮助表示赞赏。

这是我的模特

Notice: Array to string conversion [CORE\Cake\Model\Datasource\DboSource.php, line 1009] 

这是我的控制器

        'banner_image' => array(
        'not_required' => array(
            'allowEmpty' => true,
            'required' => false,
        ),
        'is_image' => array(
            'rule' => 'is_image_check',
            'message' => 'We found that the file you uploaded is not an image.',
            //'allowEmpty' => false,
            'required' => false,
            //'last' => false, // Stop validation after this rule
            //'on' => 'create', // Limit validation to 'create' or 'update' operations
        ),
),

这是我的表格

/**
 * admin_add method
 *
 * @return void
 */
public function admin_add() {
    if ($this->request->is('post')) {
        $this->Survey->create();
        if ($this->Survey->save($this->request->data)) {
            $this->Session->setFlash(__('The survey has been saved.'));
            return $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('The survey could not be saved. Please, try again.'));
        }
    }
}

1 个答案:

答案 0 :(得分:3)

这是您的控制器收到的字段banner_image

$this->request->data['Survey']['banner_image'] = array(
    'name' => 'example_image.jpg',
    'type' => 'image/jpg',
    'tmp_name' => 'C:/WINDOWS/TEMP/php1EE.tmp', //path will vary on Unix-like OSes
    'error' => 0,
    'size' => 41737,
);

如果您尝试将其保存到表格中,您将获得

Notice: Array to string conversion in filename on line X

因此,您必须先进行一些预处理才能拨打save()

您的surveys.banner_image可能已设置为接受文件名。

一种典型的方法是实现Survey::beforeSave()回调并添加必要的代码,将上传的文件从其临时位置移动到您选择的目标文件夹。

然后,您使用$data['Survey']['banner_image']覆盖$data['Survey']['banner_image']['name']数组。

或者,您可以使用处理上传的多个CakePHP插件中的一个来代替重新发明轮子,例如josegonzalez/cakephp-upload

有关进一步参考,请参阅: