FuelPHPのUploadクラスのUploaded files arrayの仕様変更(たぶん1.6から)とバグ情報
FuelPHPのUploadクラスの不具合に遭遇したので記録しておきます。
Uploadクラスの仕様変更
あまり、はまる人は少ないかも知れませんが、FuelPHPのUploadクラスのアップロードファイルの情報が格納される配列の仕様が、UploadクラスがFuelPHP 2.0のパッケージを使うように変更された1.6から変わっていたようです。
ただし、Upload::get_files()、Upload::get_errors()では、以下のように変換されて配列が返るため、互換性は維持されているようです。
foreach ($files as $file)
{
$data = array();
foreach ($file as $item => $value)
{
$item == 'element' and $item = 'field';
$item == 'tmp_name' and $item = 'file';
$item == 'filename' and $item = 'saved_as';
$item == 'path' and $item = 'saved_to';
$data[$item] = $value;
}
$data['field'] = str_replace('.', ':', $data['field']);
$data['error'] = ! $file->isValid();
$data['errors'] = array();
$result[] = $data;
}
つまり、Upload::register()などで、この配列を直接操作する場合は、仕様変更に引っかかります。以下のようにキーが変更されています。
field → element
file → tmp_name
filename → basename
saved_as → filename
saved_to → path
また、errorの値はboolからPHPのUpload error codeに変わっています。
Uploadクラスのバグ情報
FuelPHP 1.6.1のZipファイルでは、ComposerでインストールするUploadパッケージの名前空間が、1.6.1リリース後にFuelPHPからFuelに変更されたことが反映されておらず、以下のエラーが発生します。
Fatal error: Class 'FuelPHP\Upload\Upload' not found in .../fuel/core/classes/upload.php on line 90
これは、oil installコマンドでインストールされるGitHubの1.6/masterでは修正済みです。
もう1つ、Upload::register()で'validate'が使えないバグがありました。
InvalidArgumentException [ Error ]: after_validate is not a valid event
.../fuel/vendor/fuelphp/upload/src/FuelPHP/Upload/Upload.php @ line 320
これは、1.7/developで修正されています。
ただし、その他のバグ修正もされているので、Uploadクラスは1.7/developの最新のものを使うのがよいように思います。
Date: 2013/10/11