【PHP】フレームワーク CakePHP 3ホール目【本命】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/03/14(金) 15:16:00ID:HF9x5ODX10分で作る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/
0160nobodyさん
2008/03/17(月) 16:22:23ID:???0161nobodyさん
2008/03/17(月) 16:39:49ID:???その辺て自動でやってくれないんだっけ?
再編集のときの話だったら、データ構造を見て本来はDBから持ってくるデータを用意しておいてあげればいい
またはデータが無いと判断したときだけ、value入れればいいんじゃね
0162nobodyさん
2008/03/17(月) 18:22:09ID:???タイムリーだな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:???0165nobodyさん
2008/03/17(月) 22:07:27ID:6Wsl0FQ6エラーの内容は
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のみのシンプルなものです。
0167nobodyさん
2008/03/17(月) 22:21:02ID:???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:6Wsl0FQ6801:foreach ($objRegistryModel->hasAndBelongsToMany as $relation => $relData) {
でした。何なんでしょうか。アソシエーションでしょうか。
0169nobodyさん
2008/03/17(月) 22:52:12ID:???この辺りの辺、サンプルある?
もしあったら見せて欲しい。
昨日あたりからcakePHPを使い初めたのだけど、たしかにWebにあった
チュートリアルに沿って作ると、モデルがヴァリデーションだらけに
なりそうなので。
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:LdGu1qpabakeでいろんなテーブルを焼いてみると、まともに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の所は削除しても変わりませんでした。
心当たりのある方、助言お願いします。
0177nobodyさん
2008/03/18(火) 13:01:47ID:???自分のコードをかけよ。
0178nobodyさん
2008/03/18(火) 13:03:45ID:???コントローラで設定すべきだよな。
ビューはただ表示するだけ。
0183nobodyさん
2008/03/18(火) 15:20:33ID:???0184nobodyさん
2008/03/18(火) 15:59:35ID:???0185nobodyさん
2008/03/18(火) 16:06:00ID:???フォームの初期値はどこで設定すべきでしょう。
1.コントローラ
2.ビュー
3.モデル
4.モデルに初期値情報が有り、それをコントローラが取得してビューに渡す
俺は4。面倒だとか、フォームによって初期値が違う場合は1
0187nobodyさん
2008/03/18(火) 16:51:14ID:???俺もビュー
管理するのが楽
コントローラーに書くとみにくくなる
ビューだと全くみにくくない、それどころか見通しがよくなる
0188nobodyさん
2008/03/18(火) 16:53:16ID:???モデルをこれ以上見にくくするのはよくないよ
バリデータ
アソシエーション
バリデータ関数
これだけでもずいぶん見にくいのに
0189nobodyさん
2008/03/18(火) 16:54:16ID:???変更が楽な場所がベスト
0191nobodyさん
2008/03/18(火) 17:06:20ID:???ここは初心者が多いからね
0192nobodyさん
2008/03/18(火) 18:10:04ID:???お前、まさか、それだけしかないんじゃないだろうな・・・
モデルは設定ファイルじゃないぞ。
ビジネスロジックを書く所がモデルだぞ。
0193nobodyさん
2008/03/18(火) 18:11:06ID:???初期値をビューで設定するのは変。
0194173
2008/03/18(火) 19:04:45ID:???何でダメなの?因みにcakeは1週間ぐらいしかやってない
あとコントローラに初期値は
ロジックとviewの分離等から考えると微妙だが
めんどくさかったんだそこはごめんw
0195nobodyさん
2008/03/18(火) 19:29:58ID:5PAxNly00196nobodyさん
2008/03/18(火) 19:38:40ID:???0198nobodyさん
2008/03/18(火) 21:23:10ID:???携帯用サイト作るとわかると思うけどあんまりガンガン表示する内容まで
コントローラーで固めない方がいいよ。
携帯用サイト用の コントローラーまで作る羽目になるから。
0199nobodyさん
2008/03/18(火) 22:59:49ID:???$_SESSION[''][''] を直接使った方が早い感じがすんだけど、みんなどうしてます?
やっぱり $this->Session->read を使った方がいいんですかね。
0200nobodyさん
2008/03/18(火) 23:48:37ID:???> smartyだってテンプレート側で初期値いれらるようになってる
入れられるようになっているからって、入れるべきということにはならないだろ?
モデルやコントローラ側で初期値入れられるようになっているんだしさ。
> 携帯用サイト用の コントローラーまで作る羽目になるから。
その理屈がよくわからん。初期値の話をしているのに
なんでもコントローラでやると拡大解釈してしてないか?
それにビューに書く場合、携帯用サイトとPC用サイトで分けるもんだから、
ビューに初期値を書いたら、コードが重複するじゃん。
だからビューだけはありえない。そう思わないか?
ちなみに、おれは初期値はモデルに書くもんだと思っているが。
0202nobodyさん
2008/03/19(水) 01:36:20ID:???オブジェクトで呼ぶことに意味がある
それは、オブジェクトにはいってるデータを
外から制御できるからだ
0203nobodyさん
2008/03/19(水) 07:53:45ID:???>>202
cakephp やってて
「意味あるのかな・・・」と思ってましたけど、やっぱり意味があったんですね。
勉強になります。ありがとうございます。
0204nobodyさん
2008/03/19(水) 12:54:14ID:???ユーザ(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:???CommentモデルにはbelongsToプロパティを作って、usersに依存していることを示す。
コントローラのアクションでUserモデルからデータを引っ張ってくる
アソシエーションによりCommentもくっついてくる。
コントローラのアクションで、引っ張ってきたデータを
ビューに詰め替える。
ビューは渡されたデータをぐるぐるして表示する。
0206nobodyさん
2008/03/19(水) 21:42:10ID:???この辺言及する人が少ないのはcakeユーザのレベルが低いからだろうか。
0207nobodyさん
2008/03/19(水) 22:11:32ID:???何を言っているんだ?
自分のレベルが低いと告白しているのか?
0209nobodyさん
2008/03/19(水) 23:03:06ID:XOo5uLlV返信ありがとうございます。
> コントローラのアクションでUserモデルからデータを引っ張ってくる
> アソシエーションによりCommentもくっついてくる。
なるほど。
きちんとリレーションを設定すれば、コントローラ側ではUserモデル
からデータを引っ張るだけで、芋づる式にcommentsを取れるんですね。
> ビューは渡されたデータをぐるぐるして表示する。
今、$usersをforeachで回してる状態なんですが、これを$usersと
$commentsの二重ループにすればオッケーですかね。
ちょっとやってみます。
>>206
論点がずれてませんか?
そもそも、具体的なアクセス数、H/Wの規模を示さないと意味のない
指摘じゃないでしょうか。
この方法だと中規模以上に向かないから、この方法を使うといいよ、
と言うのならまだ分かるのですが。
0210nobodyさん
2008/03/19(水) 23:13:10ID:???>>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:???そして、この 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:???参照の方向が違う。
0213nobodyさん
2008/03/20(木) 00:12:41ID:???hasmanyとかconditionsにどういうSQLで
JOINするかをSQLの断片で書いているしなぁ。
JOINしているとわかりそうなものだがなぁ。
0214nobodyさん
2008/03/20(木) 00:28:36ID:???結局「表示するユーザ数+1のクエリが発行される」が間違ってることは示せないんでしょ。
実際やってみてクエリログ見ればすぐ分かるはずなんだが。
0216nobodyさん
2008/03/20(木) 00:40:19ID:???その代わり複雑なSQL文を書かないといけないから
CakePHPの負荷よりも生産性というスタイルに合わないがな
ループの中でクエリをぐるぐる発行しまくると負荷が高くなる
0217nobodyさん
2008/03/20(木) 00:43:11ID:???結局こういうのが出てくるのか・・・
ほんとバカばっかだなー
それじゃ論点がどうずれてるか説明もらってもいい?
210での発言にphpの基礎は全く関係ないから、それのほうが論点ずれてると思うのだが。
んで、実際お前のcakeではこの処理でどういうクエリが発行されんの?
0219nobodyさん
2008/03/20(木) 00:52:19ID:???とてつもなく負荷の高いシステムがたくさん世に出そうだな
こりゃサーバー会社が儲かるな
sakuraインターネット株でも買うか!
0220nobodyさん
2008/03/20(木) 05:31:17ID:???柔軟な制御ができん、
ページリンクに検索項目のパラメーター付加できない、というか
できるけど、面倒なことしないとダメくさい
ソート項目のパラメータは標準で付加できるようだが
0221209
2008/03/20(木) 10:56:59ID:mwRuCB98私の技術力だと、二重ループ以外に実現する方法が思いつかないのですが、
他によい方法があったら教えてもらえますか?
ユーザ毎のコメントを表示する機能はパスするにしても、
同様にmasManyリレーションのテーブルを親子両方とも表示したい
機会はあると思うので。
負荷という意味では、masManyの定義でlimit=>10とする事で大量の子を
取得しないように、というのは心がけています。
0223nobodyさん
2008/03/20(木) 12:36:12ID:???データを取得することが
負荷が高いと思っているのかな?
JOINの方がよっぽど負荷高いですぜ。
0224nobodyさん
2008/03/20(木) 12:40:34ID:???0225nobodyさん
2008/03/20(木) 12:58:50ID:???> お前らの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:???自分の性格に合わない気がしてきた
0227nobodyさん
2008/03/20(木) 13:39:58ID:???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:???4. 基本は3と同じだが、場合によってpagination等をオーバーライドして独自の条件を追加している。
0231nobodyさん
2008/03/20(木) 13:45:54ID:???たしかに、
●自分の用途に合わせて、全てのコードとHTMLを一から作成したシステム
●作り込み部分は最小限にして、大半のコードはcakePHP任せにしたシステム
を比べると、負荷は、一から作成したシステムの方が、余分なものがない分、
軽くできるかもね。
まあそこはトレードオフの部分だから、自分に向いてないと思ったら、
cakePHP以外のやり方を模索すればいいと思うよ。
0233nobodyさん
2008/03/20(木) 13:49:21ID:???どこでもフレームワークを使っている。
0234nobodyさん
2008/03/20(木) 13:50:32ID:???View側で
$paginator->prev()
$paginator->next()
の第2引数に絞り込み条件を配列で入れてやら無いと
URLの後ろにパラメーターが付加されてなくない?
http://localhost/cake/test/index/page:1/parameta:hogehoge
みたいなかんじ
0235nobodyさん
2008/03/20(木) 13:55:14ID:???いまソースが手元に無くて忘れたが、CakePHP1.2でかなり改善された。
そういえば、そういうパラメータを”コントローラ”側で追加していたきもする。
コントローラーのpagination変数だったっけ?
pagination[モデル名]だっけ?
まあわすれた。
0236nobodyさん
2008/03/20(木) 13:55:53ID:???どちらかと言うと、「負荷が高いシステム」と言うより、
「大規模なシステム」はフレームワークを使ってるという感じじゃない?
そうしないと、コーディングや保守が大変だもんなあ。
0237nobodyさん
2008/03/20(木) 14:03:35ID:???生産性重視で高級言語(フレームワーク)で書くかの話でしかないな
0238nobodyさん
2008/03/20(木) 14:07:42ID:???CakePHPは小規模フレームワークのクセにsymfonyと同レベルくらい負荷かかりすぎ
0240nobodyさん
2008/03/20(木) 14:15:07ID:???0242nobodyさん
2008/03/20(木) 14:18:04ID:???http://www.tsujita.jp/blojsom/blog/default/PHP/2007/07/13/PHP%E3%83%99%E3%83%B3%E3%83%81%E3%83%9E%E3%83%BC%E3%82%AF-Zend-Framework-vs-Symfony-vs-CakePHP-vs-CodeIgniter-vs-PHP-on-TRAX.html
0243nobodyさん
2008/03/20(木) 14:20:54ID:???一番重要なモデルが貧弱すぎる。中規模以上ならCakePHPだな。
http://blogs.atanaka.biz/tanaka/index.php?itemid=691
・フレームワークにありがちな、あまり使わない機能が削がれている
・フレームワークにありがちな、よく使う機能もけっこう削がれている。
・だから、ステップ数が他のPHPフレームワークと比べて格段に少ない。
・だから、実行速度が速い。(ベンチマークはこちら)
・フレームワーク自体が複雑なことをしようとしていないので、潜在バグの深刻さも小さい。(たぶん)
・マニュアルがかなり読みやすく、取っつきやすい。
・cakePHPには名前のインパクトには負ける。
・ZendFramework には格式の高さで負ける。
・MVCというよりは、VCだ。モデルはあくまでもおまけ的。
・PHPがそもそもテンプレート的なんだからテンプレートエンジンいらない、と考えているふしあり。(だから速い、と)
・でも、簡単な変数置き換えの簡易テンプレートはデフォルトでついてるし、Smartyとの連携もできる。
0244nobodyさん
2008/03/20(木) 14:22:14ID:???[PHP][フレームワーク]CodeIgniterスレ
http://pc11.2ch.net/test/read.cgi/php/1177683436/
0245nobodyさん
2008/03/20(木) 14:25:59ID:???モデルはCIベースでオレオレ的に拡張した方がいい。
CakePHPの既存モデルにしっくり来ないから
まずコードが凄く見難い状態になる
結局バリデートにYAML使ったりと拡張しないいけない
0246nobodyさん
2008/03/20(木) 14:27:28ID:???中規模 CakePHP
大規模 Symfony
これでいいじゃん
0247nobodyさん
2008/03/20(木) 14:29:19ID:???中規模 CI
大規模 ここまできたらCIでいいや
0248nobodyさん
2008/03/20(木) 14:31:12ID:???0250nobodyさん
2008/03/20(木) 14:36:52ID:???$paginator->options(array('url'=>'hogehoge'))
controllerでpaginate(モデル)した後のoptionsにセットしてもurlに展開される
$this->params['paging'][モデル]['options']['hogeoge_key']='hogeoge_value'
*この方法は裏技的な気がするけど、、、
0252nobodyさん
2008/03/20(木) 14:40:57ID:???わざわざCakePHPスレを盛り上げて乙
0253nobodyさん
2008/03/20(木) 14:46:46ID:???最初は機能が少なくて、バージョンがあがるにつれて機能が追加され最終的には重くなるんだよな。
で、ほかと同等の機能を備えたときには、ほかと同等の重さになっている。
0254nobodyさん
2008/03/20(木) 15:00:55ID:???使ってる方、どうぞ書き込んで下さい。
http://pc11.2ch.net/test/read.cgi/php/1177683436/l50
0255nobodyさん
2008/03/20(木) 15:11:51ID:???0256nobodyさん
2008/03/20(木) 15:33:39ID:???hasManyアソシエーションでlimitを指定しないと確かに225のクエリになる。
ソース読んだらそのためのif文があった。これは知らなかった。サンクス
limit指定しないのが普通なのか・・・あと、なんでそういう実装にしてるんだろう。
limitでUserの件数絞るとしてもwhere user_id (1,3,5)はできると思うのだが。
0257nobodyさん
2008/03/20(木) 15:35:10ID:???> limitでUserの件数絞るとしても
limitでCommentの件数絞るとしても
■ このスレッドは過去ログ倉庫に格納されています