2011年8月3日水曜日

CakePHP 画像アップロード

画像のアップロード調べていて、下記ImageBehaviorを知ったので使ってみる。
[CakePHP] 画像のアップロード&リサイズを簡単にできる ImageBehavior | Sun Limited Mt.

使い方は参照元にあるので省略するが、簡単に使えて良い感じ。
ただ、findしたときに関連テーブルのimageまでは処理してくれない。
で、また調べてたら、下記記事でbelongsToに対して処理を足してたので参考にみる。
ちなみに、今回処理させたい関連はhasMany。
cakePHPのimageBehaviorについて – CEED

afterFindに処理を加えてるよう。

今回はhasManyを処理したいので、relatedModelsにhasManyもマージする。
$relatedModels = array_merge($model->belongsTo, $model->hasMany);

これだけだと動かなかった。。。
hasManyなわけで複数のときもあるので、127-130行までの処理を複数の場合を考慮する。
                        if (isset($results[$i][$relatedModelName][0])) {
                            $j=0;
                            while ( isset( $results[$i][$relatedModelName][$j] ) && is_array( $results[$i][$relatedModelName][$j] ) )  {
                                if (isset($results[$i][$relatedModelName][$j][$field]) && ($results[$i][$relatedModelName][$j][$field]!='')) {
                                    $value=$results[$i][$relatedModelName][$j][$field];
                                    $results[$i][$relatedModelName][$j][$field]=$this->__getParams($relatedModel, $field, $value,$fieldParams, $results[$i][$relatedModelName][$j]);
                                }
                                $j++;
                            }
                        } else {
                            if (isset($results[$i][$relatedModelName][$field]) && ($results[$i][$relatedModelName][$field]!='')) {
                                $value=$results[$i][$relatedModelName][$field];
                                $results[$i][$relatedModelName][$field]=$this->__getParams($relatedModel, $field, $value,$fieldParams, $results[$i][$relatedModelName]);
                            }
                        }
145-148行のところも同様に。
                        if (isset($results[$relatedModelName][0])) {
                            $j=0;
                            while ( isset( $results[$relatedModelName][$j] ) && is_array( $results[$relatedModelName][$j] ) )  {
                                if (isset($results[$relatedModelName][$j][$field]) && ($results[$relatedModelName][$j][$field]!='')) {
                                    $value=$results[$relatedModelName][$j][$field];
                                    $results[$relatedModelName][$j][$field]=$this->__getParams($relatedModel, $field, $value,$fieldParams, $results[$relatedModelName][$j]);
                                }
                                $j++;
                            }
                        } else {
                            if (isset($results[$relatedModelName][$field]) && ($results[$relatedModelName][$field]!='')) {
                                $value=$results[$relatedModelName][$field];
                                $results[$relatedModelName][$field]=$this->__getParams($relatedModel, $field, $value,$fieldParams, $results[$relatedModelName]);
                            }
                        }

これでhasManyの関連のテーブルのimageが処理されるようになりましたっと。