【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/
0484nobodyさん
2008/02/18(月) 04:06:19ID:???どうすれば動くの?
例)
c_userテーブル
0486484
2008/02/18(月) 04:56:56ID:???メンバ変数名に[$]が自動的についてしまうのが原因かな
もっと詳しく調べてみよう
0487nobodyさん
2008/02/18(月) 04:58:45ID:???0489484
2008/02/18(月) 05:05:59ID:???bakeでつかって作ると
var $helpers = array('Html', 'Form', '');
helpers配列の最後に空の値が自動的に入るクサい
空の値をとったら動いた
0490nobodyさん
2008/02/18(月) 05:14:55ID:???c_usersテーブル
app/models/c_user.php
CUser
app/controllers/c_users_controller.php
CUsersController
じゃなかったっけ試してないけど って解決したならいいや
0491484
2008/02/18(月) 05:20:30ID:???helperのときの質問でライブラリ名指定するとこで
そのままエンターしたから
空の値がはいっちゃったくさい
0492nobodyさん
2008/02/18(月) 06:19:30ID:???でリンク作成できるみたいだけど
リンクを新しいウィンドウで開かせたい場合はどうしてますか?
0493492
2008/02/18(月) 06:45:36ID:???array('target'=>'newwin')
でよかったんだ
0494nobodyさん
2008/02/18(月) 07:28:02ID:???激的に作業スピードが変わるということはないな
0496nobodyさん
2008/02/18(月) 09:47:10ID:???まあ、もとからそれが目的なのだろうから仕方ないかwww
0497nobodyさん
2008/02/18(月) 11:10:35ID:???cakeユーザはある意味凄いと思うよ
0498nobodyさん
2008/02/18(月) 11:17:26ID:???今まで沢山のサイト作ってきたので
0から作るようなサイトはあまりないよ
それを壊してフレームワークにするとかアホらしい作業
0500nobodyさん
2008/02/18(月) 14:50:14ID:???ブラックボックスの割に 穴だらけなのが困る
フレームワークの意味ねえよw
0501nobodyさん
2008/02/18(月) 17:24:44ID:???穴?
何の話?
0502nobodyさん
2008/02/18(月) 19:28:56ID:???後方互換取ろうとするもんだから、メソッド内での引き回しが地獄
0503nobodyさん
2008/02/18(月) 20:31:27ID:???それには同意。引数の名前の通りに使ってくれと思う。
でも、それを理由に他のフレームワークを調べてみたんだが、
どうもCakeほど総合力で勝っているものが無い・・・
もう無くてもいいかもしれんが個人的にPHP4、PHP5コード互換と
アソシエーションとかデータベース周りが一番実用的なんだよなぁ。
※PHP4、PHP5コード互換とはPHP4用とPHP5用で同じコードが使えるという意味。
CodeIgniterはPHP4対応だが、コンストラクタがPHP4とPHP5でのやり方が違って拍子抜け。
0505nobodyさん
2008/02/18(月) 20:44:06ID:???0506nobodyさん
2008/02/18(月) 20:52:34ID:???0507nobodyさん
2008/02/18(月) 21:34:20ID:???大きなデータベースをガシガシ使う予定があるんだけど、
やっぱりPDO使う場合に比べてCakePHPでシステム作ると
データ処理とか重くなりますか?
0508nobodyさん
2008/02/18(月) 21:59:37ID:???なんでわざわざフレームワークの穴埋めする必要があるのかとw
0509nobodyさん
2008/02/18(月) 22:05:30ID:???0511nobodyさん
2008/02/18(月) 22:16:09ID:???そういうのは、言い出した人が証明する義務を持つってのが
世の中の常識だってわかってる?
まあわかっていたらそんな中途半端なこと言わないと思うが。
0512507
2008/02/18(月) 22:19:43ID:???やっぱそうですよね…
体感で明らかに違うくらい差がありますかね?
少しでも軽いシステムを作る場合は、Cakeは避けた方が無難
なのかな…便利そうで使ってみたかったけど…
0513nobodyさん
2008/02/18(月) 22:23:52ID:???C言語を使ったほうがいいよ。
0514nobodyさん
2008/02/18(月) 22:24:12ID:???>少しでも軽いシステムを作る場合は、Cakeは避けた方が無難
そうじゃない
少しでも軽いシステムを作る場合は、フレームワークは避けた方が無難
「少しでも」が何と比較してなのかはわからんが
0515nobodyさん
2008/02/18(月) 22:39:15ID:???静的HTML吐いたりとか検討すべきだし
0516nobodyさん
2008/02/18(月) 22:41:31ID:???システムを作ってさい。
0517nobodyさん
2008/02/18(月) 22:54:50ID:???俺俺関数はすべてc言語でPHP拡張モジュールにして利用してるよ
高速化と利便性を意識してやってる
0518nobodyさん
2008/02/18(月) 23:09:21ID:???証明するもなにも使えばすぐわかる
セキュリティホールが簡単にできてしまう
基本的なDB関係やパラメータの受け渡しで穴がある
もちろん気をつければいいんだが
フレームワークでそんなとこに気をつけなきゃいけない
というのがちょっといまいち
素人がセキュリティホールだらけのサイトつくりまくって
PHPの糞さを助長しなければいいのだが
0520nobodyさん
2008/02/18(月) 23:10:50ID:???規則に統一性がなく 中途半端な感じ
まあオープンソースの宿命といえばそれまでだけどね
0522nobodyさん
2008/02/19(火) 00:55:22ID:???例えばtable1、table2ってテーブル名があったら、
table1s、table2sってしても大丈夫?
0523nobodyさん
2008/02/19(火) 01:27:54ID:???証明しないとわからない人間が使うとどうなるか…
PHPは糞言語っていわれるのがおちだなあ
1.3くらいでもうちょい使いやすくなってるといいな
0525nobodyさん
2008/02/19(火) 01:56:18ID:???0526nobodyさん
2008/02/19(火) 02:14:54ID:???つくづく英語の複数形という考え方はすごいと思うよ。
0528nobodyさん
2008/02/19(火) 03:30:47ID:???まったく違う名前にだろうが自由自在。
0529nobodyさん
2008/02/19(火) 04:19:11ID:???table1 なら TableFirsts
table2 なら TableSeconds
table3 なら TableThirds
になるらしい
0532nobodyさん
2008/02/19(火) 14:11:35ID:twNHgR++ホラっ、そんなこと言っちゃダメっ!w
0534nobodyさん
2008/02/19(火) 21:00:41ID:???SQLという言語には穴があるといわれている。
0535nobodyさん
2008/02/19(火) 21:33:04ID:???要するにフレームワーク自体にSQLインジェクションの脆弱性があるって事?
kwskkwsk
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
0540nobodyさん
2008/02/20(水) 10:16:32ID:???超典型的なSQLインジェクションの穴だし、たしかに低レベルだなw
ちなみにh()もhtmlspechalcharsに丸渡ししてるから、
htmlエスケープの穴も塞がれてない
0541nobodyさん
2008/02/20(水) 13:04:12ID:???笑うのは、これを穴といっている奴のことな。
たとえば、SQLインジェクションを、SQLの穴という奴はいない。
SQLを使って作った奴の問題。
世の中のRDMS用のどのライブラリ・フレームワークもSQLを直接実行できる。
だから、すべてのライブラリ・フレームワークに穴がある。といったら
馬鹿にされるぞ。
余りにも低レベルな奴だとな。
0542nobodyさん
2008/02/20(水) 22:13:50ID:???0545nobodyさん
2008/02/21(木) 00:58:38ID:???あぁ。穴といっているやつがね。
0547nobodyさん
2008/02/21(木) 01:36:27ID:???それもそだねえ
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に自動的に引っ張ってこれますか?
0552nobodyさん
2008/02/21(木) 09:46:20ID:???必死だなw
これは穴とは言わない。これが穴なら他のフレームワークにもあると
何度も言われてまだわからないのかw
0554nobodyさん
2008/02/21(木) 12:43:43ID:???証明する義務は、穴があると言い出した側にある。以上。お前の頭は異常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->recursive = 2;
User->Favorite->findAll('user_id = '.$userID);
でいいんじゃないの
ていうかユーザーとお気に入りがhasManyでお気に入りとアイテムがhasOneな
気がしないでも無いけど
0561nobodyさん
2008/02/21(木) 20:13:15ID:???ざっと読んで答えるが、
お気に入り->アイテム->お店
ってアソシエーションも逆から設定しておけばいいんじゃないの?
お気に入りをテーブルから取り出したら、芋づる式に取り出せるように。
0562nobodyさん
2008/02/21(木) 20:15:21ID:???アイテムがお気に入りをhasManyでお気に入りがアイテムにbelongだ
0563nobodyさん
2008/02/21(木) 21:06:15ID:9HKLO2wF>アイテムがお気に入りをhasManyでお気に入りがアイテムにbelongだ
レスありがとうございます。確かにお気に入り、アイテムの関係でみるとそうなりますね。
ただお気に入りにはアイテムのIDが当然格納しているので当然belongsの設定が出来ますが、
アイテムにはfavorite_idは持ってないのですが、hasManyの設定って出来るものなのですか?
後データとして取得したいのは$data[*]['Company']という形なのですが
教えて頂いた方法を実践したとしても$data[*][Item]['Company']という形になりませんか?
だとすると受け取ったCompanyデータは重複する可能性がありますのでその辺制御してやらんと
駄目だと思うのですが、間違ってますでしょうか。
関係ないのですが
$this->User->Favorite->findAllって書き方出来るのですね。初めて知りましたorz
0564559
2008/02/21(木) 21:11:32ID:???0565nobodyさん
2008/02/21(木) 21:33:52ID:???あとどういうデータで返って来るかは自分でdebug($data);でも書いて確認するんだ
気に入らない形だったら自分で整形しろ
それで得たノウハウはここか自分のブログにでも書けばみんなしやわせ
0566nobodyさん
2008/02/21(木) 23:04:08ID:???0567nobodyさん
2008/02/21(木) 23:22:30ID:???というか引っ張り出すデータを軽くしたい時はそうしてる。
0569559
2008/02/22(金) 01:11:47ID:???>566
私もイラっと来てquery使おうとしてたんですが、ページングしたかったので
とりあえず今はpaginateにWHERE句の後ろ全部渡す形にしちゃってますorz
皆様どうもありがとう。
0570nobodyさん
2008/02/22(金) 01:16:58ID:???>567
設計上可能ですし私もそれ考えたのですが、
なんかそれをやると負けた気がして迷走してましたw
0571nobodyさん
2008/02/22(金) 01:31:38ID:???正しいか分からんけど、ロジックシンプルになるし、データも少なくなるしそれでいいんじゃん?
あとはmysql(ver5.1以上)のviewを使うのもありかもね。
0572nobodyさん
2008/02/22(金) 05:41:42ID:???CakePHPのアソシエイト部分が小規模向けに設計されてる
GoogleCodeSearchで中規模程度のソースを結構見たが
大規模化するとかアソシエイト部分が、かなり複雑になっていて
とてもチーム分担できるようなソースでは無くなっている
symfonyはここが簡潔でわかりやすい
0573nobodyさん
2008/02/22(金) 09:25:21ID:???だからCakePHPでアソシエイトを使わなければいいだけの話。
0575nobodyさん
2008/02/22(金) 11:55:57ID:???CakePHP的にはどうするのが一番いいの?
モデルからコンポーネントを無理やり使う?
ビヘイビアってライブラリというよりか
フックを入れるものだからちょっと感じが違うよね。
0576nobodyさん
2008/02/22(金) 12:22:47ID:???0577nobodyさん
2008/02/22(金) 13:09:39ID:???たとえば、ファイル読み書きライブラリを使うとして、
$handle = $model->fopen($file)
$model->fputs($handle, $data);
とか気持ち悪いとか思わない?
継承関係になってないんだよね。
$model->findAll (このモデルのデータを検索する)
$model->save (このモデルにデータを保存する)
$model->fopen (このモデルとは関係ないが、ファイルをオープンする)
$model->fputs (このモデルとは関係ない、ファイルに保存する)
0578nobodyさん
2008/02/22(金) 13:47:10ID:???ファイルの読み書きだったら一個モデル作ればいいんじゃね?
モデルってデータの入出力であってモデル=DBのテーブルってわけでもないし
0579578
2008/02/22(金) 14:02:56ID:???0580nobodyさん
2008/02/22(金) 14:48:32ID:???今回はファイルを例にしたけど、
そういう汎用的なライブラリって使うでしょ?
そういうのはどうやって使うのがCakePHP的なのかなぁって。
vendersに入れるってことは、
vendor('aaa/bbb');
class MyModel extends AppModel {
function foo() {
$lib = new Lib();
}
}
こんな感じで使うってこと?
0581nobodyさん
2008/02/22(金) 14:58:48ID:???コンポーネントいらないんじゃね?と思えてきた。
コンポーネントは何の為に使うんだろう?
呼び出したコントローラを参照する必要がある場合?
すると汎用的なライブラリは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:???それがめんどくさいなら無節操にvendors使えばいいだろ
■ このスレッドは過去ログ倉庫に格納されています