トップページphp
1001コメント315KB

【PHP】フレームワーク CakePHP 2ホール目

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/11/14(水) 02:50:28ID:???
本家
http://www.cakephp.org/

10分で作るCakePHPアプリ for Windows
http://p4life.jp/cake/

マニュアル日本語化
http://www.cakephp.jp/doc/

日本語フォーラム
http://cakephp.jp/modules/newbb/

あとこのへんとか(初心者向けTIPS)
http://www.avatarfinancial.com/pages/cake/
0503nobodyさん2008/02/18(月) 20:31:27ID:???
>>502
それには同意。引数の名前の通りに使ってくれと思う。

でも、それを理由に他のフレームワークを調べてみたんだが、
どうもCakeほど総合力で勝っているものが無い・・・
もう無くてもいいかもしれんが個人的にPHP4、PHP5コード互換と
アソシエーションとかデータベース周りが一番実用的なんだよなぁ。

※PHP4、PHP5コード互換とはPHP4用とPHP5用で同じコードが使えるという意味。
CodeIgniterはPHP4対応だが、コンストラクタがPHP4とPHP5でのやり方が違って拍子抜け。
0504nobodyさん2008/02/18(月) 20:38:36ID:???
>>503
アソシエーションって対象のモデルデータしか必要ない時も他のモデルデータくっつけるから微妙じゃない?
0505nobodyさん2008/02/18(月) 20:44:06ID:???
なんかレベル低いやつばかりだな。いくつかアプリケーション作ってから物言えよ
0506nobodyさん2008/02/18(月) 20:52:34ID:???
お前もな
0507nobodyさん2008/02/18(月) 21:34:20ID:???
Cakeの導入考えてるんだど、ちょっと質問させてください。
大きなデータベースをガシガシ使う予定があるんだけど、
やっぱりPDO使う場合に比べてCakePHPでシステム作ると
データ処理とか重くなりますか?
0508nobodyさん2008/02/18(月) 21:59:37ID:???
コード読むと穴だらけなのが使えないな

なんでわざわざフレームワークの穴埋めする必要があるのかとw
0509nobodyさん2008/02/18(月) 22:05:30ID:???
フレームワークに穴があるのか?
0510nobodyさん2008/02/18(月) 22:07:30ID:???
>>507
そりゃPDOを素で使うよりは重い
0511nobodyさん2008/02/18(月) 22:16:09ID:???
>>508
そういうのは、言い出した人が証明する義務を持つってのが
世の中の常識だってわかってる?
まあわかっていたらそんな中途半端なこと言わないと思うが。
05125072008/02/18(月) 22:19:43ID:???
>>510
やっぱそうですよね…
体感で明らかに違うくらい差がありますかね?
少しでも軽いシステムを作る場合は、Cakeは避けた方が無難
なのかな…便利そうで使ってみたかったけど…
0513nobodyさん2008/02/18(月) 22:23:52ID:???
少しでも軽いシステムを作るのなら、
C言語を使ったほうがいいよ。
0514nobodyさん2008/02/18(月) 22:24:12ID:???
>>512
>少しでも軽いシステムを作る場合は、Cakeは避けた方が無難
そうじゃない
少しでも軽いシステムを作る場合は、フレームワークは避けた方が無難
「少しでも」が何と比較してなのかはわからんが
0515nobodyさん2008/02/18(月) 22:39:15ID:???
少しでもリクエスト数への耐性稼ぎたいなら自前でキャッシュさせたり
静的HTML吐いたりとか検討すべきだし
0516nobodyさん2008/02/18(月) 22:41:31ID:???
そんなことより少しでも早く
システムを作ってさい。
0517nobodyさん2008/02/18(月) 22:54:50ID:???
フレームワークはCakePHP使ってるけど
俺俺関数はすべてc言語でPHP拡張モジュールにして利用してるよ
高速化と利便性を意識してやってる


0518nobodyさん2008/02/18(月) 23:09:21ID:???
>>511

証明するもなにも使えばすぐわかる

セキュリティホールが簡単にできてしまう
基本的なDB関係やパラメータの受け渡しで穴がある

もちろん気をつければいいんだが
フレームワークでそんなとこに気をつけなきゃいけない
というのがちょっといまいち

素人がセキュリティホールだらけのサイトつくりまくって
PHPの糞さを助長しなければいいのだが
0519nobodyさん2008/02/18(月) 23:09:23ID:???
>>504
マニュアルぐらいちょろっと読んだほうがいいよ
0520nobodyさん2008/02/18(月) 23:10:50ID:???
あれもこれもと親切すぎるわりに
規則に統一性がなく 中途半端な感じ

まあオープンソースの宿命といえばそれまでだけどね
0521nobodyさん2008/02/18(月) 23:11:32ID:???
>>518
だからさ、証明するのはあんたの仕事なんだって。
0522nobodyさん2008/02/19(火) 00:55:22ID:???
CakePHPのテーブルの命名規約って面倒なんだけど、
例えばtable1、table2ってテーブル名があったら、
table1s、table2sってしても大丈夫?
0523nobodyさん2008/02/19(火) 01:27:54ID:???
>>521

証明しないとわからない人間が使うとどうなるか…

PHPは糞言語っていわれるのがおちだなあ

1.3くらいでもうちょい使いやすくなってるといいな
0524nobodyさん2008/02/19(火) 01:35:39ID:???
>>523
だから説明する義務があるんだってば
何話すり替え店だよwww
0525nobodyさん2008/02/19(火) 01:56:18ID:???
そんなテーブル名のシステム投げ捨ててしまえ
0526nobodyさん2008/02/19(火) 02:14:54ID:???
Cakeとかの名前の付け方を見てて
つくづく英語の複数形という考え方はすごいと思うよ。
05275222008/02/19(火) 03:15:24ID:???
>>525
いや、まじで数字の入ったテーブルがあって、それを複数形にしなくちゃいけないんだよ(つД`)
可能かどうかわかる?
0528nobodyさん2008/02/19(火) 03:30:47ID:???
複数形にしようが単数形のままだろうが、
まったく違う名前にだろうが自由自在。
0529nobodyさん2008/02/19(火) 04:19:11ID:???
語尾が数字の場合は
table1 なら TableFirsts
table2 なら TableSeconds
table3 なら TableThirds

になるらしい
05305222008/02/19(火) 07:30:26ID:???
>>529
さんきゅー!!それでいってみます!
0531nobodyさん2008/02/19(火) 12:02:14ID:???
>>530
ウソなのに気づかないなんて
ホント馬鹿ですねw
0532nobodyさん2008/02/19(火) 14:11:35ID:twNHgR++
>>531
ホラっ、そんなこと言っちゃダメっ!w
0533nobodyさん2008/02/19(火) 20:39:50ID:???
>>518
>基本的なDB関係やパラメータの受け渡しで穴がある

それ結構重要な話だからkwsk
0534nobodyさん2008/02/19(火) 21:00:41ID:???
ヒント
SQLという言語には穴があるといわれている。
0535nobodyさん2008/02/19(火) 21:33:04ID:???
何を言ってるのかさっぱりわからないんだけど、
要するにフレームワーク自体にSQLインジェクションの脆弱性があるって事?
kwskkwsk
0536nobodyさん2008/02/19(火) 21:40:29ID:???
>>535
Qという文字に穴が開いてるだろうがバカw
0537nobodyさん2008/02/19(火) 23:27:20ID:???
何その程度の低さ
0538nobodyさん2008/02/20(水) 08:44:17ID:???
ここらあたりのことかな?
http://www.1x1.jp/blog/2007/07/cakephp_operator_injection.html
0539nobodyさん2008/02/20(水) 09:48:22ID:???
>>538
もしそれのことを穴とか言っているんだとしたら、
あまりに低レベルすぎて笑うんだがw
0540nobodyさん2008/02/20(水) 10:16:32ID:???
>>539
超典型的なSQLインジェクションの穴だし、たしかに低レベルだなw
ちなみにh()もhtmlspechalcharsに丸渡ししてるから、
htmlエスケープの穴も塞がれてない
0541nobodyさん2008/02/20(水) 13:04:12ID:???
>>540
笑うのは、これを穴といっている奴のことな。

たとえば、SQLインジェクションを、SQLの穴という奴はいない。
SQLを使って作った奴の問題。

世の中のRDMS用のどのライブラリ・フレームワークもSQLを直接実行できる。
だから、すべてのライブラリ・フレームワークに穴がある。といったら
馬鹿にされるぞ。

余りにも低レベルな奴だとな。
0542nobodyさん2008/02/20(水) 22:13:50ID:???
高レベルな穴とかあるん?
0543nobodyさん2008/02/21(木) 00:53:32ID:???
>>541
おまえも含めて
レスのレベル低くなってきてるぞ
くだらん話しを広げすぎ
0544nobodyさん2008/02/21(木) 00:56:20ID:???
>>541
低レベルとか相手の感情を引き出すような言葉は使うな
レスが荒れる

0545nobodyさん2008/02/21(木) 00:58:38ID:???
まともな反論が無い時点で、アフォなのは間違いないなw
あぁ。穴といっているやつがね。
0546nobodyさん2008/02/21(木) 01:19:19ID:???
>>544
もう発端や経緯抜きで、荒れさせたいだけなんだろう
0547nobodyさん2008/02/21(木) 01:36:27ID:???
>>538

それもそだねえ
h関数も同様

少なくとも この辺りの対策はフレームワークに組み込まれるべき部分
でなければ自分で書くのと大差ないわけだし

他にもDBが外部から更新されるパターンがけっこうあるよねえ
低レベルとか言っているやつがいるが
その低レベルな穴をふさぐのもフレームワークの役目

同じことやるなら 自分で書けばいいんだしな

問題なのは 独自の変なルールくっつけているわりに
そういう部分に手抜きがあるということ

そして 手抜きがあるところもあれば きちんとしているとこもある
ようは 今のCakePHPは中途半端なのね

ZendやCIのほうが変なルールがない分 作りやすいかもねえ
できたコードも見通しいいしね
0548nobodyさん2008/02/21(木) 01:46:39ID:???
フレームワークばっかいらんわ!次から次へと乱立しやがって
なんぼほど覚えることが増えんねん、いい加減にせーよボケ!!
0549nobodyさん2008/02/21(木) 02:44:48ID:???
別に増えたって無視すりゃ良いじゃん。
それとも仕事で嫌々使わされてるクチか?
0550nobodyさん2008/02/21(木) 08:17:06ID:???
ちょっと質問

Cakeで外部キーはテーブル名単数形_id(例えばuser_id)とする、といったルールになってるけど、
例えばusersテーブルのidじゃなくて、usersテーブルのuseridをuser_idに引っ張ってきたいときは
どうしたらいいですか?
usersテーブルのプライマリキーをidからuseridに手動変更するとか?
それでもuser_idに自動的に引っ張ってこれますか?
0551nobodyさん2008/02/21(木) 08:41:53ID:???
>>550
Cakephpのアソシエイトの項目よく読んだかお前?
0552nobodyさん2008/02/21(木) 09:46:20ID:???
>>547
必死だなw
これは穴とは言わない。これが穴なら他のフレームワークにもあると
何度も言われてまだわからないのかw
0553nobodyさん2008/02/21(木) 11:29:25ID:???
>>552

読んでわからなければ
きみが低脳ってこと

以上
0554nobodyさん2008/02/21(木) 12:43:43ID:???
やっぱり悪口だけで「具体的な反論」はできないんだなw
証明する義務は、穴があると言い出した側にある。以上。お前の頭は異常w
0555nobodyさん2008/02/21(木) 13:06:05ID:???
ソース読んでも穴がわからない低脳乙
0556nobodyさん2008/02/21(木) 13:10:53ID:???
そういう時はね。どのファイルの何行目って
ちゃんと言わないと相手にしてもらえないよ。

お母さんに教えてもらわなかった?
0557nobodyさん2008/02/21(木) 13:22:36ID:???

今必死にファイル検索中・・・・


見つからなかったから遠吠え↓
0558nobodyさん2008/02/21(木) 14:57:01ID:???
馬鹿の遠吠えだと思うんならスルーしてください。
ただの煽りあいでどっちも荒らしにしか見えませんよ。
0559nobodyさん2008/02/21(木) 19:07:43ID:9HKLO2wF
私もちょっと質問です。

複数のお店が複数のアイテムを販売し、不特定多数のユーザーがそのアイテムを
「お気に入り」に入れる。で、ユーザーがお気に入りを閲覧した時に
アイテム一覧では無く、お店一覧を出したい場合どうしたら良いんでしょうか?

補足:
お店とアイテムはhasManyでアイテムからお店はbelongsToな関係で、
ユーザーとお気に入りはhasOneでお気に入りからユーザーはbelongsToな関係
お気に入りにはアイテムのIDとユーザーのIDが記録されている。
お気に入りとアイテムはhasManyもしくはHABTM(まだこれを使う意味が分かってません)
これら四つのテーブルに対するモデルは作成済み

SQL的に言うと
SELECT * FROM companies
WHERE id IN (
SELECT company_id
FROM items
WHERE id IN (
SELECT item_id
FROM favorites
WHERE user_id = '$this->User->field()で取り出したusersテーブルのID'
)
)

SQLで書くとこれだけですむ問題なのですが、
うまくデータを引き出せず、かといってFavoriteモデルから取り出した後でforeachで
Companyの情報を取り出すといった事はやりたくないですし。。

どなたかご教授頂けないでしょうか。
0560nobodyさん2008/02/21(木) 20:12:27ID:???
User->Favorite->Item->Company
なんだから手っ取り早くやるなら
User->Favorite->recursive = 2;
User->Favorite->findAll('user_id = '.$userID);
でいいんじゃないの

ていうかユーザーとお気に入りがhasManyでお気に入りとアイテムがhasOneな
気がしないでも無いけど
0561nobodyさん2008/02/21(木) 20:13:15ID:???
>>559
ざっと読んで答えるが、
お気に入り->アイテム->お店
ってアソシエーションも逆から設定しておけばいいんじゃないの?

お気に入りをテーブルから取り出したら、芋づる式に取り出せるように。
0562nobodyさん2008/02/21(木) 20:15:21ID:???
アイテムとお気に入りの関係まちがいた
アイテムがお気に入りをhasManyでお気に入りがアイテムにbelongだ
0563nobodyさん2008/02/21(木) 21:06:15ID:9HKLO2wF
>560-562
>アイテムがお気に入りをhasManyでお気に入りがアイテムにbelongだ
レスありがとうございます。確かにお気に入り、アイテムの関係でみるとそうなりますね。

ただお気に入りにはアイテムのIDが当然格納しているので当然belongsの設定が出来ますが、
アイテムにはfavorite_idは持ってないのですが、hasManyの設定って出来るものなのですか?

後データとして取得したいのは$data[*]['Company']という形なのですが
教えて頂いた方法を実践したとしても$data[*][Item]['Company']という形になりませんか?
だとすると受け取ったCompanyデータは重複する可能性がありますのでその辺制御してやらんと
駄目だと思うのですが、間違ってますでしょうか。


関係ないのですが
$this->User->Favorite->findAllって書き方出来るのですね。初めて知りましたorz
05645592008/02/21(木) 21:11:32ID:???
あ、上げちまいました。すんません。
0565nobodyさん2008/02/21(木) 21:33:52ID:???
マニュアルやらブログチュートリアルやら見て関連キーの書き方をもう一度確認すべし
あとどういうデータで返って来るかは自分でdebug($data);でも書いて確認するんだ
気に入らない形だったら自分で整形しろ
それで得たノウハウはここか自分のブログにでも書けばみんなしやわせ
0566nobodyさん2008/02/21(木) 23:04:08ID:???
俺ならさっさとquery()使うな。
0567nobodyさん2008/02/21(木) 23:22:30ID:???
思ったんだけど、お気に入りにshop_id入れるってのもアリだな。
というか引っ張り出すデータを軽くしたい時はそうしてる。
0568nobodyさん2008/02/21(木) 23:35:28ID:???
>>566

cake使う意味あるの?w

↑でもでてたけどアマチュア向けのFWだし
自分で書くなら他のがおすすめ
05695592008/02/22(金) 01:11:47ID:???
冷静に読んだら可笑しな事書いてますね。ちと整理をかねて勉強し直してみます(納期許す範囲でw。

>566
私もイラっと来てquery使おうとしてたんですが、ページングしたかったので
とりあえず今はpaginateにWHERE句の後ろ全部渡す形にしちゃってますorz

皆様どうもありがとう。
0570nobodyさん2008/02/22(金) 01:16:58ID:???
あ、リロードしてなかった。
>567
設計上可能ですし私もそれ考えたのですが、
なんかそれをやると負けた気がして迷走してましたw
0571nobodyさん2008/02/22(金) 01:31:38ID:???
>>570
正しいか分からんけど、ロジックシンプルになるし、データも少なくなるしそれでいいんじゃん?
あとはmysql(ver5.1以上)のviewを使うのもありかもね。
0572nobodyさん2008/02/22(金) 05:41:42ID:???
大規模にも対応できるフレームワークはsymfonyてのがようやくわった
CakePHPのアソシエイト部分が小規模向けに設計されてる
GoogleCodeSearchで中規模程度のソースを結構見たが
大規模化するとかアソシエイト部分が、かなり複雑になっていて
とてもチーム分担できるようなソースでは無くなっている
symfonyはここが簡潔でわかりやすい
0573nobodyさん2008/02/22(金) 09:25:21ID:???
symfonyにはアソシエイトが無い。
だからCakePHPでアソシエイトを使わなければいいだけの話。
0574nobodyさん2008/02/22(金) 09:53:35ID:???
>>573
アソシエイトの意味をわかってないんじゃ。。。
0575nobodyさん2008/02/22(金) 11:55:57ID:???
モデルで共通のライブラリ的な機能を呼び出すとき
CakePHP的にはどうするのが一番いいの?

モデルからコンポーネントを無理やり使う?
ビヘイビアってライブラリというよりか
フックを入れるものだからちょっと感じが違うよね。
0576nobodyさん2008/02/22(金) 12:22:47ID:???
app_model.phpに入れるんでよくね?
0577nobodyさん2008/02/22(金) 13:09:39ID:???
>>576
たとえば、ファイル読み書きライブラリを使うとして、

$handle = $model->fopen($file)
$model->fputs($handle, $data);

とか気持ち悪いとか思わない?
継承関係になってないんだよね。

$model->findAll (このモデルのデータを検索する)
$model->save (このモデルにデータを保存する)
$model->fopen (このモデルとは関係ないが、ファイルをオープンする)
$model->fputs (このモデルとは関係ない、ファイルに保存する)
0578nobodyさん2008/02/22(金) 13:47:10ID:???
それは気持ち悪い
ファイルの読み書きだったら一個モデル作ればいいんじゃね?
モデルってデータの入出力であってモデル=DBのテーブルってわけでもないし
05795782008/02/22(金) 14:02:56ID:???
cakephp的とか考えずにvendorsに入れちゃうのが早いし簡単だけどな
0580nobodyさん2008/02/22(金) 14:48:32ID:???
>>578
今回はファイルを例にしたけど、
そういう汎用的なライブラリって使うでしょ?

そういうのはどうやって使うのがCakePHP的なのかなぁって。

vendersに入れるってことは、

 vendor('aaa/bbb');
 class MyModel extends AppModel {
  function foo() {
    $lib = new Lib();
  }
 }
こんな感じで使うってこと?
0581nobodyさん2008/02/22(金) 14:58:48ID:???
vendorsを使うとして、そうしたら、Vendorsに入れて使えば、
コンポーネントいらないんじゃね?と思えてきた。

コンポーネントは何の為に使うんだろう?
呼び出したコントローラを参照する必要がある場合?

すると汎用的なライブラリはvendorを使ったほうがいいのかな。

たとえばメール送信(1.2のEmailComponent)は
コンポーネントではなく、vendorにするべきじゃないかと思えてきた。

バックグラウンド的にモデルに変更があったらメールするなんて用途もあるだろうし。
そういう場合でもモデルを変更するコントローラで一旦変更を感知して
そこからメールするのがいいのだろうか?
0582nobodyさん2008/02/22(金) 15:02:32ID:???
コントローラ、モデル、(ビューも?)のどこででも使える
vendorsプロパティがほしいな。

class My extends ? {
 var $vendors = array('Aaa', 'Bbb', 'Ccc');
 function foo() {
  $this->Aaa->foo();
 }
}

あとpluginsってフォルダを使っている例を見たことが無い。
0583nobodyさん2008/02/22(金) 16:17:35ID:???
だから"べき"論でいけばMVC意識して書けよ
それがめんどくさいなら無節操にvendors使えばいいだろ
0584nobodyさん2008/02/22(金) 16:32:00ID:???
>>583
うん。それじゃ「べき論」をするということ前提で話を進めましょうか。

どうするのが一番いいのだろうか?
0585nobodyさん2008/02/22(金) 16:44:03ID:???
正統派な方法としてはコンポーネントじゃないの?
>>576でもいいけど、正統派じゃないでしょ。
0586nobodyさん2008/02/22(金) 18:13:20ID:???
Railsに移行したらいいのに
0587nobodyさん2008/02/22(金) 19:13:52ID:???
>>585
モデルでコンポーネントを使うという意味?
でも、フォルダからしてコンポーネントはコントロールの下にあるし、
なによりモデルでコンポーネントを使う方法が無いでしょ?
App::importで強制的に読み込むしかない。
0588nobodyさん2008/02/22(金) 19:14:27ID:???
>>586
railsが格安共有サーバーでも公式に動くようになったらねw
0589nobodyさん2008/02/23(土) 09:31:23ID:???
CakePHPは小規模向き、アソシエイト機能見て笑ったし
将来性無いなと判断する決め手になった
後はデータがオブジェクトじゃなくて配列処理してるとこね
これも、かなり小規模を前提として設計してるよね
0590nobodyさん2008/02/23(土) 09:40:42ID:???
ドキュメントの多さ大規模に向いてるsymfonyが
PHPフレームワーク主流になると思う
有名どころの大手ならCakePHPはいれない
これは断言できる、
少人数、小規模設計だから当然

半年くらいCakePHPでコーディングしてきたけど捨てるよ
CakePHP指定の案件が将来望めない
symfony案件が増加するのは間違いない

0591nobodyさん2008/02/23(土) 10:34:07ID:???
mozillaサイトにCakePHP!
http://cakephp.seesaa.net/article/31425210.html
0592nobodyさん2008/02/23(土) 13:14:45ID:???
>>589

だね

途中荒らしてるやついたが
なんであんなに必至なのかな

まあ初心者には簡単だしおすすめだけど
cakephpのサイト探すと穴空いたままで公開してるとこ多いな
0593nobodyさん2008/02/23(土) 14:17:27ID:???
急にアレな人が増えたな
0594nobodyさん2008/02/23(土) 14:20:55ID:???
>>593
仕方ないよ。穴がすきなんでしょw
0595nobodyさん2008/02/23(土) 14:22:47ID:???
俺用メモ

$db =& ConnectionManager::getDataSource('default');
$db->query('select * from table', false); ←二つ目の引数はキャッシュを使わないという意味
0596nobodyさん2008/02/23(土) 16:47:47ID:???
そもそも現時点で大規模で高負荷なサイト向きだと思っていた人がいるの?
そりゃ単に調査不足だろ
0597nobodyさん2008/02/23(土) 21:18:01ID:???
メソッド内で global $hoge ; とかしても null なのですが・・・
何かやり方間違ってますか?

例えば
配列を書いたファイル:data.php
<?php
$hoge = array( "a", "b", "c" ) ;

コントローラ:users_controller.php
<?php
include_once( "data.php" ) ;
class UsersController extends AppController
{
var $name = "Users" ;
var $uses = array( "User" ) ;

function index()
{
global $hoge ;
var_dump( $hoge ) ;
}
}
0598nobodyさん2008/02/23(土) 22:31:22ID:???
CakePHPは小規模でもかなりの小規模
たとえるなら、携帯の掲示板レベル
0599nobodyさん2008/02/23(土) 22:33:28ID:???
1年後にはレンサバ環境もPHP5が標準になるだろうから
そうなればsymfonyが敵なし状態だろうな
0600nobodyさん2008/02/23(土) 23:06:46ID:???
分かったけどここってcakephpのスレだよ?
0601nobodyさん2008/02/24(日) 14:48:47ID:???
使いたくないヤツは使わなければいい。それだけ。
チンポニーでも禅度でも好きなの使え。
0602nobodyさん2008/02/24(日) 21:59:28ID:???
cakephp v2はphp5&6専用になるよ

■ このスレッドは過去ログ倉庫に格納されています