我正在尝试使用CakePHP 1.3中的MeioUpload behaviour来实现一些相当简单的图像上传,但我不能让我的生活让它工作。当我尝试在我的控制器中保存$this->data
时,它会尝试保存常规文件数组(缺少更好的单词),而不仅仅是文件名。
这就是我正在做的事情:
我已将meio_upload.php放入/ app / models / behavior
在我的模型中,我正在做以下事情:
var $actsAs = array(
'MeioUpload.MeioUpload' => array(
'filename' => array(
'dir' => 'img{DS}upload{DS}brawlers',
'allowedMime' => array('image/png'),
'allowedExt' => array('.png', '.PNG'),
'zoomCrop' => false,
'thumbsizes' => array(
'normal' => array(
'width' => 150,
'height' => 150
)
),
'default' => 'default.png',
'length' => array(
'minWidth' => 100,
'minHeight' => 100,
'maxWidth' => 150,
'maxHeight' => 150
)
)
)
);
在我看来,我有以下表格:
<?php
echo $this->Form->create('Brawler', array('type' => 'file'));
echo $this->Form->input('name', array(
'label' => 'Name',
'maxLength' => '45'
)
);
echo $this->Form->input('comment', array(
'label' => 'Description',
'rows' => '3'
)
);
echo $this->Form->input('author', array(
'label' => 'Your name)',
'maxLength' => '45'
)
);
echo $this->Form->input('email', array(
'label' => 'Email (will not be shown)',
'maxLength' => '45'
)
);
echo $this->Form->input(
'filename',
array(
'between'=>'<br />',
'type'=>'file',
'label' => 'Image (Max 2mb, 150x150 pixels, .png)'
)
);
echo $this->Form->end('Submit');
?>
最后,我在关联控制器中的添加操作如下所示:
function add() {
if (!empty($this->data)) {
$this->Brawler->create();
if($this->Brawler->save($this->data)) {
$this->Session->setFlash('The brawler has been saved', true);
$this->redirect(array('action'=>'index'));
} else {
$this->Session->setFlash('The Brawler could not be saved. Please try again.', true);
debug($this->data);
debug($this->validationErrors);
die();
//$this->redirect(array('action'=>'add'));
}
}
}
对于后人,这是我的桌子设计:
delimiter $$
CREATE TABLE `brawlers` (
`id` int(11) NOT NULL,
`name` varchar(45) NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`comment` text,
`email` varchar(45) NOT NULL,
`author` varchar(45) NOT NULL,
`filename` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8$$
当我尝试提交表单时,这是我得到的输出:
app/controllers/brawlers_controller.php (line 37)
Array
(
[Brawler] => Array
(
[name] => Viking
[comment] => Herp. This is a description.
[author] => Me
[email] => me@gmail.com
[filename] => Array
(
[name] => 5.png
[type] => image/png
[tmp_name] => /storage/configuration/upload_tmp_dir/phpEF2okD
[error] => 0
[size] => 15863
)
)
)
app/controllers/brawlers_controller.php (line 37)
显然,当它尝试将数组保存到文件名字段时会失败。图像永远不会保存在指定的上载目录中。似乎meioupload行为从未实际使用过。我该如何验证?
你必须原谅我发布的大量代码,但我认为我向你展示的一切都比你猜测我在做什么更好。如果有人能发现错误,那将会让我节省很多时间来拉扯我的头发。
答案 0 :(得分:1)
嘿我有你的查询答案
那就是你必须制作另一个变量Say
$ d1并将$ this-&gt;日期数组复制到该数组中,如下所示
$ d1 ['brawlers'] ['name'] = $ this-&gt; data ['brawlers'] ['name'];
所有你的变量
$ d1 ['brawlers'] ['filename'] = $ this-&gt; data ['brawlers'] ['filename'] ['name'];
然后将其保存为$ this-&gt; brawlers-&gt; save($ d1);
答案 1 :(得分:0)
我不 PHP家伙,但我不得不在前一段时间使用CakePHP和Meio.Upload。 AFAIK您的数据库需要4个字段用于图像:
判断你的错误和数据库架构我会说你缺少一些字段。
修改强> 请参阅documentation
答案 2 :(得分:0)
我遇到了同样的问题,你使用的MeioUpload版本与你的Cake版本不兼容。我最后使用的是MeioUpload 2.3版。