使用 CakePHP 3.2 上的 cakephp-upload 插件,图像不会保存到 photo_dir 文件夹中

Images are not saved into the photo_dir folder using cakephp-upload plugin on CakePHP 3.2

我正在使用 cakephp-upload plugin 并且我设法将图像上传到我的服务器:

工人表:

public function initialize(array $config)
{
    parent::initialize($config);

    $this->table('workers');
    $this->displayField('id');
    $this->primaryKey('id');

    $this->addBehavior('Josegonzalez/Upload.Upload', [
        'avatar' => [
            'fields' => [
                'dir' => 'photo_dir'
            ]
        ]
    ]);
}

view.ctp:

echo $this->Form->create($newWorker, ['type' => 'file']);
echo $this->Form->input('avatar', ['type' => 'file']);
echo $this->Form->input('photo_dir', ['type' => 'hidden']);

现在上传了头像,但是没有放到photo_dir子目录下

我错过了什么?它在我的 CakePHP 2.8.x 应用程序中没有任何问题。

不应该是:

$this->addBehavior('Josegonzalez/Upload.Upload', [
     'avatar' => [
         'fields' => [
             'dir' => 'avatar_dir'
         ]
     ]
 ]);

echo $this->Form->input('avatar_dir', ['type' => 'hidden']);

如果你想使用更好的选项,你可以使用下面的插件,它有更好的上传文件选项,而不是 Josegonzalez/Upload.Upload 插件。

我在我的项目中使用了以下一个。

Utils Plugin for Cake 3.x

Link 对于这个插件:https://github.com/cakemanager/cakephp-utils

文档:http://cakemanager.org/docs/utils/1.0/behaviors/uploadable/

这是配置:

$this->addBehavior('Utils.Uploadable', [
            'image' => [
                'path' => '{ROOT}{DS}{WEBROOT}{DS}uploads{DS}{field}{DS}',
                'fileName' => md5(rand(1000, 5000000)) . '.{extension}',
                'removeFileOnDelete' => true,
                'removeFileOnUpdate' => FALSE
            ],
        ]);

在这里您可以自定义它。如果您对此有任何疑问,请告诉我。

此处为插件作者。

fields.dir 属性没有说明子目录应该是什么。它是对数据库 table 中的列的引用,我们应该将 director 保存到我们保存文件的位置。

如果要更改文件在磁盘上的保存位置,应改用 path 选项。这是我使用 photo_dir 子目录的示例:

$this->addBehavior('Josegonzalez/Upload.Upload', [
    'avatar' => [
        'path' => 'webroot{DS}files{DS}{model}{DS}{field}{DS}photo_dir{DS}'
    ]
]);

path 选项的默认值为 webroot{DS}files{DS}{model}{DS}{field}{DS}