【PHP】フレームワーク CakePHP 12ホール目【笑】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/07/01(金) 16:33:46.28ID:???CakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう
※sage推奨
※質問時もsageること
※他フレームワークとの比較等はスレ違いです
テンプレは>>1-5くらい
■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
the Bakery
http://bakery.cakephp.org/
CakeQs
http://cakeqs.org/
CheatSheet (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf
github - cakephp
http://github.com/cakephp
■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
http://book.cakephp.org/ja
前スレ
【PHP】フレームワーク CakePHP 11ホール目【v1.3】
http://hibari.2ch.net/test/read.cgi/php/1297860755/
0577nobodyさん
2011/10/05(水) 14:20:56.50ID:???その10秒かかるページが表示されるまで表示されないんだけど、なぜこうなるの?
cakePHP使わずにやれば表示されるし
DBかファイルがロックされてるのかと思って調べたけどよくわからなかった。
テーブルが被らず、ビューキャッシュされてるページでもダメだった。
php初めて一ヶ月だから勘違いかもしれないが。 ver1.3.7
0578nobodyさん
2011/10/05(水) 16:24:00.48ID:???2.0は不要なファイルは読み込まないようになったんじゃなかったっけ?
ただそれだけで他のフレームワーク比で軽くなるとも思えないけど
0579nobodyさん
2011/10/05(水) 18:01:54.87ID:???余計なファイル読まない・実行しないなら
内部メモリも使用しないから、軽くなりそうなんだけどな。
2.0の情報が少ないから、
どの程度まで改善されているのか分からないのが不安だ
0580nobodyさん
2011/10/05(水) 22:17:47.97ID:???CakePHPは、やりたい事を見た目楽にできる、クールに記述できる、ということにコードの行数を割いてるから、そんな早くもならないt思うよ
よーするに、規約が複雑になりすぎたんだな
そのお陰で、他のフレームワークと比べてメソッドが肥大化している
0582nobodyさん
2011/10/05(水) 23:41:53.02ID:???csvファイル読み込む方式はメモリ食いつくしてサーバーダウンするからやめとけ
csvデータをキャッシュで維持させると、さらに簡単にサーバーは死ねる
0583nobodyさん
2011/10/05(水) 23:51:12.22ID:???複合主キーをサポしてないってことは
ソーシャルゲームで友達テーブルとかつくったら
ORマッピングで実装できんなw
友達テーブル
----------------------
自分ID(PK) 相手ID(PK)
プロフィールテーブル
----------------------
自分ID(PK) 名前
友達とプロフィールテーブル結合して
名前を出すなら、ベタsqlで実装せんとあかんなw
0585nobodyさん
2011/10/06(木) 00:40:14.05ID:???sql負荷について軽視しすぎてる
革命を起こすなら
アソシエーション に
フルスキャンデバッグ機能や
カーディナリティデバッグ機能を付ければよい
要は実行計画の自動化
0586nobodyさん
2011/10/06(木) 00:48:51.62ID:???テーブルの正規化を自動でしてくれるツールを作ろうと思ってる。
DB設計を最適化するツール
phpMyadminに組み込めば面白いことになる。
0587nobodyさん
2011/10/06(木) 00:51:21.72ID:???0588nobodyさん
2011/10/06(木) 01:15:30.66ID:???よくわからんバグが多い
APCと一緒に使うとセッションがバグって使えなかったり
散々な目に遭った
0589nobodyさん
2011/10/06(木) 01:57:33.21ID:???0590nobodyさん
2011/10/06(木) 01:59:50.52ID:???モデルでやりとりさせてよ。。
0591nobodyさん
2011/10/06(木) 02:04:19.35ID:???0592nobodyさん
2011/10/06(木) 08:44:16.16ID:???工数
大規模アクセス前提で
0593nobodyさん
2011/10/06(木) 09:45:30.62ID:???rails人口は、まだ少ないので
一手が欲しくなったときが致命的
プログラムを極めたいなら rails
webで挑戦して手っ取り早く稼ぎたいなら php
0594nobodyさん
2011/10/06(木) 12:01:32.21ID:???そこがすごい直感的じゃないし
分かりにくいよね
なんでrailsみたいにオブジェクトにしなかったんだろ
0596nobodyさん
2011/10/06(木) 12:26:12.75ID:???0597nobodyさん
2011/10/06(木) 12:26:31.55ID:???どのフレームワークも慣れれば工数の違いは、ほとんどない。
railsの場合は1からライブラリを作る機会が多いと思う。
Cakephpの場合は使いたいライブラリーは、ぐぐったら、その辺に転がってることが多い。
CakePHP 使えるものは、使わせてもらう
rails 使えるものがないから、自分で作る
この差が工数として影響がでる。
セキュリティー面はどんなフレームワークでも
自身で対策コードを書くしかない。
0598nobodyさん
2011/10/06(木) 12:40:28.32ID:???ありがとう。覚えやすさはどちらかな?
CakePHPで一番有名な認証系(ログイン、サインアップ、メールでのアクティベート)プラグインって何になりますか?
0599nobodyさん
2011/10/06(木) 13:27:28.33ID:???0600nobodyさん
2011/10/06(木) 13:46:04.40ID:???あと確認画面等がついているAuth関連のプラグインも知りたいよ。ログイン以外全部自分で作るのはけっこう大変なんだ
0601nobodyさん
2011/10/06(木) 14:31:07.87ID:???0602nobodyさん
2011/10/06(木) 14:37:49.66ID:???0604nobodyさん
2011/10/06(木) 17:16:41.59ID:???ttp://d.hatena.ne.jp/basuke/20110908/1315479931
0605nobodyさん
2011/10/06(木) 17:25:40.33ID:???これ見ると、俺も”オレオレ”ではエンティティ方式で書いてた。
けど、この書き方だと統一感無いので配列の方が良いと思って今に至る。
人それぞれ好みがあるんだな。
0606nobodyさん
2011/10/06(木) 18:21:01.06ID:???0607nobodyさん
2011/10/06(木) 18:21:07.06ID:???basuke氏って今PHPやってるんだ。昔からのMacユーザーならノメモバスターには世話になったはず
0608nobodyさん
2011/10/06(木) 19:41:43.25ID:???ユーザーが少ない
昔は多かったのかな、2009年あたりのブログ記事はいっぱい引っかかるね
0609nobodyさん
2011/10/06(木) 21:10:11.81ID:???0611nobodyさん
2011/10/06(木) 21:22:38.07ID:???0612nobodyさん
2011/10/06(木) 21:44:51.07ID:???0613nobodyさん
2011/10/06(木) 22:20:04.58ID:???オブジェクト指向に慣れると面倒臭いだろ
0614nobodyさん
2011/10/06(木) 23:05:55.82ID:???0615nobodyさん
2011/10/07(金) 02:58:35.15ID:???オブジェクトのほうが柔軟に対応できるし、DRYにしやすい。
まあ結局は好みなのか。
0616nobodyさん
2011/10/07(金) 03:28:21.26ID:???0617nobodyさん
2011/10/07(金) 09:31:35.56ID:???一つ一つコードを書いていくのか、プラグインなど利用しているのか。
0618nobodyさん
2011/10/07(金) 16:34:15.60ID:???0619nobodyさん
2011/10/07(金) 22:27:16.26ID:???0620nobodyさん
2011/10/07(金) 23:39:44.94ID:???その手があったか
ソッチの方がシンプルに実装できそうだな
俺はわざわざprefixとか利用してadmin_indexみたいな形でやってたわ
0621nobodyさん
2011/10/07(金) 23:46:38.35ID:???すっかりCakePHPの流儀に染まって忘れてた。
0623nobodyさん
2011/10/08(土) 00:57:12.99ID:???0624nobodyさん
2011/10/08(土) 01:56:19.44ID:???同じデータベースのテーブルを扱うにしても
そのテーブルにあえて違うオブジェクト名を用途別につけてあげて、
それぞれの用途でそのオブジェクト(テーブル)を操作していく。
そんな認識であってるのかな?
0625nobodyさん
2011/10/08(土) 08:50:18.96ID:???別に、RDBのテーブルだけじゃなくて、LDAPのデータを取りに行く(っつーか、
データを保持っつーかアクセスする)もんもオブジェクトとして考えられるし、
アクセスする方法があるのなら、ブックマークにアクセスしてオブジェクトとして扱うブックマークオブジェクトも考えられる。
たまたま、RDBのテーブルの内容が、オブジェクトとして扱えるだけ、ってーことなんよ
(まぁ、「たまたま」じゃなくて、そういう風に設計してるからなんだけどな)
0626nobodyさん
2011/10/08(土) 08:53:17.08ID:???>そのテーブルにあえて違うオブジェクト名を用途別につけてあげて、
>それぞれの用途でそのオブジェクト(テーブル)を操作していく。
同じテーブルでも、抽出の仕方や、扱い方で別物として分けた方が分かりやすい、という場合に違う名前のオブジェクトになる、ってーことで、「あえて」じゃないかな
例えば、ユーザーテーブルを、パスワードとの照合も合わせた機能を認証Objectとして扱う場合、とか。
0627nobodyさん
2011/10/08(土) 13:11:35.70ID:???本来、ヘルパーの使用ってコントローラーでやるべきじゃね?
出来るためビューにPHPのコード書かないのが望ましい気がする。
0628nobodyさん
2011/10/08(土) 13:13:26.29ID:???出来るためビューに → 出来るだけビューに
0629nobodyさん
2011/10/08(土) 13:41:18.79ID:???だが、例えばHTMLとして出力するときと、CSVとして出力する時はエスケープの仕方が違うので、最低限そういった処理をヘルパーとしてviewでしているのは正しい。
0630nobodyさん
2011/10/08(土) 16:07:36.63ID:???if ($data['User']['status'] == 1) {
echo '公開';
}
みたいな書き方するけど、こういうのってビューで書くのおかしいと思う。
0631nobodyさん
2011/10/08(土) 16:25:05.56ID:???<? echo $model->getStatus(); ?>
みたいにしたい。
getStatusの中で分岐。
0632nobodyさん
2011/10/08(土) 17:05:40.35ID:???<?php if (!$this->Session->check('Auth.User')): ?>
<a href="<?php echo Router::url('/users/register'); ?>">新規登録</a>
<?php endif; ?>
こういうのもあなた的にはおかしいんですか?
0633nobodyさん
2011/10/08(土) 17:06:25.80ID:???「表示を司るプログラムを書く場所」だと思えばいいんじゃないの
>>631
elementからrequestActionを投げるのがそれに近いのでは。
0634nobodyさん
2011/10/08(土) 18:11:29.06ID:???そうすると、どう考えてもビューをデザイナーがいじる事は無理だよね。
CMSでよくある、管理画面からテンプレート(ビュー)を編集とかも。
0635nobodyさん
2011/10/09(日) 00:02:17.84ID:???ケースバイケースだけど
これは、デザイナーよりの分岐なので
デザイナーに編集してもらった方が楽
これくらいの分岐条件ならデザイナーでも、わかると思う。
これを関数で処理するとなれば、HTMLタグを関数内に入れる事になる
要は新規登録のリンクをヘルパーとして扱うのは、効率的に悪い。
新規登録のリンクは、関数として何度も使うことが無い。
新規登録、会員登録の分岐は、それ用にビューをつくっておいて
メインのビューから読み込ませればよい
0636nobodyさん
2011/10/09(日) 01:06:32.27ID:???効率と保守性の問題。
0637nobodyさん
2011/10/09(日) 01:12:35.73ID:???みんなよくやるね
0638nobodyさん
2011/10/09(日) 01:39:02.71ID:???phpコードを埋め込んだビューにデザイナが手を付けることはない。
デザイン出来上がり
↓
プログラム組み込み
0639nobodyさん
2011/10/09(日) 03:21:51.21ID:???0640nobodyさん
2011/10/09(日) 03:28:03.09ID:???0641nobodyさん
2011/10/09(日) 12:35:10.57ID:???0642nobodyさん
2011/10/09(日) 14:10:24.41ID:???0643nobodyさん
2011/10/09(日) 20:53:40.00ID:???configフォルダのこと?
>>642
bootstrapだと全ファイルにincludeされて重くならないかな
気にするほどではない?ファイルサイズは100KBないぐらい
0644nobodyさん
2011/10/09(日) 21:57:21.11ID:???で、bootstrap.phpでincludeしている。
この方が自分が見た目でも分かりやすし、管理しやすいよ。
0645nobodyさん
2011/10/09(日) 22:51:40.43ID:???0646nobodyさん
2011/10/09(日) 22:58:39.45ID:???Configureクラスに、必要に応じて設定を読み込ませられるメソッドがあった、ってーこと。なんだったかな。。。
そいつを使うと、確かconfigフォルダにファイルを置いておけば、ファイル名渡してやると必要に応じて読み込めたよーな。
0647nobodyさん
2011/10/09(日) 23:59:56.16ID:???mypageというコントローラーがあって、
日記の表示なら/mypage/diary_list、編集なら/mypage/diary_edit
というアクションにしているのですが、
これをするとmypage_controller.phpのソースが長くなります。
皆さんはどうしていますか?diary_controller.phpを作って
そこでindexとかeditのアクションを作っていくパターンでしょうか?
0649nobodyさん
2011/10/10(月) 02:48:07.86ID:???言語というフォルダがあるとして
1.Japanese
2.English
3.Spanish
4.Chinese
とレコードがあるとしたら
リレーションキーとなるフィールドは別途数字フィールドを用意したほうがいいですか?
それとも
JAN
ENG
ESP
CHN
のように省略系の入った文字列フィールドで繋ぐのはありですか?
後者のほうが頭に入れておきやすいのですが
0650nobodyさん
2011/10/10(月) 02:59:56.10ID:???フォルダと書きましたが
テーブルでした。
0652nobodyさん
2011/10/10(月) 16:46:07.88ID:???いくつか方法思いついたけど、根源の「listとeditだけで気になるほどソースが長くなる」症状がどういうものかが分からんからなんとも言えん。
確か、CakePHPを使う人が勘違いするパターンとかいう話であったが、本当はモデルに実装するべき処理をコントローラーに置いてしまっていないか?見てみるといいかも
>>649
何のために言語分けるのか分からんのだけど、localeは使わないん?
0653647
2011/10/10(月) 20:56:02.88ID:???mypageというテーブルがあるのではなく、
mypageと言うのは、マイページ=会員専用のページという意味です。
diaryはタイトルとか内容がある、普通の日記です。(例として出しました)
>>652
findを書くだけでも1つのコントローラーに書いていけば長くなりませんか?
あと、652さんのレスを見ると、私の質問でいうと
「diary_list」とか「diary_edit」にするのが一般的なのでしょうか?
ソースが長くなっても視認性は劣りますが、
「みんなそうしてるよ。気にするな」であれば良いのですが・・。
0654nobodyさん
2011/10/10(月) 21:28:47.85ID:???http://d.hatena.ne.jp/hiromi2424/searchdiary?word=cakephp%20behavior
^ここのがモデルをカスタマイズする上でかなり参考になると思う。
>findを書くだけでも1つのコントローラーに書いていけば長くなりませんか?
^については、条件多ければそりゃ長くなるだろうけど・・・おいらのとこだと受け取ったパラメータ配列をfindに渡すくらいの長さになるかな。
よほどそのメソッドにおいて特殊な事をするんでない限り、モデル側に出す、というのが「良い」パターン、という感じみたいだ
0655nobodyさん
2011/10/10(月) 23:56:03.51ID:???結果をコントロールで受け取って、ビューに渡す
[HogeModel]
public function latestComments{
return $this->find('all', array(...));
}
[HogesController]
public function index()
{
$this->set('models', $this->Hoge->latestComments())
}
みたいな。
0656nobodyさん
2011/10/11(火) 00:58:11.55ID:???基本的にはこんな感じなんだな。ってのがbakeで生成されたコードみればだいたいわかるしょ。
0657nobodyさん
2011/10/11(火) 02:08:32.71ID:???0658647
2011/10/11(火) 02:55:12.36ID:???findの書き方は別として、私が悩んでいるのは
>「diary_list」とか「diary_edit」にするのが一般的なのでしょうか?
という部分であったりもします。
>>655さんのレスを見ると、diary_list・diary_editみたいなアクションを
コントローラーに作成していくパターンで良いのかもしれませんが、
普通は、「機能名_動作」というアクションにするので、
ここに違和感があるわけです。
この部分に関して言及されていないので、
気にしなくても良いのかもしれませんが、
気にしないとURLが変わるので、私としては気になります。
0659647
2011/10/11(火) 03:01:25.43ID:???----------
>>654-655
findの書き方は別として、私が悩んでいるのは
>「diary_list」とか「diary_edit」にするのが一般的なのでしょうか?
という部分です。
>>655さんのレスを見ると、diary_listやdiary_editみたいなアクションを
コントローラーに作成していくパターンで良いのかもしれませんが、
普通は、「機能・コンテンツ名=コントローラー」「動作=アクション」になるので、
diary_listみたいに1つのアクションにするのは違和感があります。
この部分に関して言及されていないので、
気にしなくても良いのかもしれませんが、
気にしないとURLが変わるので、私としては気になっています。
0660nobodyさん
2011/10/11(火) 07:00:41.81ID:???0661nobodyさん
2011/10/11(火) 12:50:17.13ID:???0662nobodyさん
2011/10/11(火) 14:18:27.66ID:???function内で設定した内容を次回に持ち越す
というような事をするにはどうすればよいのでせうか?
▲保存されたデータがあるか
┃保存されたデータの呼出し
╋━━━━
┃SQLの発行
┃呼び出したデータの保存
▼
みたいな
0663nobodyさん
2011/10/11(火) 14:41:18.46ID:vJdgBzio趣味程度に使っているよ
0664nobodyさん
2011/10/11(火) 14:55:23.16ID:???例えば Test1 テーブルと Test2 テーブルがあったとして、
この2つのテーブルから Test1, Test2 それぞれでなく、
あわせて新着順に10個の項目を取得する方法はありますでしょうか?
0665nobodyさん
2011/10/11(火) 15:19:09.96ID:???0666nobodyさん
2011/10/11(火) 20:36:20.80ID:???0667nobodyさん
2011/10/11(火) 23:51:50.92ID:???cache
普通はよくアクセスするページの保存に使うが、sqlの結果そのものを保存する場合にも使っちまおう、というのも見かけた事がある。ADOdbの確かメソッド名のどこかにcacheとか名前ついてるやつ。
だがまぁ、ふつうは次回に持ち越すなどと考えないでpagenationを使うもんだ
0668nobodyさん
2011/10/12(水) 10:56:19.39ID:???0669nobodyさん
2011/10/12(水) 11:34:38.64ID:???Aを表示(SQL読み込み)→B表示→ページ移動→A表示(再読み込み)
って流れになってるから
Aを表示(テーブル保存)→B表示→ページ移動→A表示(保存したテーブルから読み込み)
っていうのをやりたい
0670nobodyさん
2011/10/12(水) 14:18:11.65ID:???コントローラーからfindの結果を取得して
それをpaginateにしてビューに渡すと言った事が出来るのでしょうか?
もし出来る場合はソースの書き方を教えて下さい。
0671nobodyさん
2011/10/12(水) 14:29:40.83ID:???$data = $this->paginate();
$this->set('data',$data);
}
0672nobodyさん
2011/10/12(水) 16:09:12.63ID:???function index(){
$this->paginate = $this->ModelName->methodName();
$this->set('data', $this->paginate());
}
0673nobodyさん
2011/10/12(水) 16:39:49.89ID:???それは普通にコントローラーでpaginateしてるだけですよね?
そうではなくて、findの箇所はモデル内で作成しています。
それを取得してpaginateのfind箇所を置き換えられないかと思い質問しました。
#test_controller
$list = $this->Test->getFind($options);
$this->set('test_list', $this->paginate($list));
こういうイメージです。(もちろんこれでは動きませんが...)
0674nobodyさん
2011/10/12(水) 17:02:09.88ID:???モデルの中で自己流でfindをオーバーライドしてるなら
_findAll,_findCount,_findFirstあたりもきちっとつくらねばならん。
この辺はPagenateがどういう動きをしてるか、Modelクラスのソース追って下さい。
0675nobodyさん
2011/10/12(水) 17:29:23.61ID:???ずーっとJavaやってたからJavaベースで思い浮かぶのがそもそもの敗因
0676nobodyさん
2011/10/12(水) 18:01:53.84ID:???1つのファイルにif入れたり、コントローラーからsetするのも限界があるし。
(ソースが汚くなって見づらいから、ファイルを分けた方が視認性が良くなる
■ このスレッドは過去ログ倉庫に格納されています