使用 xety/cake3-upload 插件时文件上传失败

File fails to upload when using xety/cake3-upload plugin

我无法在 CakePHP 中将文件从一个文件夹上传到另一个文件夹。这是我的代码。

首先我加载了插件并在 ProductsTable.php

中添加了这段代码
$this->addBehavior('Xety/Cake3Upload.Upload', [
    'fields' => [
        'productimg_file' => [
            'path' => 'uploads/avatar/:id/:md5'
        ]
    ]
]);

然后我在 add.cpt

中添加了
<?php
    echo $this->Form->input('productcode');
    echo $this->Form->input('productname');
    echo $this->Form->input('productprice');
    echo $this->Form->input('quantity');
    echo $this->Form->input('productdesc');
    echo $this->Form->input('productimg_file',['type' => 'file']);
?>

文件仍然没有移动到 webroot 目录。

在此处输入代码 public 函数添加() {

    $product = $this->Products->newEntity();


    if ($this->request->is('post')) {

    $product = $this->Products->patchEntity($product, $this->request->data);

        if ($this->Products->save($product)) {
           $this->Flash->success(__('The product has been saved.'));
            return $this->redirect(['action' => 'index']);
        } else {
           $this->Flash->error(__('The product could not be saved. Please, try again.'));
        }
    }
    $this->set(compact('product'));
    $this->set('_serialize', ['product']);
}

您的观点似乎不完整。没有$this->Form->create().

plugin instructions 提到您必须将表单设置为接受文件:

$this->Form->create($foo, ['type'=>'file']);
// .. or ..
$this->Form->create($foo, ['enctype' => 'multipart/form-data']);

上传内容默认存储在 /app/webroot/img/ 下。请确保此文件夹可由 Apache 或 Nginx 写入。

我已经通过那个插件成功上传了。一开始,我是你的错误,但我修正了它。这是我的步骤...

内含:CakePHP 3.2 Red Velvet

  1. 下载源码 复制 UploadBehavior.php/src/Model/Behavior

  2. 复制"xety/cake3-upload": "1.*"(带双引号“”)粘贴到/config/bootstrap。php中的"require-dev":{...} ,

例如:

"require-dev": {
        "psy/psysh": "@stable",
        "cakephp/debug_kit": "~3.2",
        "cakephp/bake": "~1.1",
        "xety/cake3-upload": "1.*"
    },
  1. 打开终端(window cmd)输入:

    作曲家更新

注意:如果您没有 composer,google 并安装它。

=> 我知道 1 号和 2 号是一样的,但我肯定做到了。

  1. 配置为插件手册。 下面的配置是 Model/Table/model_nameTable.php 不是 Model/Entity/model.php

例如:

$this->addBehavior('Xety/Cake3Upload.Upload', [
        'fields' => [
            'avatar' => [
                'path' => '/img/avatars/:id/:md5'
                    ]
                ]
            ]
        );
  1. 设置更新 URL 为

    '/img/folder_name/:id/:md5'

例如:

'/img/avatars/:id/:md5'
  1. 确保视图中的 FORM 定义为:

    $this->Form->create($user, ['enctype' => 'multipart/form-data'])

并且输入文件是正确的名称:

$this->Form->file('fieldname_file');

例如:

$this->Form->file('avatar_file');

不需要从控制器调用任何东西,当你提交表单时,它会自动上传。

祝你好运!

_file 是默认后缀,您将仅在 .ctp 文件中使用它。不在模型中。 改变你在模型中的行为。希望这会有所帮助。

$this->addBehavior('Xety/Cake3Upload.Upload', [
    'fields' => [
        'productimg' => [
            'path' => 'uploads/avatar/:id/:md5'
        ]
    ]
]);