主観だからね。
Cookbookすごく分かりにくい。章の構成はそのまま目次というか、左側のメニューになる。どのフレームワークでも同じだと思うけど、この構成が分かりにくい。探したい事を探しにくい。 「入門」の次が「ブログチュートリアル」「ブログチュートリアル - レイヤーの追加」と続いている。 チュートリアルは必要だけど、入門からの流れで順を追っていく読み物的な構成よりも、別個で読んでそこだけちゃんと分かる構成のほうが、フレームワークには必要だと思う。 あと意味がわからないのが「チュートリアルと例」内にも「ブログチュートリアル」「ブログチュートリアル - レイヤーの追加」がある。ダブってる。
http://book.cakephp.org/2.0/ja/models/saving-your-data.html#hasone-hasmany-belongsto 関連データを保存する(hasOne, hasMany, belongsTo)
の項目なのに
上記のような名前の付け方は、hasManyアソシエーションの場合です。hasOneの場合は、ModelName.fieldNameという名前を付けます。
hasManyの場合の例が載っている。 ちなみに、次の項目は「hasManyを保存する」なのに・・・
この辺からも、文章的に書いている感じがする。 フレームワークのドキュメントとしては、文章よりも、項目毎にサンプルと説明が同じフォーマットで淡々と載ってるほうがいい。
- hasOne
- FormHelperの書き方
- サブミットされるデータ
- save() or saveAll()のサンプル
- 得られる戻り値
- hasMany
- FormHelperの書き方
- サブミットされるデータ
- save() or saveAll()のサンプル
- 得られる戻り値
- belongsTo
- FormHelperの書き方
- サブミットされるデータ
- save() or saveAll()のサンプル
- 得られる戻り値
- HABTM
- FormHelperの書き方
- サブミットされるデータ
- save() or saveAll()のサンプル
- 得られる戻り値
もう文章の流れとかどうでもいいから、これが漏れなく書いてあるだけでどんなに分かりやすいか。 逆に文章でだらだら書かれると、重要な事は見落とすし、後であの辺に書いてあったはずと思って見直そうとしても、なかなかその箇所を見つけられない。
文章は多いくせに、Model::save()の特殊な戻り値とその理由は背景とかは書いてない。 Model::save()は、成功時に$this->dataを返す。どういう状況で起こりえるか良く分からないが、$this->dataがempty()な時、trueを返す。失敗するとfalseを返す。$this->dataなんて返さずtrue/falseだけ返すなら、明確で理解しやすいのに、$this->dataなんて返すから、$this->dataとtrueはどういう違いあって、trueが帰ってきたときって成功って判断していいのか、この戻り値をどう扱えば適切なのか、いろんな疑問が出てきてしまう。でも、戻り値についてはないも書いてない。CookbookのほかのドキュメントはAPIリファレンスだけど、DocBlockから生成だから、実質ソースコード。Cookbookに書いてないからソースコード読んで察するしかない。
CakePHPって結講日本語の情報量が多いイメージがあったけど、クラスやそのメソッドとかの解説をまとめたページ、いわゆる関数リファレンスみたいなのがないから苦労してる
日本語のCookbookで探してなく、英語のCookbookにも書いてなくて、CakePHP辞典を読んでみたら、その機能の章の冒頭に書いてあったりする。CakePHP辞典は、書いてあってほしい事を書いてあることが多いと思う。ただ、メソッド単位になってくると、一言しか書いてなかったりするので、完璧じゃない。
save()は$this->dataを返すことがあるので、データを書き込む > そのデータを受け取れる。 saveAll()系は書けたか書けなかったかのtrue or falseで、保存したデータが何かは別途なんとかする。 この違いがCookbookに分かりやすく書いてないので、慣れてない人はsave()と同じ感覚でsaveAll()使って、はまる。 なにか理由があってこうなっているのかもしれないけど、理由が説明されないので、はまるといやになる。
前述のCookbookの不満によるところも大きいけど、割と学習コストが高いと思う。CakePHP 1.3系を使ったことがあって1年ちょいブランクあって2系を使い出して、かなりはまる。うまく説明できないけど、暗黙的な動きが多いのかなって思っている。 前述の通りソースコード読まないと分からないこと多いし。
特殊な例では、JsonViewを使ったら、エラー発生時{code: 500}と、HTTPステータスコード付きでJSONでエラーなレスポンスしてたから、なるほどと思っていたら、デバッグレベルを0にしたらcodeというキーがJSONから消えた。こういうの、1回はまらないと分からない。
Bakeしたファイルに書いていくので、テーブル変更からのBakeし直しをすると、自分のコードを消してしまう。かといって、最初だけBakeするのにアソシエーションの変更とかは自分で書かないといけないのもめんどくさい。アソシエーション部分だけBakeするとか、せめてファイル書き出さなくても、アソシエーション部分のコードを出力する機能が欲しい。もしくは、usersテーブルに対しAppUserというモデル名で生成してくれれば、継承がつかえたんだけど・・・
Viewも生成してくれるのは便利だけど、テーブルに変更あるとBakeし直さないといけないケースがあり、既にコードが入ってたりするととても面倒になる。
ある程度テーブルが固まってからなら、楽に開発出来ると思うけど、テーブル設計適当で、作りながらというのは、CakePHPには合わないと思う。
思いついたら追記する