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
メソッドでオブジェクトを保存する代わりにフォーム保存を使用するのはなぜですか? まあ、私はすでにフォームとすべての検証を行っているので、同じことを2回実装したくはありませんが(DRY)、重要なこととして、教義モデルでバリデーターを使用する方法が実際にはわかりません。問題は、フォームがバリデータのpath
プロパティで指定された特定のディレクトリにファイルを保存せずsfValidatorFile
、tmp ディレクトリに存在することです。