トップページ⇒php
981コメント296KB

【PHP】フレームワーク CakePHP 17ホール目【v2.4】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2014/03/01(土) 17:03:24.57ID:8AJ9GD6E
CakePHPは、Ruby on Railsの概念の多くを取り入れた、Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークです
CakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう

※他フレームワークとの比較等はスレ違いです

■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
github - cakephp
http://github.com/cakephp
the Bakery
http://bakery.cakephp.org/
Issue
http://cakephp.lighthouseapp.com/dashboard
CheatSheet[1.2] (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf

■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
[2.x] http://book.cakephp.org/2.0/ja/index.html
[1.3] http://book.cakephp.org/ja

※前スレ
http://kohada.2ch.net/test/read.cgi/php/1378659370/
0303nobodyさん2014/04/20(日) 09:30:13.88ID:???
PHPは日本でも使われてるんだが
やっぱり、Ruby、Perlの使われ方度合いに比べると
全然使われてないことになる
0304nobodyさん2014/04/20(日) 09:57:55.62ID:???
ruby使ったことないけど、phpとさほど変わらんのでしょ?
最終的には好みの問題みたい。
0305nobodyさん2014/04/20(日) 10:42:30.47ID:???
どこが変わらないって言ってるかはわからんが

RailsとCakeの今が、いい意味でも悪い意味でもRubyとPHPの差の一つ
0306nobodyさん2014/04/20(日) 11:18:10.27ID:???
利用者が増えるに従ってアンチが増加するのは何でも一緒。
FWは型を提供するものだから、その型が気に入らなければ別のを使うしか無い。
無ければ作るか自分を合わせるしか無い。

明確な問題点があるんだったら、コミュニティに参加して改善を提案してみたことはあるのかな?
他を調査してより良い解決策があるんなら、具体的にその利点をここの読者に教えてあげようとしないのかな?

まぁ、自分一人で決めることも出来ないから、愚痴を言いたくなる気持ちもわかる。
0307nobodyさん2014/04/20(日) 11:24:53.22ID:???
>>303
え?
Perlは人口減って、昔から使ってた一部の会社が使ってるばかりだし、
Rubyは最近ようやく増えてきたかなって程度だろ。
0308nobodyさん2014/04/20(日) 11:30:03.25ID:???
>>307
海外での人気に比べるとな
0309nobodyさん2014/04/20(日) 12:34:02.33ID:???
正直サーバーサイドはFWが何でもいいわ
0310nobodyさん2014/04/20(日) 12:38:12.89ID:???
ガラパゴス言語
Perl,Ruby

ガラパゴスFW
CakePHP

って言いたいのか

実際そうだけどな
0311nobodyさん2014/04/20(日) 14:23:15.37ID:???
世界的なシェアだと最近はLaravelが一番なんだっけ?
(シェアじゃなくてGitHubの人気だったか?)
あと、YiiとかCIもCakePHPよりは上なんだよな確か。

でもオープンソースだからといってもシェアに関してはプロプライエタリと同じで、
必ずしも良い物が普及するとは限らないよな。

たとえばWordPressみたいに、酷いシロモノでも
マーケティングが勝利するオープンソースもあるし。
0312nobodyさん2014/04/20(日) 15:51:49.84ID:???
rubyはネットでは見るけど、現場では全然見ない
0313nobodyさん2014/04/20(日) 17:08:13.64ID:???
Yiiは共産圏で人気らしいね
0314nobodyさん2014/04/20(日) 18:32:52.08ID:???
>>312
織田裕二みたいですね
0315nobodyさん2014/04/21(月) 09:50:09.63ID:???
Rubyって単に取り上げてるブログが目につく(ブクマなどで)だけで
多いと錯覚しているだけだろ?

そら、PHPみたいに成熟された言語より
Rubyのような比較的新しくてそれほど一般化していない
技術のほうが注目を浴びるに決まってるわw
それと混同して「PHPは人気なくなった」とか目論見が甘すぎ
0316nobodyさん2014/04/21(月) 15:57:26.42ID:???
RubyもPHPと同時期に出来た言語なんだが
0317nobodyさん2014/04/21(月) 18:53:01.40ID:???
ScalaとGoが注目浴びてるな
0318nobodyさん2014/04/25(金) 10:49:57.10ID:???
リファラをコントローラーとアクションに分解する機能ってありませんよね?
$this->referer()だと普通にリファラが表示されるだkです。
0319nobodyさん2014/04/25(金) 13:39:29.24ID:s6GwqSqm
CakeRequest にそれっぽい機能あった気がする
0320nobodyさん2014/04/25(金) 15:10:13.57ID:???
Routerクラスがそれを担当している気がする

何を作ろうとしてるのか知らないけど、
リファラを使って何かをする機能ってだけで、ちょっと不穏な空気を感じてしまう。
03213182014/04/25(金) 16:51:30.47ID:???
>>320
管理画面なのですが、例えば削除(delete)する場所って
一覧(index)と詳細(detail)で出来るとします。
削除した後に全部一覧に戻せば良いだけかもしれませんが、
改ページした後に削除した場合、リファラで前の画面に戻したいのです。

つまり、要件として
・一覧から削除 → 前のページにリダイレクト
・詳細から削除 → 一覧にリダイレクト

となります。これをするために、リファラを分析して
「どこのページからのアクセスか?」がわかれば簡単と思い、質問しました。
0322nobodyさん2014/04/25(金) 17:39:22.10ID:???
削除なら GET じゃなくて FormHelper::postLink() を使うのが今の標準だと思うんだけど、
その場合なら引数にリダイレクト変数をセットできる。

コントローラ側で汎用的な処理をしたいんならやっぱりリファラでやったほうが良いのかも。

URLの解析は >>320 の言ってる通りRouter::parse()メソッドがある。
ただ、リファラをそのまま渡してもダメで、
アプリケーションのルートからのパスにする必要があったかもしれない。
0323nobodyさん2014/04/27(日) 13:54:25.75ID:???
海外の求人ちょっと見たらRailsが多くて驚いた
PHPばっかりの日本はガラパゴスなんかな
0324nobodyさん2014/04/27(日) 15:43:07.45ID:???
rails多いといっても
phpのほうがrubyよりは一応多いでしょ

rubyの9割以上の求人がrailsってのがすごいよな

railsだとpostgresql求人増えてるし
cakephp+mysqlのスペックだとガラパゴスになりそうだな
0325nobodyさん2014/04/27(日) 16:13:12.62ID:???
せやかて駆動
0326nobodyさん2014/04/27(日) 17:19:21.88ID:???
ん? Cakeスレかここ。 phpの安直さは最高! fuelphp使ってる。 確かにCakeはオワコンだな。
0327nobodyさん2014/04/27(日) 18:49:35.25ID:???
どこまでいっても、所詮Railsのパチもんだしな。
Djangoとはえらい違いだ。
0328nobodyさん2014/04/27(日) 20:59:13.46ID:???
>>326
fuelphpって既に終わってるやん
0329nobodyさん2014/04/27(日) 21:32:10.25ID:???
fuelは結局始まらなかったなぁ
0330nobodyさん2014/04/27(日) 21:46:02.47ID:???
>>324
herokuのおかげかrailsはPostgreSQL対応が盛んだからな
0331nobodyさん2014/04/27(日) 23:09:38.66ID:9dL9KMPJ
少し変化あったけど
結局またMySQLだよな
0332nobodyさん2014/04/28(月) 00:46:19.25ID:???
日本は逆にRailsかCakeのどっちかになってる気がする
ま、CakeもRailsのパクリなんであれだが
0333nobodyさん2014/04/29(火) 10:06:00.47ID:uHAmZpKN
脆弱性の緊急パッチが出てるんで
業務で使っている人は早めに当てておけよー。
1.3.x と 2.4.x 両方。
0334nobodyさん2014/04/29(火) 10:12:45.43ID:???
まじか、と思って見に行ったら
公式からしてやられてしまったのか?w
http://cakephp.org/
502 Bad Gateway
0335nobodyさん2014/04/29(火) 10:46:44.84ID:uHAmZpKN
公式復旧したっぽいね。
ちなみにこの脆弱性報告したのは実は俺。
0336nobodyさん2014/04/29(火) 11:06:47.62ID:???
前から気付いてたので、フォーム改ざん検知使ってなかった。
0337nobodyさん2014/04/29(火) 11:19:04.21ID:???
英語読めないんだけど、今回は何が問題なの?
03383362014/04/29(火) 11:26:35.82ID:???
家出ちゃったんで確認できないんだけど、今回の修正、別アクションにpostするときでも大丈夫?
0339nobodyさん2014/04/29(火) 11:32:28.27ID:???
>>335
クリタタカシさんありがとうございます
0340nobodyさん2014/04/29(火) 11:35:24.45ID:uHAmZpKN
>>337
SecurityComponent のフォーム改竄防止機能に穴があった。
作りにもよるけど hidden で受け取る id とかを改竄されると、任意のレコードを更新可能。

Model::save() を呼ぶ時に第一引数の $data に更新したいデータだけを渡すか
第三引数の $fieldList を明示的に指定するかしてれば平気。

>>338
別のアクションでも平気。
FormHelper が作る action をセキュリティトークンに入れてるから。
ただ、JavaScript で動的に action を変更している場合はブラックホールに飲まれるかと。
0341nobodyさん2014/04/29(火) 11:38:39.55ID:uHAmZpKN
>>339
どういたしまして
0342nobodyさん2014/04/29(火) 11:44:15.83ID:???
CakeのSecurityComponentっていっぱい穴ありそう
俺が触ってたのは1.3の頃だけど使いたくないと思った
0343nobodyさん2014/04/29(火) 11:46:59.01ID:???
すげえ
03443362014/04/29(火) 11:48:47.49ID:???
>>340
ありがとう。これで自作form改竄対策から離れられる。
0345nobodyさん2014/04/29(火) 16:06:25.97ID:???
セキュリティトークンどころかformまで今まで自作してたけど
Cake純正のもの使った方が楽なんかな
0346nobodyさん2014/04/29(火) 17:12:05.84ID:???
おまえなんでCakePHP使ってんの?
0347nobodyさん2014/04/29(火) 19:09:18.76ID:???
昔はもうちょっと使ってる人多かったんだよ
それでメジャーなのかなぁと思って、手を出した
結構色々これで作っちゃったから、以後ずるずる
0348nobodyさん2014/04/29(火) 20:08:51.90ID:???
確実に昔よりは使っている人が多いと思うよ
0349nobodyさん2014/04/29(火) 22:33:23.36ID:???
少なくとも俺の観測範囲では減っているな
0350nobodyさん2014/04/30(水) 08:44:08.14ID:???
ワンオフ型が減り、量産型が増えたから
環境によっては増えたと思い、環境によっては減ったと思う
0351nobodyさん2014/04/30(水) 13:45:58.87ID:???
また、アップデートかw
0352nobodyさん2014/04/30(水) 15:08:14.56ID:???
う、本当だ
0353nobodyさん2014/05/01(木) 00:53:29.70ID:???
なんでもかんでもhappy to announce ってバカみたいだな
0354nobodyさん2014/05/01(木) 02:19:18.51ID:???
まぁ、決まり文句だからしゃーないけど、
文言考えるの面倒くさいんだろうな
0355nobodyさん2014/05/02(金) 00:08:32.26ID:???
>> 340

これ本当?diffをちょっとみただけだけど、post先のURLを改竄されても通ってたのが、通らなくなってよりセキュアだねってだけで、hiddenの改ざん検知とか関係なくない?
0356nobodyさん2014/05/02(金) 00:25:59.26ID:???
嘘だったらこめん。明日よくみてみる。
03573402014/05/02(金) 00:35:18.90ID:???
>>355
本当だよ。
俺が Mark Story 氏に実際の攻撃手順を書いて送ったのが26日。
アップデートが 2.5.0-RC2 に脆弱性のアナウンスなしで反映されたのが27日。
1.3.18 と 2.4.8 にアナウンスありで反映されたのが29日。
かなり深刻な脆弱性だったからこういう日程になったんだけど、
結果的にはミスがあって 2.4.9 が出ることになった。

必ず攻撃が成功するかはサイトの作り次第だけれど、
仕事で使ってるならアップデートした方がいいよ。
0358nobodyさん2014/05/02(金) 00:43:14.81ID:???
>>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の改ざんの話は、どういう意図で言ったのか俺もよく関連はわからん。
0359nobodyさん2014/05/02(金) 00:55:27.39ID:???
>>355だけど、すまん。意味分かったかも。リリースノート読飛ばしてコミットログしかみてなかった。actionを改ざんすることでSecurtyComponentが丸ごと迂回されるのでhiddenも改ざんできるのね。いや、ソースみてないんでこれも嘘かもしれないけどw
03603402014/05/02(金) 00:58:57.58ID:???
>>359
そういうこと。
0361nobodyさん2014/05/02(金) 15:48:57.61ID:???
パンくずリストを作成するHTMLヘルパーって扱いが難しいよね
階層が増えるとビューに余計なコードを書く機会が増える
だからコントローラと独自ヘルパーで何とかしているけど、
手間がかかって仕方がない。
0362nobodyさん2014/05/02(金) 18:24:19.36ID:???
cookbookの例にあるようにTreeビヘイビアを使ってLI リストを表示したいのですが、
ビューで表示するときはヘルパーか何か作らないといけないのでしょうか?
以下のようにしたいのですが、generateTreeListでは無理です。

・My Categories
 ・Fun
  ・Sport
   ・Surfing
0363nobodyさん2014/05/02(金) 19:10:49.13ID:???
>>362
Treeビヘイビアは不要

Model::find('threaded');
か、
Model::find('all');
したでーたを Hash::nest() で入れ子にする。
0364nobodyさん2014/05/02(金) 20:12:03.57ID:???
>>363
すみません、そういう事ではなくて、ビューでの表示です。
ビューで>>362みたいなリスト化して出力するには、
独自のヘルパーを作らなければいけないのか?
他に方法があれば教えてくださいっと言った質問になります。
0365nobodyさん2014/05/02(金) 20:40:21.50ID:???
無いよ。

なんでかって言うと、再帰処理したら簡単に表現できるからなぁ。

で、再帰処理するためには入れ子構造に組み直す必要があって、
そのためには >>363 に書いた通りって意味なんだが?
0366nobodyさん2014/05/02(金) 20:42:16.77ID:???
とりあえず $Hoge->find('threaded'); で取得したデータをダンプするなりして
よく考えてみ。
0367nobodyさん2014/05/02(金) 21:05:59.69ID:???
HtmlHelper::nestedList() ではだめなの?
03683672014/05/02(金) 21:46:37.32ID:???
ごめん。
HtmlHelper::nestedList() に渡すには TreeBehavior だと自力で整形しないと駄目なんだね。
CakeDC の Utils プラグインにある TreeHelper::generate() なら >>362 の要求を満たせる。
0369nobodyさん2014/05/02(金) 21:48:33.85ID:???
>>367
HtmlHelper::nestedList() に渡すには
単純な入れ子構造にしておかないとだめ。

Model::find('threaded'); で取得したのはそのまま使えないと思う。

いったん Model::find('all'); で取得したデータを
Hash::extract() で階層を浅くして、それを
Hash::nest(); を使って組み直すなどの手間を掛けないと使えないんじゃないかな。
0370nobodyさん2014/05/02(金) 21:49:26.87ID:???
あ、かぶった。すまん。

TreeHelper なんてあるの知らなかった。
一度見てみるわ。
0371nobodyさん2014/05/02(金) 22:02:34.68ID:???
いえいえ。
実は俺もわりと最近知った。
03723622014/05/02(金) 22:29:38.32ID:???
>>365-371
皆さんありがとうございます。素直に自作ヘルパー作って
配列を再帰して表示することにします。
0373nobodyさん2014/05/08(木) 16:22:29.68ID:???
フィールド名がemail以外の時ってemailバリデーション効かなくない?
サンプルコード漁ったらさらっと書いてあるけど動かない…
0374nobodyさん2014/05/08(木) 17:05:11.16ID:???
>>373
$validateの配列の書き方間違ってない?
03753732014/05/08(木) 17:40:55.81ID:???
すまんちゃんと効いてた。これsave時にfalse返すんだな。
他のバリデーションと同様にPOST前にポップアップで教えてくれるかと思ってた。
0376nobodyさん2014/05/08(木) 21:14:06.37ID:???
え?そんな機能あったか?
03773732014/05/08(木) 22:24:36.95ID:???
POST前ポップアップってこれのことね。
http://cdn-ak.f.st-hatena.com/images/fotolife/c/cakephper/20130211/20130211223324.png
もしかして俺何か勘違いしてるかな…
0378nobodyさん2014/05/08(木) 22:33:24.56ID:???
ブラウザさん
0379nobodyさん2014/05/09(金) 00:28:49.07ID:???
ブラウザが出してるやつかな
0380nobodyさん2014/05/09(金) 00:37:04.59ID:???
>>378-379
マジかwwChromeww本当にありがとうw
0381nobodyさん2014/05/09(金) 04:21:32.04ID:???
HTML5の話題でひとくくりにされてる最近のブラウザの機能やね。
CakePHPもFormHelperがそのための属性を出すようになったりはしてるけど。
0382nobodyさん2014/05/09(金) 10:16:45.79ID:???
クライアントバリデーションに任せっきりになってしまって、
悲惨なサイトが続出するような悪寒。

楽だし負荷軽減できるしで、いいことずくめなんだけど。
0383nobodyさん2014/05/09(金) 10:59:15.63ID:???
そうだね。悪い奴がいないと助かるんだけどね。
0384nobodyさん2014/05/09(金) 11:01:33.24ID:???
Controllerでバリデーションしなくて
Modelに移動するいい傾向になるだけでないかな?
0385nobodyさん2014/05/09(金) 13:43:36.22ID:???
いい傾向ってなんだ?
0386nobodyさん2014/05/09(金) 13:51:32.25ID:???
Fat Modelのことかと思われ
0387nobodyさん2014/05/09(金) 14:56:57.61ID:???
サーバーサイドのバリデーションをしなくていいわけじゃないから、負荷軽減にならなくね?
ちゃんと機能するようにつくれば、無通信でユーザーに間違い見せれて、
使いやすくいフォームにはなると思うけど。
0388nobodyさん2014/05/09(金) 15:49:02.85ID:???
ブラウザで弾いておいたらサーバー側での試行回数は減るだろ。
正常系の負荷はもちろん変わらんけど。
0389nobodyさん2014/05/09(金) 18:26:07.60ID:???
初心者なんすけど
モデルの使い道がよくわかんないっす。
何から何までコントローラーで処理しちゃってモデルはスッカラカンです。
どなたかモデルの使い道というか便利さを三行で説明しなさい。
0390nobodyさん2014/05/09(金) 18:27:49.70ID:???
>>387
HTTPの勉強をもっとしましょう。
0391nobodyさん2014/05/09(金) 18:46:15.86ID:???
>>389
俺も初心者だからよく分かってないが、
コントローラはモデルに作ったメソッドを呼ぶだけで、
ざっくりした条件分岐のみにとどめておくと後から非常に見やすい気がする。
0392nobodyさん2014/05/09(金) 20:58:13.09ID:???
やりすぎると Very Fat Model になってそれはそれで見難い
バランスというかセンスが問われる部分
0393nobodyさん2014/05/09(金) 21:01:03.07ID:???
>>389
単に好みの問題だから好きにすればいいんじゃないかな
モデルはどこからでも使える上にシングルトンっぽくインスタンスが1つだけなので
共通っぽいメソッドやクラスを実装するのにも使える
0394nobodyさん2014/05/09(金) 21:32:58.38ID:???
ああそうか、モデルはなんとなくテーブルに紐付くものみたいに思ってたが
ロジック処理だけのモデルがあっても良いよな
0395nobodyさん2014/05/10(土) 01:47:38.21ID:???
>モデルはなんとなくテーブルに紐付く

これは常にRORと、その派生のCakePHPに対する批判として挙げられてるね。
本来のModelとは全然違うって、激怒しているブログがあちこちにある。

なお、CakePHP3では大幅に改善されるみたいです。
0396nobodyさん2014/05/10(土) 07:20:47.11ID:???
>>388
ああ、まぁそりゃそうか。
といっても、負荷対策が必要な状況では、効果的な対策になるほどは減らないとは思うけど。
0397nobodyさん2014/05/10(土) 10:46:10.10ID:???
Cakeはエンティティを入れるのが遅すぎた
0398nobodyさん2014/05/10(土) 10:53:41.99ID:???
http://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は会社のエンジニアレベルが低いとでも言いたいのか
0399nobodyさん2014/05/10(土) 11:01:56.24ID:???
周りがCakePHPはRailsのパクリだっつーから使ってみたら
ActiveRecordの超絶劣化っぷりにびびった

Railsも似非MVC2になりがちだけどCakeはそれ以前に
オブジェクト指向設計に真っ向から喧嘩売ってるレベル
0400nobodyさん2014/05/10(土) 12:53:17.49ID:???
そうやって批判する奴って何も具体的な事言えない奴ばかりだよな
実際どのくらいのスキルある奴なんだろう
0401nobodyさん2014/05/10(土) 14:23:07.62ID:???
Composerは確かにほかの言語のと比べて使いにくい印象はあるけど、
git submoduleしないとパッケージのバージョンを管理できないなんて、
なに言ってるかわからないレベルなんだが。
そんなことあるんかね?
0402nobodyさん2014/05/10(土) 15:56:06.47ID:???
お前らのMVCは間違ってる!ってRails式を散々disるスライドがあったが
ものがちゃんと作れれば別にいいわけで、正しいからどうだってのがよくわからん
0403nobodyさん2014/05/10(土) 17:17:38.04ID:???
>>400
DBから取ってきたデータがarrayになってる部分だと思われ
Cake3でようやくオブジェクトになるようだが
■ このスレッドは過去ログ倉庫に格納されています