アップロードメソッド
汎用的に使えるようにしたい
現状
- 容量オーバーなら-2を返す
- 成功したらファイル名を返す
- 戻り値の役割が混乱してる
- $width, $height, $sizeも返したい
配列で返す
- return array($errorcode, $filename, $width, $height, $size)
- 呼ぶときは、list(.....)=upload($this->data)
- 独立性は高い(コピペで使える)
- エラー処理はコントローラーで書かなきゃならん
- $filename, $width, $height, $sizeをコントローラーで書き換える必要がある
- そもそも戻り値が複数の関数は好きじゃない
オブジェクトで返す
- cakePHPには向かないかも
リファレンス(引数定義に&)で与えてメソッド内で書き換えちゃう
- 複数の戻り値で悩まない
- コードの可読性が落ちる場合もある
- 戻り値はエラーコード数値にしよう
function upload(&$data, $field) { if (!is_array($data)) return false; if (!isset($data['Estate'][$field])) return false; // 画像ファイルのみ保存 if (!preg_match("/^image\/(p?jpeg|gif|(x-)?png)$/", $data['Estate'][$field]['type'])) return false; // 拡張子の取得 $ext = preg_replace("/.*\./", null, $data['Estate'][$field]['name']); //ファイル名は'物件ID_写真番号.拡張子' $filename = $data['Estate']['id'] . '_' . str_replace('photo', '' ,$field) . '.' . $ext; //ファイルサイズ制限 if($data['Estate'][$field]['size']>350*1024) return -2; // 移動できれば上書き if(move_uploaded_file($data['Estate'][$field]['tmp_name'], WWW_ROOT . 'img' . DS . $filename)){ $data['Estate'][$field . 'b'] = $data['Estate'][$field]['size']; $data['Estate'][$field] = $filename; list($width, $height) = GetImageSize(WWW_ROOT . 'img' . DS . $filename); $data['Estate'][$field . 'w'] = $width; $data['Estate'][$field . 'h'] = $height; } return 1; }
これからcakePHPでメソッドを書くときは
- 戻り値はエラーコード
- エラー処理を一点集中できる
- リファレンス渡しでメソッド内で書き換え
エラーコード(仮)
エラー処理はコントローラーの役目
- 戻り値のエラーコードにより処理の振り分けするので、モデルメソッドにはエラー処理は書かない
- 単純なエラーチェックなら、checkError($errorCode=upload($this->data))
- if(upload($this->data) % 10 == 0){...}else{...}