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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2011/07/01(金) 16:33:46.28ID:???
CakePHPは、Ruby on Railsの概念の多くを取り入れた、Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークです
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/
0545nobodyさん2011/09/30(金) 00:05:38.41ID:???
おいらはEclipse
0546nobodyさん2011/09/30(金) 12:30:59.81ID:???
NetBeans
0547nobodyさん2011/09/30(金) 13:05:43.74ID:???
おれも
eclipse pleiadesall in one
0548nobodyさん2011/09/30(金) 18:51:50.62ID:???
ただのVim
不便だとは思うが、今更切り替える気になれないので>>544でも導入してみるか
0549nobodyさん2011/10/01(土) 15:43:40.10ID:???
bakesaleを導入したいと思っています
公式から解凍したフォルダを既存サイトのフォルダにいれると競合したファイルがあったりするんですがやり方が間違っているのでしょうか
ご教示下さいますようお願い致します
0550nobodyさん2011/10/01(土) 15:51:28.83ID:jK5skCaA
Cakeで複雑なSQLを発行しようとすると、とたんにめんどうになるな
groupやjoinなどを使ったときのページングとかどうしてる?
0551nobodyさん2011/10/01(土) 21:27:06.07ID:???
>>550
複雑なSQLになるようなら
Model内で直接SQL書いてる。
0552nobodyさん2011/10/01(土) 21:28:38.37ID:???
2.0.0の正式版はいつくらいに出るんだろうねぇ・・・
0553nobodyさん2011/10/01(土) 21:59:39.27ID:???
まあ年度末くらいじゃないの
0554nobodyさん2011/10/02(日) 14:39:03.17ID:???
質問失礼します

ローカル上ではリクエスト・レスポンスの速度は問題無いのですが、レンタルサーバーにアップすると反応が10秒以上かかります

フレームワーク本体のソースは特に変更はしていません

同様の構成で、同じ様な事象の方がいましたら、問題点や解決方法を教えていただけませんか?

version 1.3.12
サーバー ロリポップ
0555nobodyさん2011/10/02(日) 15:57:59.25ID:???
>>554
データベース周りとかじゃないのかな
デバッグONにしてSQLログ見てみたら?
0556nobodyさん2011/10/02(日) 23:08:37.50ID:???
>>555

>>554です
回答ありがとうございます
Javaがメインの為、詳しい事が分から無いので、これから調べてみます
0557nobodyさん2011/10/02(日) 23:25:36.24ID:???
>>554
dnsとか...
0558nobodyさん2011/10/03(月) 01:05:34.50ID:???
>>554です

ひとまずの遅い箇所の特定が出来ました

dispatcher.php の _invoke 一行目
$controller->constructClasses()

$this->log での時間になりますが、上記の処理を通過する度に約三秒かかる事が分かりました(サーバー)
ローカルでは一秒未満です

調べたところ、コントローラーに必要なモデルを読み込むとありますが、
自身の各コントローラーで利用しているモデルは二つ以下です

何か設定の間違いや、チューニングの余地はあるのでしょうか?
0559nobodyさん2011/10/03(月) 09:59:13.23ID:???
複合主キーをサポしてないって…まどか☆マジか…
0560nobodyさん2011/10/03(月) 13:21:13.04ID:???
サイトのURLや管理者のメールアドレスをDBに保存して
システム設定として読み込めるようにしています。

ページ推移する毎に何度もfindでデータを取ってくるのではなく、
ファイルに書き出してファイルをincludeする方法があったと思うのですが、
どういうやり方だったか失念しました。
ご存じの方は教えて下さい。よろしくお願いします。
0561nobodyさん2011/10/03(月) 14:05:58.29ID:???
>>560
bootstrap.phpで、
dbから設定を読み込んでConfigure::storeでキャッシュに書き込んでおくと
各コントローラー等からはConfigure::readで読み出せるようになる。

すでにconfigureファイルのキャッシュがあるときはdbから読み出しはスルーする。
設定変更時にはキャッシュをクリアする。

と言った感じで俺はやってます。
0562nobodyさん2011/10/03(月) 14:54:28.12ID:???
>>561
それってcookbookにやり方書いてますかね?
設計図が想像出来ないので、どうググって良いかわかりません・・・
0563nobodyさん2011/10/03(月) 15:04:04.72ID:???
csvファイルをCakeのモデルのデータソースにしてDBと同じように(当然読み込みのみだが)使う方法があると聞いたんだけど
やり方わかる人いますか
本当に成功する?
0564nobodyさん2011/10/03(月) 15:35:02.70ID:???
>>563
俺は使ったこと無いけど
https://github.com/cakephp/datasources
0565nobodyさん2011/10/03(月) 15:50:56.06ID:???
特にりさーちもしてないけど、MySQLのCSVエンジンでなんとかならないかな
0566nobodyさん2011/10/03(月) 16:58:42.77ID:???
>>564
そこかー。ありがとう。今度試す
0567nobodyさん2011/10/03(月) 20:05:58.58ID:???
せめてSQLiteの方がまだ安全だと思うけどな〜
CSVなんて何書いてあるかなんてまったく保証できないし
0568nobodyさん2011/10/04(火) 22:41:08.80ID:???
railsとどちらが作業効率はいいですか?
0569nobodyさん2011/10/04(火) 22:45:11.70ID:???
rails
はい次
0570nobodyさん2011/10/04(火) 22:48:09.19ID:???
railsとphp
どちらが仕事ありますか?
0571nobodyさん2011/10/04(火) 23:07:55.06ID:???
PHP
はい次
0572nobodyさん2011/10/04(火) 23:16:29.60ID:???
railsにしか出来ないことがあれば革命が起きた事になるので
その時はrailsの仕事が増える。

以前のperl vs phpのときは
phpの方が明らかに生産性と可読性が高く
phpを選ぶ理由が沢山あった。

rubyの場合はwebに特化した言語という思想ではなく
気持ちよくプログラミングするという思想なので
HTMLにどう吐き出のが便利とか
JavaScriptと連携するには、どうしたら便利とか
Flashと連携するには、どうした便利とか
ruby開発者(松本)は、そこまで考えてはくれない。

0573nobodyさん2011/10/04(火) 23:28:24.52ID:???
http://bakery.cakephp.org/articles/lorenzo/2011/10/03/cakephp_2_0_0-rc3_freshly_sliced
>2.0.0-RC3 marks the end of the release candidates for 2.0.
RC3の次に正式版リリース!?
0574nobodyさん2011/10/04(火) 23:30:19.20ID:???
cakephpとrails
どちらが安全性は高いですか?
どちらがプラグインやソースは情報豊富ですか?
0575nobodyさん2011/10/05(水) 00:44:43.34ID:???
はい、次
0576nobodyさん2011/10/05(水) 14:16:29.39ID:???
Cakeの弱点はスピード面だと思う。
不要なファイルを全て読み込み、classを保持するから重い。

逆にこれを改善できれば(あるいは開発者が指定できれば)
Cakeが一番のFWになると思っているのですが、違いますか?
0577nobodyさん2011/10/05(水) 14:20:56.50ID:???
表示に10秒かかるページがあり、他のすぐに表示されるようなページまで、
その10秒かかるページが表示されるまで表示されないんだけど、なぜこうなるの?
cakePHP使わずにやれば表示されるし
DBかファイルがロックされてるのかと思って調べたけどよくわからなかった。
テーブルが被らず、ビューキャッシュされてるページでもダメだった。
php初めて一ヶ月だから勘違いかもしれないが。 ver1.3.7
0578nobodyさん2011/10/05(水) 16:24:00.48ID:???
>>576
2.0は不要なファイルは読み込まないようになったんじゃなかったっけ?
ただそれだけで他のフレームワーク比で軽くなるとも思えないけど
0579nobodyさん2011/10/05(水) 18:01:54.87ID:???
>>578
余計なファイル読まない・実行しないなら
内部メモリも使用しないから、軽くなりそうなんだけどな。

2.0の情報が少ないから、
どの程度まで改善されているのか分からないのが不安だ
0580nobodyさん2011/10/05(水) 22:17:47.97ID:???
2.0はまだほとんど見てないけど

CakePHPは、やりたい事を見た目楽にできる、クールに記述できる、ということにコードの行数を割いてるから、そんな早くもならないt思うよ
よーするに、規約が複雑になりすぎたんだな
そのお陰で、他のフレームワークと比べてメソッドが肥大化している
0581nobodyさん2011/10/05(水) 23:34:11.33ID:???
>>576
APC使ってる?
0582nobodyさん2011/10/05(水) 23:41:53.02ID:???
>>563
csvファイル読み込む方式はメモリ食いつくしてサーバーダウンするからやめとけ
csvデータをキャッシュで維持させると、さらに簡単にサーバーは死ねる
0583nobodyさん2011/10/05(水) 23:51:12.22ID:???
>>559
複合主キーをサポしてないってことは
ソーシャルゲームで友達テーブルとかつくったら
ORマッピングで実装できんなw
 
友達テーブル
----------------------
自分ID(PK) 相手ID(PK)

プロフィールテーブル
----------------------
自分ID(PK) 名前

友達とプロフィールテーブル結合して
名前を出すなら、ベタsqlで実装せんとあかんなw
0584nobodyさん2011/10/06(木) 00:15:09.09ID:???
>>583
モデル同士関連づけておけば勝手にとってきてくれるよ
0585nobodyさん2011/10/06(木) 00:40:14.05ID:???
CakePHPの悪い点
sql負荷について軽視しすぎてる

革命を起こすなら
アソシエーション に
フルスキャンデバッグ機能や
カーディナリティデバッグ機能を付ければよい
要は実行計画の自動化
0586nobodyさん2011/10/06(木) 00:48:51.62ID:???
俺はひそかに
テーブルの正規化を自動でしてくれるツールを作ろうと思ってる。
DB設計を最適化するツール
phpMyadminに組み込めば面白いことになる。
0587nobodyさん2011/10/06(木) 00:51:21.72ID:???
あとphpMyadminにテーブル構成のER図をcsvで吐き出す機能を組み込む予定
0588nobodyさん2011/10/06(木) 01:15:30.66ID:???
CakePHPの悪い点
よくわからんバグが多い

APCと一緒に使うとセッションがバグって使えなかったり
散々な目に遭った
0589nobodyさん2011/10/06(木) 01:57:33.21ID:???
CakePHPの悪い点
0590nobodyさん2011/10/06(木) 01:59:50.52ID:???
配列重視なところ。
モデルでやりとりさせてよ。。
0591nobodyさん2011/10/06(木) 02:04:19.35ID:???
2.0でそこは緩和されてるな
0592nobodyさん2011/10/06(木) 08:44:16.16ID:???
railsとcakephp学ぶならどちら?
工数
大規模アクセス前提で
0593nobodyさん2011/10/06(木) 09:45:30.62ID:???
>>592
rails人口は、まだ少ないので
一手が欲しくなったときが致命的

プログラムを極めたいなら rails
webで挑戦して手っ取り早く稼ぎたいなら php

0594nobodyさん2011/10/06(木) 12:01:32.21ID:???
>>590
そこがすごい直感的じゃないし
分かりにくいよね
なんでrailsみたいにオブジェクトにしなかったんだろ
0595nobodyさん2011/10/06(木) 12:02:13.74ID:???
>>593
同じものを作るときの工数についてはどうですか?
セキュリティー面も含め
0596nobodyさん2011/10/06(木) 12:26:12.75ID:???
セキュリティ面も含めたら話しにならない
0597nobodyさん2011/10/06(木) 12:26:31.55ID:???
>>595
どのフレームワークも慣れれば工数の違いは、ほとんどない。
railsの場合は1からライブラリを作る機会が多いと思う。
Cakephpの場合は使いたいライブラリーは、ぐぐったら、その辺に転がってることが多い。

CakePHP 使えるものは、使わせてもらう
rails 使えるものがないから、自分で作る

この差が工数として影響がでる。
セキュリティー面はどんなフレームワークでも
自身で対策コードを書くしかない。


0598nobodyさん2011/10/06(木) 12:40:28.32ID:???
>>597
ありがとう。覚えやすさはどちらかな?
CakePHPで一番有名な認証系(ログイン、サインアップ、メールでのアクティベート)プラグインって何になりますか?
0599nobodyさん2011/10/06(木) 13:27:28.33ID:???
さすがにそれぐらいは自分で調べろよ・・・
0600nobodyさん2011/10/06(木) 13:46:04.40ID:???
でもRailsを触ったことがない自分としては、CakePHPとの比較は、ありがたい
あと確認画面等がついているAuth関連のプラグインも知りたいよ。ログイン以外全部自分で作るのはけっこう大変なんだ
0601nobodyさん2011/10/06(木) 14:31:07.87ID:???
そんなに大変じゃないと思う
0602nobodyさん2011/10/06(木) 14:37:49.66ID:???
CakeのAuthがうまく動かなくて大変だった
0603nobodyさん2011/10/06(木) 15:58:47.36ID:???
>>594
symfonyやYiiなんかは基本オブジェクトなんだよな。
やっぱりCakeは合わない。
0604nobodyさん2011/10/06(木) 17:16:41.59ID:???
使ったことないけど、これで解決できそう
ttp://d.hatena.ne.jp/basuke/20110908/1315479931
0605nobodyさん2011/10/06(木) 17:25:40.33ID:???
>>604
これ見ると、俺も”オレオレ”ではエンティティ方式で書いてた。
けど、この書き方だと統一感無いので配列の方が良いと思って今に至る。
人それぞれ好みがあるんだな。
0606nobodyさん2011/10/06(木) 18:21:01.06ID:???
cakeは良くも悪くもPHPらしいフレームワークということで配列主義なんじゃなかったっけ
0607nobodyさん2011/10/06(木) 18:21:07.06ID:???
>>604
basuke氏って今PHPやってるんだ。昔からのMacユーザーならノメモバスターには世話になったはず
0608nobodyさん2011/10/06(木) 19:41:43.25ID:???
CakePHPの悪い点
ユーザーが少ない

昔は多かったのかな、2009年あたりのブログ記事はいっぱい引っかかるね
0609nobodyさん2011/10/06(木) 21:10:11.81ID:???
http://www.google.co.jp/trends?q=cakephp%2Csymfony%2Ccodeigniter%2Cyii&geo=all&date=2011
0610nobodyさん2011/10/06(木) 21:13:18.04ID:???
>>609
日本のみでやってみろよ。明らかにCakeが一番だ
0611nobodyさん2011/10/06(木) 21:22:38.07ID:???
つまりはそういうことだ。
0612nobodyさん2011/10/06(木) 21:44:51.07ID:???
みんな配列きらいなんだな。逆におれは配列が扱いやすくてCakeから離れられん。
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:???
専用の管理画面作ってるよ。appも分けて。
0619nobodyさん2011/10/07(金) 22:27:16.26ID:???
appを分けるってことは、CakePHPのappディレクトリを複数持つということですか?
0620nobodyさん2011/10/07(金) 23:39:44.94ID:???
>>618
その手があったか
ソッチの方がシンプルに実装できそうだな
俺はわざわざprefixとか利用してadmin_indexみたいな形でやってたわ
0621nobodyさん2011/10/07(金) 23:46:38.35ID:???
ほー。そいや、俺もsymfonyでは複数のapp作って管理画面と分けてたわ。よーするにフロントコントローラをもひとつって事な。
すっかりCakePHPの流儀に染まって忘れてた。
0622nobodyさん2011/10/08(土) 00:23:30.14ID:???
>>609
Yiiって海外では人気なんだな
なんで日本で流行らんのかわからん
0623nobodyさん2011/10/08(土) 00:57:12.99ID:???
日本語の情報が少ないからでしょ
0624nobodyさん2011/10/08(土) 01:56:19.44ID:???
Railsでいうオブジェクト指向の認識なんだけど、

同じデータベースのテーブルを扱うにしても
そのテーブルにあえて違うオブジェクト名を用途別につけてあげて、
それぞれの用途でそのオブジェクト(テーブル)を操作していく。

そんな認識であってるのかな?
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:???
よくわらかんが、たとえばlayouts/default.ctpのビューで

<?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:???
>>633
そうすると、どう考えてもビューをデザイナーがいじる事は無理だよね。
CMSでよくある、管理画面からテンプレート(ビュー)を編集とかも。
0635nobodyさん2011/10/09(日) 00:02:17.84ID:???
632のようにビューで分岐させるのは、ありだと思う
ケースバイケースだけど
これは、デザイナーよりの分岐なので
デザイナーに編集してもらった方が楽
これくらいの分岐条件ならデザイナーでも、わかると思う。

これを関数で処理するとなれば、HTMLタグを関数内に入れる事になる
要は新規登録のリンクをヘルパーとして扱うのは、効率的に悪い。
新規登録のリンクは、関数として何度も使うことが無い。

新規登録、会員登録の分岐は、それ用にビューをつくっておいて
メインのビューから読み込ませればよい
0636nobodyさん2011/10/09(日) 01:06:32.27ID:???
たしかにケースバイケースだな。
効率と保守性の問題。
0637nobodyさん2011/10/09(日) 01:12:35.73ID:???
俺的にはビューはデザイナに任せるから、PHPのコードが書いてあるなんてありえんのだが
みんなよくやるね
0638nobodyさん2011/10/09(日) 01:39:02.71ID:???
というかデザイナーが仕上げた後にphpコードをプログラマが埋め込む。

phpコードを埋め込んだビューにデザイナが手を付けることはない。

デザイン出来上がり
↓
プログラム組み込み
0639nobodyさん2011/10/09(日) 03:21:51.21ID:???
自分で書いたSQL文をページネーションしたい場合どうしたらいい?
0640nobodyさん2011/10/09(日) 03:28:03.09ID:???
ちょっとしたデータをphpの配列に書いてあってincludeして使いたい場合、どのフォルダに置く?
0641nobodyさん2011/10/09(日) 12:35:10.57ID:???
Configureに読み込ませればいいんでね?
0642nobodyさん2011/10/09(日) 14:10:24.41ID:???
ぶーつとらっぷ
0643nobodyさん2011/10/09(日) 20:53:40.00ID:???
>>641
configフォルダのこと?

>>642
bootstrapだと全ファイルにincludeされて重くならないかな
気にするほどではない?ファイルサイズは100KBないぐらい
0644nobodyさん2011/10/09(日) 21:57:21.11ID:???
俺は「common」ってフォルダ作って、その中にファイル置いてる。
で、bootstrap.phpでincludeしている。

この方が自分が見た目でも分かりやすし、管理しやすいよ。
■ このスレッドは過去ログ倉庫に格納されています