解析 XML 提要并以这种方式保存:
$action = new CouponActionForm();
$values = array(
'name' => $offer->name,
'link' => $offer->url,
'description' => $offer->description,
'discount' => $offer->discount,
'price' => $offer->price
);
$files = $this->getImages($offer->picture);
if(!$action->bindAndSave($values, $files)){
echo $action->renderGlobalErrors();
die('BAD THING');
}
这是getImages
方法:
private function getImages($url){
$ret = array('error' => 0);
$tmp_dir = sys_get_temp_dir();
$tmp_file = tempnam($tmp_dir, 'kupon');
if(copy($url, $tmp_file)){
$ret['tmp_name'] = $tmp_file;
$ret['name'] = basename($url);
$ret['size'] = filesize($tmp_file);
$ret['type'] = 'image/jpeg';
return array('filename' => $ret);
}else{
die('HELP');
}
}
为什么我使用表单保存而不是使用->fromArray
方法保存对象?好吧,我已经完成了表单和所有验证,所以我不想两次实现相同的东西(DRY),但同样重要的是,我实际上不知道如何在学说模型中使用验证器。所以问题是表单没有将文件保存在validatorpath
属性指定的特定目录中sfValidatorFile
,而是存在于tmp目录中。