- 1 名前:nobodyさん [2014/03/01(土) 17:03:24.57 ID:8AJ9GD6E]
- CakePHPは、Ruby on Railsの概念の多くを取り入れた、Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークです
CakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ 質問するときはCakePHPのバージョンを書きましょう ※他フレームワークとの比較等はスレ違いです ■本家 www.cakephp.org/ APIドキュメント api.cakephp.org/ github - cakephp github.com/cakephp the Bakery bakery.cakephp.org/ Issue cakephp.lighthouseapp.com/dashboard CheatSheet[1.2] (PDF) cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf ■日本語公式 cakephp.jp/ フォーラム cakephp.jp/modules/newbb/ cookbook(マニュアル) [2.x] book.cakephp.org/2.0/ja/index.html [1.3] book.cakephp.org/ja ※前スレ kohada.2ch.net/test/read.cgi/php/1378659370/
- 335 名前:nobodyさん [2014/04/29(火) 10:46:44.84 ID:uHAmZpKN]
- 公式復旧したっぽいね。
ちなみにこの脆弱性報告したのは実は俺。
- 336 名前:nobodyさん mailto:sage [2014/04/29(火) 11:06:47.62 ID:???]
- 前から気付いてたので、フォーム改ざん検知使ってなかった。
- 337 名前:nobodyさん mailto:sage [2014/04/29(火) 11:19:04.21 ID:???]
- 英語読めないんだけど、今回は何が問題なの?
- 338 名前:336 mailto:sage [2014/04/29(火) 11:26:35.82 ID:???]
- 家出ちゃったんで確認できないんだけど、今回の修正、別アクションにpostするときでも大丈夫?
- 339 名前:nobodyさん mailto:sage [2014/04/29(火) 11:32:28.27 ID:???]
- >>335
クリタタカシさんありがとうございます
- 340 名前:nobodyさん [2014/04/29(火) 11:35:24.45 ID:uHAmZpKN]
- >>337
SecurityComponent のフォーム改竄防止機能に穴があった。 作りにもよるけど hidden で受け取る id とかを改竄されると、任意のレコードを更新可能。 Model::save() を呼ぶ時に第一引数の $data に更新したいデータだけを渡すか 第三引数の $fieldList を明示的に指定するかしてれば平気。 >>338 別のアクションでも平気。 FormHelper が作る action をセキュリティトークンに入れてるから。 ただ、JavaScript で動的に action を変更している場合はブラックホールに飲まれるかと。
- 341 名前:nobodyさん [2014/04/29(火) 11:38:39.55 ID:uHAmZpKN]
- >>339
どういたしまして
- 342 名前:nobodyさん mailto:sage [2014/04/29(火) 11:44:15.83 ID:???]
- CakeのSecurityComponentっていっぱい穴ありそう
俺が触ってたのは1.3の頃だけど使いたくないと思った
- 343 名前:nobodyさん mailto:sage [2014/04/29(火) 11:46:59.01 ID:???]
- すげえ
- 344 名前:336 mailto:sage [2014/04/29(火) 11:48:47.49 ID:???]
- >>340
ありがとう。これで自作form改竄対策から離れられる。
- 345 名前:nobodyさん mailto:sage [2014/04/29(火) 16:06:25.97 ID:???]
- セキュリティトークンどころかformまで今まで自作してたけど
Cake純正のもの使った方が楽なんかな
- 346 名前:nobodyさん mailto:sage [2014/04/29(火) 17:12:05.84 ID:???]
- おまえなんでCakePHP使ってんの?
- 347 名前:nobodyさん mailto:sage [2014/04/29(火) 19:09:18.76 ID:???]
- 昔はもうちょっと使ってる人多かったんだよ
それでメジャーなのかなぁと思って、手を出した 結構色々これで作っちゃったから、以後ずるずる
- 348 名前:nobodyさん mailto:sage [2014/04/29(火) 20:08:51.90 ID:???]
- 確実に昔よりは使っている人が多いと思うよ
- 349 名前:nobodyさん mailto:sage [2014/04/29(火) 22:33:23.36 ID:???]
- 少なくとも俺の観測範囲では減っているな
- 350 名前:nobodyさん mailto:sage [2014/04/30(水) 08:44:08.14 ID:???]
- ワンオフ型が減り、量産型が増えたから
環境によっては増えたと思い、環境によっては減ったと思う
- 351 名前:nobodyさん mailto:sage [2014/04/30(水) 13:45:58.87 ID:???]
- また、アップデートかw
- 352 名前:nobodyさん mailto:sage [2014/04/30(水) 15:08:14.56 ID:???]
- う、本当だ
- 353 名前:nobodyさん mailto:sage [2014/05/01(木) 00:53:29.70 ID:???]
- なんでもかんでもhappy to announce ってバカみたいだな
- 354 名前:nobodyさん mailto:sage [2014/05/01(木) 02:19:18.51 ID:???]
- まぁ、決まり文句だからしゃーないけど、
文言考えるの面倒くさいんだろうな
- 355 名前:nobodyさん mailto:sage [2014/05/02(金) 00:08:32.26 ID:???]
- >> 340
これ本当?diffをちょっとみただけだけど、post先のURLを改竄されても通ってたのが、通らなくなってよりセキュアだねってだけで、hiddenの改ざん検知とか関係なくない?
- 356 名前:nobodyさん mailto:sage [2014/05/02(金) 00:25:59.26 ID:???]
- 嘘だったらこめん。明日よくみてみる。
- 357 名前:340 mailto:sage [2014/05/02(金) 00:35:18.90 ID:???]
- >>355
本当だよ。 俺が Mark Story 氏に実際の攻撃手順を書いて送ったのが26日。 アップデートが 2.5.0-RC2 に脆弱性のアナウンスなしで反映されたのが27日。 1.3.18 と 2.4.8 にアナウンスありで反映されたのが29日。 かなり深刻な脆弱性だったからこういう日程になったんだけど、 結果的にはミスがあって 2.4.9 が出ることになった。 必ず攻撃が成功するかはサイトの作り次第だけれど、 仕事で使ってるならアップデートした方がいいよ。
- 358 名前:nobodyさん mailto:sage [2014/05/02(金) 00:43:14.81 ID:???]
- >>356
今回の問題は、field改ざん検知のハッシュ値が、別のurlでも使えてしまう問題。 例えばForm->textでfield1,filed2を生成しPOSTされた値を保存するaction1、 Form->textでfield1のみ生成しPOSTされた値を保存するaction2があるとする。 action2でform改ざんを行って手動でfield2を追加しPOSTする場合を考える。 一緒にPOSTされるhash値の不一致でエラーとなるのが本来の仕様。 ただし以前のバージョンだと、form改ざんと併せてhash値をaction1のものを引用すると、 エラーにならずにfiled2を上書きできてしまう。 今回の修正で他のアクションのhash値を引用することができなくなり、本来の仕様を 回避する穴がふさがった。 ちなみにhiddenの改ざんの話は、どういう意図で言ったのか俺もよく関連はわからん。
- 359 名前:nobodyさん mailto:sage [2014/05/02(金) 00:55:27.39 ID:???]
- >>355だけど、すまん。意味分かったかも。リリースノート読飛ばしてコミットログしかみてなかった。actionを改ざんすることでSecurtyComponentが丸ごと迂回されるのでhiddenも改ざんできるのね。いや、ソースみてないんでこれも嘘かもしれないけどw
- 360 名前:340 mailto:sage [2014/05/02(金) 00:58:57.58 ID:???]
- >>359
そういうこと。
- 361 名前:nobodyさん mailto:sage [2014/05/02(金) 15:48:57.61 ID:???]
- パンくずリストを作成するHTMLヘルパーって扱いが難しいよね
階層が増えるとビューに余計なコードを書く機会が増える だからコントローラと独自ヘルパーで何とかしているけど、 手間がかかって仕方がない。
- 362 名前:nobodyさん mailto:sage [2014/05/02(金) 18:24:19.36 ID:???]
- cookbookの例にあるようにTreeビヘイビアを使ってLI リストを表示したいのですが、
ビューで表示するときはヘルパーか何か作らないといけないのでしょうか? 以下のようにしたいのですが、generateTreeListでは無理です。 ・My Categories ・Fun ・Sport ・Surfing
- 363 名前:nobodyさん mailto:sage [2014/05/02(金) 19:10:49.13 ID:???]
- >>362
Treeビヘイビアは不要 Model::find('threaded'); か、 Model::find('all'); したでーたを Hash::nest() で入れ子にする。
- 364 名前:nobodyさん mailto:sage [2014/05/02(金) 20:12:03.57 ID:???]
- >>363
すみません、そういう事ではなくて、ビューでの表示です。 ビューで>>362みたいなリスト化して出力するには、 独自のヘルパーを作らなければいけないのか? 他に方法があれば教えてくださいっと言った質問になります。
- 365 名前:nobodyさん mailto:sage [2014/05/02(金) 20:40:21.50 ID:???]
- 無いよ。
なんでかって言うと、再帰処理したら簡単に表現できるからなぁ。 で、再帰処理するためには入れ子構造に組み直す必要があって、 そのためには >>363 に書いた通りって意味なんだが?
- 366 名前:nobodyさん mailto:sage [2014/05/02(金) 20:42:16.77 ID:???]
- とりあえず $Hoge->find('threaded'); で取得したデータをダンプするなりして
よく考えてみ。
- 367 名前:nobodyさん mailto:sage [2014/05/02(金) 21:05:59.69 ID:???]
- HtmlHelper::nestedList() ではだめなの?
- 368 名前:367 mailto:sage [2014/05/02(金) 21:46:37.32 ID:???]
- ごめん。
HtmlHelper::nestedList() に渡すには TreeBehavior だと自力で整形しないと駄目なんだね。 CakeDC の Utils プラグインにある TreeHelper::generate() なら >>362 の要求を満たせる。
- 369 名前:nobodyさん mailto:sage [2014/05/02(金) 21:48:33.85 ID:???]
- >>367
HtmlHelper::nestedList() に渡すには 単純な入れ子構造にしておかないとだめ。 Model::find('threaded'); で取得したのはそのまま使えないと思う。 いったん Model::find('all'); で取得したデータを Hash::extract() で階層を浅くして、それを Hash::nest(); を使って組み直すなどの手間を掛けないと使えないんじゃないかな。
- 370 名前:nobodyさん mailto:sage [2014/05/02(金) 21:49:26.87 ID:???]
- あ、かぶった。すまん。
TreeHelper なんてあるの知らなかった。 一度見てみるわ。
- 371 名前:nobodyさん mailto:sage [2014/05/02(金) 22:02:34.68 ID:???]
- いえいえ。
実は俺もわりと最近知った。
- 372 名前:362 mailto:sage [2014/05/02(金) 22:29:38.32 ID:???]
- >>365-371
皆さんありがとうございます。素直に自作ヘルパー作って 配列を再帰して表示することにします。
- 373 名前:nobodyさん mailto:sage [2014/05/08(木) 16:22:29.68 ID:???]
- フィールド名がemail以外の時ってemailバリデーション効かなくない?
サンプルコード漁ったらさらっと書いてあるけど動かない…
- 374 名前:nobodyさん mailto:sage [2014/05/08(木) 17:05:11.16 ID:???]
- >>373
$validateの配列の書き方間違ってない?
- 375 名前:373 mailto:sage [2014/05/08(木) 17:40:55.81 ID:???]
- すまんちゃんと効いてた。これsave時にfalse返すんだな。
他のバリデーションと同様にPOST前にポップアップで教えてくれるかと思ってた。
- 376 名前:nobodyさん mailto:sage [2014/05/08(木) 21:14:06.37 ID:???]
- え?そんな機能あったか?
- 377 名前:373 mailto:sage [2014/05/08(木) 22:24:36.95 ID:???]
- POST前ポップアップってこれのことね。
cdn-ak.f.st-hatena.com/images/fotolife/c/cakephper/20130211/20130211223324.png もしかして俺何か勘違いしてるかな…
- 378 名前:nobodyさん mailto:sage [2014/05/08(木) 22:33:24.56 ID:???]
- ブラウザさん
- 379 名前:nobodyさん mailto:sage [2014/05/09(金) 00:28:49.07 ID:???]
- ブラウザが出してるやつかな
- 380 名前:nobodyさん mailto:sage [2014/05/09(金) 00:37:04.59 ID:???]
- >>378-379
マジかwwChromeww本当にありがとうw
- 381 名前:nobodyさん mailto:sage [2014/05/09(金) 04:21:32.04 ID:???]
- HTML5の話題でひとくくりにされてる最近のブラウザの機能やね。
CakePHPもFormHelperがそのための属性を出すようになったりはしてるけど。
- 382 名前:nobodyさん mailto:sage [2014/05/09(金) 10:16:45.79 ID:???]
- クライアントバリデーションに任せっきりになってしまって、
悲惨なサイトが続出するような悪寒。 楽だし負荷軽減できるしで、いいことずくめなんだけど。
- 383 名前:nobodyさん mailto:sage [2014/05/09(金) 10:59:15.63 ID:???]
- そうだね。悪い奴がいないと助かるんだけどね。
- 384 名前:nobodyさん mailto:sage [2014/05/09(金) 11:01:33.24 ID:???]
- Controllerでバリデーションしなくて
Modelに移動するいい傾向になるだけでないかな?
- 385 名前:nobodyさん mailto:sage [2014/05/09(金) 13:43:36.22 ID:???]
- いい傾向ってなんだ?
- 386 名前:nobodyさん mailto:sage [2014/05/09(金) 13:51:32.25 ID:???]
- Fat Modelのことかと思われ
- 387 名前:nobodyさん mailto:sage [2014/05/09(金) 14:56:57.61 ID:???]
- サーバーサイドのバリデーションをしなくていいわけじゃないから、負荷軽減にならなくね?
ちゃんと機能するようにつくれば、無通信でユーザーに間違い見せれて、 使いやすくいフォームにはなると思うけど。
- 388 名前:nobodyさん mailto:sage [2014/05/09(金) 15:49:02.85 ID:???]
- ブラウザで弾いておいたらサーバー側での試行回数は減るだろ。
正常系の負荷はもちろん変わらんけど。
- 389 名前:nobodyさん mailto:sage [2014/05/09(金) 18:26:07.60 ID:???]
- 初心者なんすけど
モデルの使い道がよくわかんないっす。 何から何までコントローラーで処理しちゃってモデルはスッカラカンです。 どなたかモデルの使い道というか便利さを三行で説明しなさい。
- 390 名前:nobodyさん mailto:sage [2014/05/09(金) 18:27:49.70 ID:???]
- >>387
HTTPの勉強をもっとしましょう。
- 391 名前:nobodyさん mailto:sage [2014/05/09(金) 18:46:15.86 ID:???]
- >>389
俺も初心者だからよく分かってないが、 コントローラはモデルに作ったメソッドを呼ぶだけで、 ざっくりした条件分岐のみにとどめておくと後から非常に見やすい気がする。
- 392 名前:nobodyさん mailto:sage [2014/05/09(金) 20:58:13.09 ID:???]
- やりすぎると Very Fat Model になってそれはそれで見難い
バランスというかセンスが問われる部分
- 393 名前:nobodyさん mailto:sage [2014/05/09(金) 21:01:03.07 ID:???]
- >>389
単に好みの問題だから好きにすればいいんじゃないかな モデルはどこからでも使える上にシングルトンっぽくインスタンスが1つだけなので 共通っぽいメソッドやクラスを実装するのにも使える
- 394 名前:nobodyさん mailto:sage [2014/05/09(金) 21:32:58.38 ID:???]
- ああそうか、モデルはなんとなくテーブルに紐付くものみたいに思ってたが
ロジック処理だけのモデルがあっても良いよな
- 395 名前:nobodyさん mailto:sage [2014/05/10(土) 01:47:38.21 ID:???]
- >モデルはなんとなくテーブルに紐付く
これは常にRORと、その派生のCakePHPに対する批判として挙げられてるね。 本来のModelとは全然違うって、激怒しているブログがあちこちにある。 なお、CakePHP3では大幅に改善されるみたいです。
- 396 名前:nobodyさん mailto:sage [2014/05/10(土) 07:20:47.11 ID:???]
- >>388
ああ、まぁそりゃそうか。 といっても、負荷対策が必要な状況では、効果的な対策になるほどは減らないとは思うけど。
- 397 名前:nobodyさん mailto:sage [2014/05/10(土) 10:46:10.10 ID:???]
- Cakeはエンティティを入れるのが遅すぎた
- 398 名前:nobodyさん mailto:sage [2014/05/10(土) 10:53:41.99 ID:???]
- tech.itandi.co.jp/2014/04/cakephp%E3%81%8B%E3%82%89rubyonrails%E3%81%AB%E4%B9%97%E3%82%8A%E6%8F%9B%E3%81%88%E3%81%9F%E4%B8%89%E3%81%A4%E3%81%AE%E7%90%86%E7%94%B1/
1,3は同意できるところだが 2は会社のエンジニアレベルが低いとでも言いたいのか
- 399 名前:nobodyさん mailto:sage [2014/05/10(土) 11:01:56.24 ID:???]
- 周りがCakePHPはRailsのパクリだっつーから使ってみたら
ActiveRecordの超絶劣化っぷりにびびった Railsも似非MVC2になりがちだけどCakeはそれ以前に オブジェクト指向設計に真っ向から喧嘩売ってるレベル
- 400 名前:nobodyさん mailto:sage [2014/05/10(土) 12:53:17.49 ID:???]
- そうやって批判する奴って何も具体的な事言えない奴ばかりだよな
実際どのくらいのスキルある奴なんだろう
- 401 名前:nobodyさん mailto:sage [2014/05/10(土) 14:23:07.62 ID:???]
- Composerは確かにほかの言語のと比べて使いにくい印象はあるけど、
git submoduleしないとパッケージのバージョンを管理できないなんて、 なに言ってるかわからないレベルなんだが。 そんなことあるんかね?
- 402 名前:nobodyさん mailto:sage [2014/05/10(土) 15:56:06.47 ID:???]
- お前らのMVCは間違ってる!ってRails式を散々disるスライドがあったが
ものがちゃんと作れれば別にいいわけで、正しいからどうだってのがよくわからん
- 403 名前:nobodyさん mailto:sage [2014/05/10(土) 17:17:38.04 ID:???]
- >>400
DBから取ってきたデータがarrayになってる部分だと思われ Cake3でようやくオブジェクトになるようだが
- 404 名前:nobodyさん mailto:sage [2014/05/10(土) 17:24:14.35 ID:???]
- それよく聞くけど、オブジェクトの方が便利なん?
書き方が変わるだけのような気がするけど
- 405 名前:nobodyさん mailto:sage [2014/05/10(土) 17:30:12.91 ID:???]
- Cake3を少し試してみたがEntity使えるだけでも結構変わるね
特にViewがスッキリするのはもちろんだけど今までHelperやControllerに溢れがちだったロジックもEntityクラスに置けるのが結構あるしテストも楽 array+Hash・Setに比べたら開発効率やコードの読みやすさは段違いに上がる でも2から3への移行は大変そう
- 406 名前:nobodyさん mailto:sage [2014/05/10(土) 17:30:20.29 ID:???]
- >>404
Modelのメソッドはすべてstaticです、なんて言ったらJavaやRubyなどのオブジェクト指向に 慣れ親しんだ人たちから見れば、なにそのふざけた設計は?とキレられるレベル
- 407 名前:nobodyさん mailto:sage [2014/05/10(土) 17:37:51.74 ID:???]
- オブジェクトじゃないとActiveRecordパターンとは言えないからなぁ
- 408 名前:nobodyさん mailto:sage [2014/05/10(土) 20:22:57.11 ID:???]
- arrayになった理由はCake1がPHP4をサポートしていたからだろうな
さすがにPHP4でオブジェクト指向にはできなかった、と
- 409 名前:nobodyさん mailto:sage [2014/05/10(土) 23:47:42.75 ID:???]
- PHP4懐かしいな
修飾子やら例外やらオートローダーが無いとか 参照渡ししないとクローンになるとかいろいろあるが ActiveRecordの足かせになりそうな制約はないな
- 410 名前:nobodyさん mailto:sage [2014/05/11(日) 13:33:38.34 ID:???]
- 最近、嫌static厨が多くて困る
- 411 名前:nobodyさん mailto:sage [2014/05/11(日) 13:37:57.50 ID:???]
- static に出来るものはそのほうが良いのにね。
見極めができないんかもな。
- 412 名前:nobodyさん mailto:sage [2014/05/11(日) 15:03:25.90 ID:???]
- 「全部static」はさすがに嫌われて当然
- 413 名前:nobodyさん mailto:sage [2014/05/11(日) 15:07:39.63 ID:???]
- さすがにそんなヤツはおらんやろ
- 414 名前:nobodyさん mailto:sage [2014/05/11(日) 15:08:05.37 ID:???]
- staticとかpublicとか分別するとどんなメリットがあるの?もうおっさんだから、今だにわからない。
function hoge を _hogeにする時はあるけど。 どなたかご親切な人 わかりやすく教えてくれませんか?
- 415 名前:nobodyさん mailto:sage [2014/05/11(日) 15:18:12.11 ID:???]
- >>413
CakeのModelはまさに「全部static」なんだが…
- 416 名前:nobodyさん mailto:sage [2014/05/11(日) 15:37:28.00 ID:???]
- >>415
え どこを言ってるんだろう
- 417 名前:nobodyさん mailto:sage [2014/05/11(日) 15:40:10.91 ID:???]
- ん、Model.phpを「static」で検索してみたけどひとつもヒットしないよ
調べたverは2.4.6 cake3ではstaticになっているってこと?言葉の使い方がヘンなだけ?
- 418 名前:nobodyさん mailto:sage [2014/05/11(日) 18:47:27.75 ID:???]
- >>398
> つまり結局はタイミングの問題でしかなくて、言語の優劣がどうとか、フレームワークの優劣がどうとか、といった観点は殆ど無く選びました。 つまり結局は、他に行ったから、とりあえず元鞘を叩いておくかっていう3流エンジニアの日常か
- 419 名前:nobodyさん mailto:sage [2014/05/12(月) 01:19:34.02 ID:???]
- >>414
それマジで質問してるならこんなところにいないで 基本的なオブジェクト指向の勉強したほうが良いよ。
- 420 名前:nobodyさん mailto:sage [2014/05/12(月) 01:30:03.56 ID:???]
- >>414
static のメリットをひとことで言うと、状態を持たない(状態が変化しない) 振る舞いを提供することにより、インスタンス化した場合に本来であれば考慮するべき 状態変化の副作用から開放されることではないかと。 まず間違いなく、テストは超簡単になる。 一方、アクセス修飾子のメリットはひとことで言うと 安全な設計が簡単にできるってことではないかと。 その点 CakePHP はメンバー変数の修飾子に public を使いまくってて恐ろしいほどではある。
- 421 名前:nobodyさん mailto:sage [2014/05/12(月) 01:35:05.49 ID:???]
- 俺もstaticって使いどころがいまいちわからん。
特にphpはランタイムが短すぎて、1回しか使わないオブジェクトが多く、 staticを変に意識すると、むしろなんでもstaticでいいんじゃないかと思えてきてしまってこわい。 逆にstaticにしないと困るような事も、あんまないから、よくわからないままで結局staticは使わないという >>414 たとえばモデルに、とある機能を作ってたら100行を超える長いメソッドになってしまい、一部を切り出したけど、 コントローラーから直接切り出したメソッドを呼ばれるのは想定外って場合に、 protectedかprivateにしておけば、呼ばれることがない。 protectedとprivateは、コントローラーやモデルを触ってるくらいなら、 正直使い分けが活きることがほとんどない気がする。 強いて例を出すと、AppController内の処理で切り出したメソッドが、ほかのコントローラーから呼ばれるのが想定外なら、 privateにしておくと呼ばれなくなる。
- 422 名前:nobodyさん mailto:sage [2014/05/12(月) 01:45:18.99 ID:???]
- >>421
>なんでもstaticでいいんじゃないかと だけどオブジェクトの状態に依存しないメソッドなんて そうそう作る機会はないと思うんだが、 もし可能なら作って問題無いと思うんだけど? というか、むしろ作るべき。
- 423 名前:nobodyさん mailto:sage [2014/05/12(月) 02:01:04.78 ID:???]
- >>422
もちろん、思えてきてしまうだけで、よく考えるとダメな事がほとんどなんだけどね。 クラスやメソッドを書き始めるときに、まずこれはstaticにできるか? と考えると、問題ないような気がしてしまうんよ。 そういえば、かなり昔だけどCakePHPを使い始める前のオレオレフレームワークでは、 データベースアクセスするとこ全部staticメソッドにしちゃってたなぁ。 いわゆるCRUDに対応したメソッドがあるだけだったし、データはオブジェクトじゃなくて連想配列だったから、 インスタンスいらないなぁと思って。 あとバリデーターもstaticメソッドだったなぁ。 バリデーションはコントローラーでやってたから、CakePHPでいうバリデーションルールの配列みたいなのは、 コントローラーに書いて、AppController的な親にvalidateメソッドを作ってた。
- 424 名前:nobodyさん mailto:sage [2014/05/12(月) 02:19:15.31 ID:???]
- このスレにはガチのstaticおじさんが居る気がする
- 425 名前:nobodyさん mailto:sage [2014/05/12(月) 04:23:13.01 ID:???]
- cakeってfindがstaticでないのが不思議でしょうがない
- 426 名前:nobodyさん mailto:sage [2014/05/12(月) 10:30:47.47 ID:???]
- >CakePHPのModelはまさに「全部static」
言いたいことは何となく分かる 他のフレームワークだとModelのstaticメソッドがテーブル(Repository)の操作 インスタンスメソッドがレコード(Entity)ごとの操作に対応してるのが多い CakePHP2まではEntityがないので そういう他のFWから入ってModelのインスタンスはEntityだろと決めつけてかかると ModelにRepositoryの要素しかなくてfindもインスタンスメソッドという点に違和感をおぼえる CakePHP3だとEntityクラスとTableクラスがそれぞれ用意されるからギャップが減る クラスが分かれるからfindがインスタンスメソッドなのは変わらないけど DDDを意識した設計で個人的には好感触 というか他のFWのstaticなfindも RepositoryないしQueryに相当するオブジェクトのインスタンスメソッドに処理放り投げてるだけだろうし ただ単に使い勝手とどこまでFWが暗黙的に処理するかってだけの問題な気がする
- 427 名前:nobodyさん mailto:sage [2014/05/12(月) 10:33:48.09 ID:???]
- >>425
状態依存しないメソッドなら問題ないけど CakePHP の Model のオブジェクトって状態を持ってるから無理だよ。 たとえば同じPostクラスのオブジェクトが2個あったとして $Post1->id = 1; $Post2->id = 2; ってした場合にメソッドが static なら破綻する。
- 428 名前:nobodyさん mailto:sage [2014/05/12(月) 10:36:05.68 ID:???]
- >>426
なるほど
- 429 名前:nobodyさん mailto:sage [2014/05/12(月) 10:47:42.76 ID:???]
- >>427
findと何か関係あるのそれ?
- 430 名前:nobodyさん mailto:sage [2014/05/12(月) 11:14:24.54 ID:???]
- cakeってTable Data Gatewayパターンだと考えれば普通なんだけどな
- 431 名前:427 mailto:sage [2014/05/12(月) 11:59:05.87 ID:???]
- >>429
例えを簡単にするつもりだったが $id は関係無かったか。 要するに find が参照するプロパティのうち 状態依存のものが沢山あるってこと。 例えば $Post1->primaryKey = sid; $Post2->primaryKey = cid; とか
- 432 名前:nobodyさん [2014/05/12(月) 12:02:34.37 ID:U9jrOtar]
- TreeBehaviorsについて質問なのですが、
moveUpやmoveDownがfalseを返してきてまったく動作しません。 発行したSQLを見ると、SELECT文ばっかりでUPDATEをやっていないように見えます。 どうやったら動かすことができるのでしょうか。
- 433 名前:nobodyさん mailto:sage [2014/05/12(月) 12:18:35.60 ID:???]
- >>432
スキーマ、レコード、moveUp moveDown のコード、クエリ この辺を貼り付けてみて
- 434 名前:nobodyさん mailto:sage [2014/05/12(月) 12:38:18.89 ID:???]
- CakePHPって3でActiveRecordを採用するんだったよな
- 435 名前:nobodyさん mailto:sage [2014/05/12(月) 13:15:30.27 ID:???]
- >>433
DBやレコードはお客のやつなんでまずいんです。ごめんなさい。 スキーマにはちゃんと parent_id, lft, righ の定義はしてあって、moveUp, moveDown以外のツリー動作は 問題なく動作しています。 public function moveup($id = null) { $this->Category->id = $id; $res = $this->Category->moveUp($this->Category->id, abs(1)) ; debug($res); }
|

|