我正在使用cakephp-upload plugin,我设法将图片上传到我的服务器:
WorkersTable:
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应用程序中没有任何问题。
答案 0 :(得分:1)
不应该是:
$this->addBehavior('Josegonzalez/Upload.Upload', [
'avatar' => [
'fields' => [
'dir' => 'avatar_dir'
]
]
]);
echo $this->Form->input('avatar_dir', ['type' => 'hidden']);
答案 1 :(得分:1)
如果你想使用更好的选项,你可以使用下面的插件,它有更好的选项来上传文件,而不是Josegonzalez/Upload.Upload
插件。
我在我的项目中使用了以下一个。
Utils Plugin for Cake 3.x
此插件的链接: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
],
]);
您可以在此自定义它。如果您对此有任何疑问,请与我们联系。
答案 2 :(得分:1)
这个插件的作者。
fields.dir
属性未说明子目录应该是什么。它是对数据库表中列的引用,我们应该保存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}
。