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

【PHP】フレームワーク CakePHP 3ホール目【本命】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/03/14(金) 15:16:00ID:HF9x5ODX
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/

CakePHP入門リンク集
ttp://pub.studio15.jp/2007/11/13/cakephp-links/

【PHP】フレームワーク CakePHP 2ホール目
http://pc11.2ch.net/test/read.cgi/php/1194976228/
【PHP】フレームワーク CakePHP
http://pc11.2ch.net/test/read.cgi/php/1163850802/
0136nobodyさん2008/03/16(日) 16:55:47ID:???
>>135
脳内メモリ増設したいんやが、空きが無いんや
0137nobodyさん2008/03/16(日) 17:21:50ID:???
>>136
すでについとる容量の低いやつを全部外して
デュアルチャネル対応の容量大きいやつを増設したらええんや

そしたらCakeもサクサク、オマエの小汚い脳内もサックサク〜(* ^ー゚)
0138nobodyさん2008/03/16(日) 17:40:40ID:???
>>137
おまえはCPU変えた方がよさそうだなw
0139nobodyさん2008/03/16(日) 22:05:49ID:???
>>138
ツマンネー
0140nobodyさん2008/03/16(日) 22:11:05ID:???
先輩方、マジ質問なんですが、自分はdreamweaver を使ってます。

ecripse って最近よく聞くんですが、 dreamweaver よりも開発効率いいんでしょうか。

よろしくお願いします。
0141nobodyさん2008/03/16(日) 22:46:20ID:???
>>140
http://pc11.2ch.net/test/read.cgi/php/1171452901/
0142nobodyさん2008/03/16(日) 22:54:10ID:???
Javaならエクリプス必須だけどPHPは秀丸で充分じゃね?関数少ないし。
0143nobodyさん2008/03/16(日) 23:03:52ID:???
PHPフレームワークのCakePHPに相次ぐ批判の声
http://news24.2ch.net/test/read.cgi/news2/1193936653/

とりあえず「脳内メモリがや〜」とか言ってる人は読んどいたら?
0144nobodyさん2008/03/17(月) 00:45:30ID:???
>>119
私もこのコードを書いたら、彼女が出来ました!
0145nobodyさん2008/03/17(月) 01:02:50ID:???
ここいる住人は全員初心者ばっかりくせーw
0146nobodyさん2008/03/17(月) 01:03:05ID:BkHzbTOg
gzipの方のアーカイブって変なフォルダ入ってね?あれ何に使うの?
0147nobodyさん2008/03/17(月) 01:06:46ID:BkHzbTOg
>>119
落ちなくて困っているんだけど、どうすればいい?
0148nobodyさん2008/03/17(月) 01:23:22ID:???
結局CakePHPは糞フレームワークという結論でよろしいですね!
0149nobodyさん2008/03/17(月) 01:23:58ID:???
>>148
ノープロブレム
0150nobodyさん2008/03/17(月) 01:25:35ID:???
よろしいから、どっか行け、な。使わなくていいから。マジで。
0151nobodyさん2008/03/17(月) 01:27:02ID:???
このスレを見てたら大手が採用しない理由がわかってきたw
0152nobodyさん2008/03/17(月) 01:34:16ID:???
とりあえずCakePHPはよく落ちる糞フレームワークということを
みんなで中小企業にアピールしようぜ。
そしてもう二度と同じ被害者を生まないためにも
0153nobodyさん2008/03/17(月) 01:44:22ID:???
嫉妬乙
0154nobodyさん2008/03/17(月) 01:59:39ID:???
いや、マジで駄目だから使わないほうがいい。
使うのは駄目な俺だけでいい。
0155nobodyさん2008/03/17(月) 02:09:58ID:???
この流れで落ちるとかいっても逆効果だろw
誰も信用してないよ。
0156nobodyさん2008/03/17(月) 06:47:17ID:???
モデルにバリデーションとアソシエーションをがっつり入れた
超みにくいよw
0157nobodyさん2008/03/17(月) 07:00:18ID:???
あぁ。だから俺はバリデーションをYAMLに書いて、
それを読み込むようにしている。
0158nobodyさん2008/03/17(月) 15:09:42ID:???
フォームでURLの入力補助として
デフォルト値にhttp://をつけると
バリデーションで他の項目がひかかったときに
http://yahoo.co.jpと入力していても
またhttp://のデフォルト値がはいる
デフォルト値は最初の画面だけ挿入したい場合はどうすればいいのですか

$form->input('TestUser.url', array('value'=>'http://')
0159nobodyさん2008/03/17(月) 15:29:54ID:???
>>141
>>142

ありがとうございます!
0160nobodyさん2008/03/17(月) 16:22:23ID:???
たった3日で150レスだと…?
0161nobodyさん2008/03/17(月) 16:39:49ID:???
>>158
その辺て自動でやってくれないんだっけ?
再編集のときの話だったら、データ構造を見て本来はDBから持ってくるデータを用意しておいてあげればいい
またはデータが無いと判断したときだけ、value入れればいいんじゃね
0162nobodyさん2008/03/17(月) 18:22:09ID:???
>>158
タイムリーだなw
俺も今同じようなことをやっていた。

最初はそのように、$form->inputに書いていたが、
同じようにダメだと気づいて、

コントローラで、(↓こんな感じ。適当に書く)
if(!empty($this->data)) {
 if($this->Model->save($data)) {
  ・・・
 } else {
  ・・・
 }
} else {
 $this->data['Model']['url'] = 'http://';
}

本当についさっき書いたコードなので、これで問題ないか深く考えていない。
0163nobodyさん2008/03/17(月) 20:25:58ID:???
コントローラでやることじゃないなー
0164nobodyさん2008/03/17(月) 21:47:14ID:???
>>163
プログラマならコードで示してね。
0165nobodyさん2008/03/17(月) 22:07:27ID:6Wsl0FQ6
scaffoldでエラーが出るのですが、何が原因か教えてもらいたいです。

エラーの内容は
Warning: Invalid argument supplied for foreach() in /home/~~/htdocs/cake/cake/libs/controller/controller.php on line 666
Warning: Invalid argument supplied for foreach() in /home/~~/htdocs/cake/cake/libs/controller/controller.php on line 801

コントローラとモデルはscaffoldのみのシンプルなものです。
0166nobodyさん2008/03/17(月) 22:16:46ID:???
>>165
まず該当箇所を見てみればいいと思うが
0167nobodyさん2008/03/17(月) 22:21:02ID:???
>>162
Viewにこう書くのはどう?

if(empty($this->data['TestUser']['url'])) $this->data['TestUser']['url']='http://';
echo $form->input('TestUser.url', array('label'=>'*URL','size'=>50,'value'=>$this->data['TestUser']['url']));
0168nobodyさん2008/03/17(月) 22:28:21ID:6Wsl0FQ6
666:foreach ($objRegistryModel->_tableInfo->value as $tabl) {
801:foreach ($objRegistryModel->hasAndBelongsToMany as $relation => $relData) {
でした。何なんでしょうか。アソシエーションでしょうか。
0169nobodyさん2008/03/17(月) 22:52:12ID:???
>>157
この辺りの辺、サンプルある?
もしあったら見せて欲しい。

昨日あたりからcakePHPを使い初めたのだけど、たしかにWebにあった
チュートリアルに沿って作ると、モデルがヴァリデーションだらけに
なりそうなので。
0170nobodyさん2008/03/18(火) 00:22:51ID:???
>>169
YAMLの使い方ググれよ
0171nobodyさん2008/03/18(火) 00:52:36ID:???
>>164
いちいちコード書かないとわからんのか
設計とかパターンとか学べ
0172nobodyさん2008/03/18(火) 03:38:03ID:???
>>164
一行レスとか煽りに一々反応すんなよ
荒れるだけだよ
0173nobodyさん2008/03/18(火) 04:22:49ID:???
つーかこんで良いんじゃねぇの?

controler
$url = ''http://;
$data = $this->Model->ほげほげ();
if (unko) {
 $url = $data["url"]
}
$this->set('url',$url);

view
$form->input('TestUser.url', array('value'=>$url)
0174nobodyさん2008/03/18(火) 09:45:05ID:LdGu1qpa
>168のscaffoldの奴です。
bakeでいろんなテーブルを焼いてみると、まともにscaffoldが働くものもありました。
焼かれたVIEWのIndex.thtmlを見てみると、テーブルの値を表示する所で、配列の添え字が記入されていませんでした。
おそらくテーブルの定義の仕方に問題があるように思います。
テーブルの定義は、まず成功した方が
Table "public.users"
Column | Type | Modifiers
------------+------------------------+-----------
id | integer | not null
username | character varying(255) | not null
password | character varying(32) | not null
first_name | character varying(255) | not null
last_name | character varying(255) | not null

次に失敗した方が
Table "public.flash_tests"
Column | Type | Modifiers
--------+---------+----------------------------------------------------------
id | integer | not null default nextval('flash_tests_id_seq'::regclass)
count | integer | not null

です。fefaultの所は削除しても変わりませんでした。
心当たりのある方、助言お願いします。
0175nobodyさん2008/03/18(火) 09:53:20ID:???
>>173
なにその汚ねーコードw
0176nobodyさん2008/03/18(火) 09:54:14ID:???
>>173
それだけはありえん
0177nobodyさん2008/03/18(火) 13:01:47ID:???
ありえんとかいってないで、
自分のコードをかけよ。
0178nobodyさん2008/03/18(火) 13:03:45ID:???
初期値の設定は、前回入力値の設定と同じことなんだから
コントローラで設定すべきだよな。

ビューはただ表示するだけ。
0179nobodyさん2008/03/18(火) 15:07:02ID:???
>>178
根拠の無い理由は自分の心の中でしまっとけな
0180nobodyさん2008/03/18(火) 15:09:23ID:???
>>177
167に書いたよ、この美しいコードに反論あるんか?
0181nobodyさん2008/03/18(火) 15:11:30ID:???
>>173
こんなコード書く奴がこのスレにいるとは
CakePHPの住人レベルて・・・
0182nobodyさん2008/03/18(火) 15:13:24ID:???
明らかにPHP初心者がCakePHPから始めましたみたいなのが多いな
>>173を見て確信した
0183nobodyさん2008/03/18(火) 15:20:33ID:???
ああ。ガチだな。
0184nobodyさん2008/03/18(火) 15:59:35ID:???
最近10分以内に似たようなレスが連続で湧くな
0185nobodyさん2008/03/18(火) 16:06:00ID:???
じゃあアンケートとります。

フォームの初期値はどこで設定すべきでしょう。

1.コントローラ
2.ビュー
3.モデル
4.モデルに初期値情報が有り、それをコントローラが取得してビューに渡す

俺は4。面倒だとか、フォームによって初期値が違う場合は1
0186nobodyさん2008/03/18(火) 16:45:53ID:???
>>185
俺はビューかな。
0187nobodyさん2008/03/18(火) 16:51:14ID:???
>>185
俺もビュー
管理するのが楽
コントローラーに書くとみにくくなる
ビューだと全くみにくくない、それどころか見通しがよくなる
0188nobodyさん2008/03/18(火) 16:53:16ID:???
>>185
モデルをこれ以上見にくくするのはよくないよ
バリデータ
アソシエーション
バリデータ関数
これだけでもずいぶん見にくいのに
0189nobodyさん2008/03/18(火) 16:54:16ID:???
コードの見渡しがよくなって
変更が楽な場所がベスト
0190nobodyさん2008/03/18(火) 16:55:18ID:???
>>185
初心者の多いここでアンケートとっても意味が無いけどなw
0191nobodyさん2008/03/18(火) 17:06:20ID:???
常識的に考えればビューだけど
ここは初心者が多いからね
0192nobodyさん2008/03/18(火) 18:10:04ID:???
>>188
お前、まさか、それだけしかないんじゃないだろうな・・・
モデルは設定ファイルじゃないぞ。

ビジネスロジックを書く所がモデルだぞ。
0193nobodyさん2008/03/18(火) 18:11:06ID:???
ビューは基本的に表示のみを行う場所。
初期値をビューで設定するのは変。
01941732008/03/18(火) 19:04:45ID:???
確かにてきとーに書いた部分はあるが
何でダメなの?因みにcakeは1週間ぐらいしかやってない
あとコントローラに初期値は
ロジックとviewの分離等から考えると微妙だが
めんどくさかったんだそこはごめんw
0195nobodyさん2008/03/18(火) 19:29:58ID:5PAxNly0
なんでここって初心者しかいないの?
0196nobodyさん2008/03/18(火) 19:38:40ID:???
なんでここって猿みたいに同じ事しか書けない人が多いの?
0197nobodyさん2008/03/18(火) 20:28:19ID:???
>>193
smartyだってテンプレート側で初期値いれらるようになってる
おまえの頭が変
0198nobodyさん2008/03/18(火) 21:23:10ID:???
>>193

携帯用サイト作るとわかると思うけどあんまりガンガン表示する内容まで
コントローラーで固めない方がいいよ。

携帯用サイト用の コントローラーまで作る羽目になるから。
0199nobodyさん2008/03/18(火) 22:59:49ID:???
セッションって

$_SESSION[''][''] を直接使った方が早い感じがすんだけど、みんなどうしてます?

やっぱり $this->Session->read を使った方がいいんですかね。
0200nobodyさん2008/03/18(火) 23:48:37ID:???
>>197
> smartyだってテンプレート側で初期値いれらるようになってる
入れられるようになっているからって、入れるべきということにはならないだろ?
モデルやコントローラ側で初期値入れられるようになっているんだしさ。

> 携帯用サイト用の コントローラーまで作る羽目になるから。
その理屈がよくわからん。初期値の話をしているのに
なんでもコントローラでやると拡大解釈してしてないか?

それにビューに書く場合、携帯用サイトとPC用サイトで分けるもんだから、
ビューに初期値を書いたら、コードが重複するじゃん。
だからビューだけはありえない。そう思わないか?

ちなみに、おれは初期値はモデルに書くもんだと思っているが。
0201nobodyさん2008/03/19(水) 01:30:55ID:???
>>199
オブジェクトで呼んだ方がオーバーライドもできるし
後から制御するのが楽
0202nobodyさん2008/03/19(水) 01:36:20ID:???
柔軟な制御をするためにデータはオブジェクト経由で呼ぶべき
オブジェクトで呼ぶことに意味がある
それは、オブジェクトにはいってるデータを
外から制御できるからだ
0203nobodyさん2008/03/19(水) 07:53:45ID:???
>>201
>>202

cakephp やってて

「意味あるのかな・・・」と思ってましたけど、やっぱり意味があったんですね。

勉強になります。ありがとうございます。
0204nobodyさん2008/03/19(水) 12:54:14ID:???
例えばCakePHPでブログシステムを作るとして、
ユーザ(usersテーブル)、投稿(commentsテーブル)が一対多の
関係にある時、あるviewで、
 ユーザ1
  コメント1-1
  コメント1-2
  コメント1-3
 ユーザ2
  コメント2-1
  コメント2-2
  コメント2-3
   ・
   ・

という表示をさせたいのですが、view、controllerをどう書いてよいか悩んでいます。
modelで、hasManyリレーションを貼るところ迄は合っていますか?

どこか、参考になるページがあれば教えて下さい。
0205nobodyさん2008/03/19(水) 19:47:56ID:???
UserモデルにはhasManyプロパティを作ってcommentsを持っていることを示す。
CommentモデルにはbelongsToプロパティを作って、usersに依存していることを示す。

コントローラのアクションでUserモデルからデータを引っ張ってくる
アソシエーションによりCommentもくっついてくる。

コントローラのアクションで、引っ張ってきたデータを
ビューに詰め替える。

ビューは渡されたデータをぐるぐるして表示する。
0206nobodyさん2008/03/19(水) 21:42:10ID:???
表示するユーザ数+1のクエリが発行されるからアクセス数の多い中規模〜大規模なサービスでは使えない。
この辺言及する人が少ないのはcakeユーザのレベルが低いからだろうか。
0207nobodyさん2008/03/19(水) 22:11:32ID:???
> 表示するユーザ数+1のクエリが発行されるから
何を言っているんだ?

自分のレベルが低いと告白しているのか?
0208nobodyさん2008/03/19(水) 22:21:01ID:???
>>206
だって、表示するユーザ数+1のクエリが発行されないから。
誰も指摘しないのは当たり前。
0209nobodyさん2008/03/19(水) 23:03:06ID:XOo5uLlV
>>205
返信ありがとうございます。

> コントローラのアクションでUserモデルからデータを引っ張ってくる
> アソシエーションによりCommentもくっついてくる。

なるほど。
きちんとリレーションを設定すれば、コントローラ側ではUserモデル
からデータを引っ張るだけで、芋づる式にcommentsを取れるんですね。

> ビューは渡されたデータをぐるぐるして表示する。

今、$usersをforeachで回してる状態なんですが、これを$usersと
$commentsの二重ループにすればオッケーですかね。
ちょっとやってみます。


>>206
論点がずれてませんか?

そもそも、具体的なアクセス数、H/Wの規模を示さないと意味のない
指摘じゃないでしょうか。
この方法だと中規模以上に向かないから、この方法を使うといいよ、
と言うのならまだ分かるのですが。
0210nobodyさん2008/03/19(水) 23:13:10ID:???
>>207
>>208
お前らのcakeはこの時どういったクエリが発行されんの?

select ... from users ... (id 1,3,5のユーザがヒットする)
select ... from comments where user_id in (1) ...
select ... from comments where user_id in (3) ...
select ... from comments where user_id in (5) ...
0211nobodyさん2008/03/19(水) 23:28:29ID:???
http://72.14.235.104/search?q=cache:frA0R04esqgJ:ameblo.jp/lamp777/entry-10072229261.html+cakephp+%E3%82%A2%E3%82%BD%E3%82%B7%E3%82%A8%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3+left+join&hl=ja&ct=clnk&cd=10&gl=jp

そして、この findAll() で実行された SQL は以下の通り。

SELECT `Job`.`id`, `Job`.`com_id`, `Job`.`name`
FROM `jobs` AS `Job` LEFT JOIN `coms` AS `Com` ON `Job`.`com_id` = `Com`.`id`
WHERE 1 = 1 ORDER BY `Job`.`id` ASC LIMIT 10;

0212nobodyさん2008/03/19(水) 23:42:19ID:???
belongsToじゃなくてhasManyのこと言ってるんだけど。
参照の方向が違う。
0213nobodyさん2008/03/20(木) 00:12:41ID:???
といわれてもなぁ、

hasmanyとかconditionsにどういうSQLで
JOINするかをSQLの断片で書いているしなぁ。
JOINしているとわかりそうなものだがなぁ。
0214nobodyさん2008/03/20(木) 00:28:36ID:???
子はJOINできないじゃん。
結局「表示するユーザ数+1のクエリが発行される」が間違ってることは示せないんでしょ。
実際やってみてクエリログ見ればすぐ分かるはずなんだが。
0215nobodyさん2008/03/20(木) 00:37:04ID:???
>>210
素人乙!
観点がずれてるよPHPの基礎からやりなおしてね
0216nobodyさん2008/03/20(木) 00:40:19ID:???
1回のクエリで全てが補えることに超したことはない
その代わり複雑なSQL文を書かないといけないから
CakePHPの負荷よりも生産性というスタイルに合わないがな
ループの中でクエリをぐるぐる発行しまくると負荷が高くなる
0217nobodyさん2008/03/20(木) 00:43:11ID:???
>>215
結局こういうのが出てくるのか・・・
ほんとバカばっかだなー

それじゃ論点がどうずれてるか説明もらってもいい?
210での発言にphpの基礎は全く関係ないから、それのほうが論点ずれてると思うのだが。
んで、実際お前のcakeではこの処理でどういうクエリが発行されんの?
0218nobodyさん2008/03/20(木) 00:47:43ID:???
>>209
よほどのことがない限り
ループの中にループは入れない方がいいよ
負荷がかかるからね。
0219nobodyさん2008/03/20(木) 00:52:19ID:???
CakePHPのおかげで
とてつもなく負荷の高いシステムがたくさん世に出そうだな
こりゃサーバー会社が儲かるな
sakuraインターネット株でも買うか!
0220nobodyさん2008/03/20(木) 05:31:17ID:???
1.2のpaginate機能はつかえねーな
柔軟な制御ができん、
ページリンクに検索項目のパラメーター付加できない、というか
できるけど、面倒なことしないとダメくさい
ソート項目のパラメータは標準で付加できるようだが
02212092008/03/20(木) 10:56:59ID:mwRuCB98
>>218

私の技術力だと、二重ループ以外に実現する方法が思いつかないのですが、
他によい方法があったら教えてもらえますか?

ユーザ毎のコメントを表示する機能はパスするにしても、
同様にmasManyリレーションのテーブルを親子両方とも表示したい
機会はあると思うので。


負荷という意味では、masManyの定義でlimit=>10とする事で大量の子を
取得しないように、というのは心がけています。
0222nobodyさん2008/03/20(木) 11:48:27ID:???
>>219
もっと負荷の高いsymfonyもありますぜw
0223nobodyさん2008/03/20(木) 12:36:12ID:???
というか、プライマリーキーで
データを取得することが
負荷が高いと思っているのかな?

JOINの方がよっぽど負荷高いですぜ。
0224nobodyさん2008/03/20(木) 12:40:34ID:???
DB周りじゃないだろ多分
0225nobodyさん2008/03/20(木) 12:58:50ID:???
>>210
> お前らのcakeはこの時どういったクエリが発行されんの?

こういうクエリが発行されますがなにか?

select ... from users ... (id 1,3,5のユーザがヒットする)
select ... from comments where user_id in (1, 3, 5 ) ...
0226nobodyさん2008/03/20(木) 13:35:31ID:???
CakePHPのどんどん負荷をかけて生産性を上げなさいというスタイルが
自分の性格に合わない気がしてきた
0227nobodyさん2008/03/20(木) 13:39:58ID:???
まだ、例のアンチが常駐しているのかw

CakePHPはメモリも食わないし、負荷も高くない。
生産性は高い。
0228nobodyさん2008/03/20(木) 13:40:43ID:???
アンケート

1.ページ送りの絞り込み条件パラメータをセッションで持たせている
2.ページ送りの絞り込み条件パラメータをURLの後ろに繋げてる(CakePHP1.1 paginate)
3.ページ送りの絞り込み条件パラメータをURLの後ろに繋げてる(CakePHP1.2 pagination)
0229nobodyさん2008/03/20(木) 13:45:28ID:???
>>228

4. 基本は3と同じだが、場合によってpagination等をオーバーライドして独自の条件を追加している。
0230nobodyさん2008/03/20(木) 13:45:45ID:???
>>227
矛盾してるな。それらは反比例の関係にあるからな
0231nobodyさん2008/03/20(木) 13:45:54ID:???
>>226
たしかに、
●自分の用途に合わせて、全てのコードとHTMLを一から作成したシステム
●作り込み部分は最小限にして、大半のコードはcakePHP任せにしたシステム
を比べると、負荷は、一から作成したシステムの方が、余分なものがない分、
軽くできるかもね。

まあそこはトレードオフの部分だから、自分に向いてないと思ったら、
cakePHP以外のやり方を模索すればいいと思うよ。
0232nobodyさん2008/03/20(木) 13:47:58ID:???
>>230
よくわからんが、いまどき生産性の悪いほうを
選びたいのか?
0233nobodyさん2008/03/20(木) 13:49:21ID:???
負荷が高いシステムを作っているところは
どこでもフレームワークを使っている。
0234nobodyさん2008/03/20(木) 13:50:32ID:???
>>229

View側で
$paginator->prev()
$paginator->next()

の第2引数に絞り込み条件を配列で入れてやら無いと
URLの後ろにパラメーターが付加されてなくない?

http://localhost/cake/test/index/page:1/parameta:hogehoge
みたいなかんじ
0235nobodyさん2008/03/20(木) 13:55:14ID:???
>>234
いまソースが手元に無くて忘れたが、CakePHP1.2でかなり改善された。
そういえば、そういうパラメータを”コントローラ”側で追加していたきもする。
コントローラーのpagination変数だったっけ?
pagination[モデル名]だっけ?
まあわすれた。
0236nobodyさん2008/03/20(木) 13:55:53ID:???
>>233
どちらかと言うと、「負荷が高いシステム」と言うより、
「大規模なシステム」はフレームワークを使ってるという感じじゃない?

そうしないと、コーディングや保守が大変だもんなあ。
■ このスレッドは過去ログ倉庫に格納されています