Your browser (Internet Explorer 6) is out of date. It has known security flaws and may not display all features of this and other websites. Learn how to update your browser.
X
Post

[タスク] My_Form_Fileで複数のファイルアップロードに対応する

ver 0.0.7の修正箇所。中規模の機能拡張です。



タイトルにあるように、元々ZF-ExのMy_Form_Fileモジュールではファイルを
一度に複数まとめてアップロードする処理に対応していませんでした。
そのために、今回のバージョンにてそれに対応しました。

どちらかというと複数ファイルのアップロード制御そのものより、
バリデーション回りの整備の方が面倒でした。


Zend_File_Transferのバリデータの仕様について

数日前に書いたように、
Zend Frameworkの方で複数のファイルに対してバリデーションをかけた時に
どのファイルのエラーであるのか分からないという問題がありました。

そこで、My_Form_File内でエラーメッセージを切り分け、
どのファイルに対するエラーか分かるようにしました。

また、今回の修正により、
バリデーションのエラーメッセージ取得方法が少し変わっています。
元々は次のように、バリデーションに失敗したら
返り値の中に入れるようになっていました。

$file = new My_Form_File();
$file->setFieldName('ファイル1');
$file->addValidator('Extension', array('gif', 'jpg', 'png')); // 拡張子。ここに含まれていれば許可される。

// 成功すれば$file_validにtrue、失敗すればエラーメッセージ配列が返ってくる
$file_valid = $file->isValid();
if($file_valid !== true){
    $error_msg = $file_valid[0]; // エラーメッセージをセット
    throw new Zend_Validate_Exception();
}
// 以下、処理が続く

isValidの返り値自体はtrue/falseで、
別のメソッドでエラーメッセージを取得するようにしました。
まぁ、本来はこっちの方がいいよなぁ……

$file = new My_Form_File();
$file->setFieldName(array('file_1' => 'ファイル1', 'file_2' => 'ファイル2'));
$file->addValidator('Extension', array('gif', 'jpg', 'png')); // 拡張子。ここに含まれていれば許可される。

// 成功すればtrue、失敗すればfalse
$file_valid = $file->isValid();
if($file_valid !== true){
    // エラーメッセージをセット。error_msg['file_1']にfile_1のエラーが、error_msg['file_2']にfile_2のエラーが配列で入る
    $error_msg = $file->getErrorMessages();
    throw new Zend_Validate_Exception();
}
// 以下、処理が続く


ただ、この件はまだ気になるところもあります。
今の時点ではファイルを複数アップロードする場合、
個々のファイルごとに処理を書く必要があり、冗長な書き方をしないといけないようになっています。
application/modules/admin/controllers/ProductsController.php内で
実際にそのように二重で処理が書かれていますが、
これが何箇所かに別れていてちょっと長くなっています。


何とかこの部分を簡略化して記述できるようにしたいところです。

TrackBack URL :

Leave a comment  

name

email

website

Submit comment