【PHP】フレームワーク CakePHP 11ホール目【v1.3】
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
2011/02/16(水) 21:52:35ID:zCTGjUMqCakePHPから派生した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
0884nobodyさん
2011/06/04(土) 21:01:58.29ID:???0886nobodyさん
2011/06/04(土) 23:21:53.17ID:???できないってことでいいのな?
それなら$_SESSIONに直接ぶち込むだけだから。
出来るとか思わせぶりなこと書いてんじゃねーよ。
0887nobodyさん
2011/06/05(日) 09:40:09.97ID:???example.com/profiles/
にアクセスするとcontroller:profiles、action:indexが実行されるけど、これを
example.com/profile/
でアクセスしてもcontroller:profiles、action:indexを実行したい。
profilesだけじゃなくabouts、contacts、worksすべてを単数形でアクセスしても実行したい。
また、example.com/profiles/hoge/のようにactionが指定されていても、example.com/profile/hoge/のようにしたい。
これについて、routes.phpに記述するうまいやり方ってありますか?
あればぜひお教えいただければと思います。
よろしくお願いします!
ClassRegistryつかったらどこからでも参照もってこれる。
0890nobodyさん
2011/06/05(日) 18:30:44.55ID:???・ID
・画像ID
・名前
:
画像テーブル
・ID
・パス
:
こんなテーブルがあって、
ビューからユーザの画像IDをユーザテーブルから取得して、
画像IDをもとに画像テーブルから画像パスを取得して、<img />で表示 ってしたい。
$this->Hoge->getUserImage($this->data['User']['image_id']); <!-- (HogeはComponent) -->
ビューの中から以上のように1ラインで取得できるのが一番使いやすいんだけど、
ビューでテーブルのデータを動的に取るのはMVCに反しているだろうし、
実際Cakeでやろうとするとちょっとレールから外れた方法とらないといけない。
0891890
2011/06/05(日) 18:32:58.67ID:???ユーザ画像データ配列をつくる(もしくはユーザ配列に画像パスを入れる場所をつくる)
そしてそれを $this->set で渡す。
って方法を一番最初に思いついたんだけど、
ユーザ情報は1ページに数十レコード取得する必要がある場合もあり、
これってどうなんだろうなぁと思って質問してみた。
ベストプラクティスはどうするのが良いんだろ?
0892nobodyさん
2011/06/05(日) 19:54:03.95ID:???お前のやりたい事を実現できる方法を取ればいいよ
0893nobodyさん
2011/06/05(日) 21:20:57.47ID:???ユーザーテーブルと、画像テーブルを結合して
取得すればよさそうだけど。
0894nobodyさん
2011/06/08(水) 02:44:10.87ID:???これってどう言うときに速くなるの?
コントローラーの$usesにモデルを10以上、設定している場合とか?
0895nobodyさん
2011/06/08(水) 14:05:06.26ID:???速くなる代わりにメモリ馬鹿食いになるらしいからサーバスペックにもよるんじゃない?
モデルの数も少数じゃ体感できないね
0896nobodyさん
2011/06/08(水) 15:00:44.48ID:???メモリ馬鹿食いって事は、メモリ開放せずにDBのレコードを保持するのかな?
ちょっとその辺の仕組みがよくわからないけど、
あまり有用なライブラリではないみたいだね。
色んなところでお勧めされてるけど。
0897nobodyさん
2011/06/08(水) 16:10:53.24ID:???馬鹿食いはいいすぎた
それによって今のPCスペックなら
パフォーマンスは向上することがあっても降下することはないよ
CakePHP2.0では正式に採用される有能プラグイン
0898nobodyさん
2011/06/08(水) 16:13:21.55ID:???俺なんてさくらVPSで使う事多いから、
512MBの鯖で大丈夫なのか?と心配だw
0899nobodyさん
2011/06/09(木) 17:20:16.09ID:???単体でモデルをfindで呼び出して配列を取得する事って出来ないかな?
0901nobodyさん
2011/06/09(木) 17:50:47.93ID:???管理画面ではCake使って
公開画面ではピュアPHPからCakeのモデル読み込みたいんだけど、
シェルでどうやってやるの?
0903nobodyさん
2011/06/09(木) 20:22:55.02ID:???>>902
つまり、XMLで出力してAPIみたいにして受けとれってことか?
まぁ、データをDBに保存しているわけだから、
ピュアPHPのファイルにmysql_connect書いてmysql_queryで
情報持ってきて出力するのは簡単だけどさ。
そうじゃなくて、Cakeのfindで得られる配列形式で受け取りたいんだよ。
だから、モデルを単体で読み込めたらいいなっと思ってさ。
0904nobodyさん
2011/06/09(木) 21:02:53.56ID:???大丈夫、噛み合ってるw
modelを直で使えればと俺も思うが、多分厳しい。
苦労するよりは、WebサービスとしてバックエンドでCakeを使うのが
色々と使い回しが効いて良いと思う。
ちなみに今フロントは.netで作って、DBアクセス周りはCakeでWebサービス、
という構成でシステム作成中。
0905nobodyさん
2011/06/09(木) 22:16:01.93ID:???なるほどな。やっぱりバックエンドで使う方が良いよな。
今フロントもCakeで作ってるんだが、
単なるブログのようなものでも重い重いw
0906nobodyさん
2011/06/10(金) 22:19:33.22ID:???非Cakeのファイルをwebroot以下に置くのと、
Apacheウェブルート下の特定のディレクトリにCakeを置くのどっちがいいかな?
後者のほうが融通はきくと思うんだけど。
0907nobodyさん
2011/06/10(金) 23:52:41.41ID:???0908nobodyさん
2011/06/14(火) 18:45:46.48ID:???別のデータ(例えば注文と商品を結びつけるレコードなど)を同時に保存するとき、
両方がバリデーション通ったときのみ、両方を保存する、
としたい場合どういうコード書いてる?
今悩んでいるケースは、
別のデータが、前に保存した別テーブルのIDを必要とするので、ややこしい。。。
テーブルA
・ID
・フィールド1
テーブルB
・ID
・テーブルAのID
このような感じ。
if ($this->Model1->validates()) {}
if ($this->Model2->validates()) {}
こうやって、両方のバリデーションが通ることを確認したあとでやりたいんだが、
上述したとおり、Model1のIDがModel2で必要になるとしたら、
どういうコードをかいてバリデーションさせたらいいんだろう?
0909nobodyさん
2011/06/14(火) 19:51:17.48ID:???0910nobodyさん
2011/06/15(水) 02:07:15.67ID:???CodeIgniterの公式みてたんだが、オレオレFWと大差ないな。
他のフレームワークを悪く言うつもり無いんだが、
速い理由わかってガッカリしたよ。何かもっと特別なやり方してると思った。
0911nobodyさん
2011/06/15(水) 02:16:56.77ID:???ciで良い時もあるし、ciじゃめんどくさい時もある。
0912nobodyさん
2011/06/15(水) 02:58:07.54ID:???Cakeは小規模向きって良く解説されてるけど、
小規模ならそれこそオレオレでいいわけだ。更新もあまりないだろうし。
けど、ポータルサイトとかモデルが50も100もあるような場合、
更新性や他者との連携に備えてCakeみたいな有名FWが活用できる。
CIのメリットは「高速・軽量」だろうけど、Cakeの代替には向かないなと。
それならオレオレのリファレンス作って共同作業者に渡した方が
よっぽど無駄が省けるんじゃないか?っと思い、>>910の結論に達した。
0913nobodyさん
2011/06/15(水) 03:10:08.70ID:???いつ移行するか悩む。
0914nobodyさん
2011/06/15(水) 06:07:44.18ID:???cake以下だけ上書きすればいいの?
0915nobodyさん
2011/06/15(水) 10:56:44.90ID:???0916nobodyさん
2011/06/15(水) 13:45:01.93ID:???>単体でモデルをfindで呼び出して配列を取得する事って出来ないかな?
これでできたけど。
$_GET['url'] = 'favicon.ico';
require_once('path_to_app_dir/webroot/index.php');
// and then for example:
$PostModel =& ClassRegistry::init('Post');
print_r( $PostModel->find('all') );
http://osdir.com/ml/CakePHP/2009-08/msg01425.html
0917nobodyさん
2011/06/15(水) 14:14:09.06ID:???なぜか
$_GET['url'] = 'favicon.ico';
を入れないとビューまで取得されたけど、
たぶん、$_GET['url']にデータ入れないといけないとか
そういう決まりあるのかな。
何にしろ、これが出来たらかなり可能性が広がる。
凄く助かった。情報ありがとう!
0918nobodyさん
2011/06/15(水) 19:42:44.38ID:???俺もこの記事読んだが
require_once('path_to_app_dir/webroot/index.php');
これをやっている時点で、パフォーマンス的には
あまりメリットが無いんじゃないか?
0919nobodyさん
2011/06/15(水) 20:13:40.33ID:???モデル操作以外はすっ飛ばしているなら
パフォーマンス的に早くなるのも理解できるが・・・
0921nobodyさん
2011/06/15(水) 21:27:51.08ID:???0924nobodyさん
2011/06/15(水) 23:54:25.65ID:???APIというかマニュアルに書いてあるけど。
まあMySQLのトランザクションに関しての知識はCakeとは別だけどね。
0926nobodyさん
2011/06/18(土) 13:26:22.69ID:MtjEaHV0core.phpのCacheの設定でMemcacheを使おうとするとエラーが出てしまいます。
エラーのメッセージからInflector::slugを使用しているのが問題みたいなんですが、
なにか回避する方法ありますでしょうか?
もしくは現在の安定版(1.3.9)を使うべきですかね?
0927nobodyさん
2011/06/18(土) 13:41:07.65ID:???0928nobodyさん
2011/06/18(土) 13:52:16.37ID:FmefRTLqクエリ文はモデルとかに書いた方がいいですか?
0929nobodyさん
2011/06/18(土) 15:06:36.54ID:???書きたいならモデルが良いと思うけど。
0930nobodyさん
2011/06/18(土) 15:46:04.92ID:FmefRTLqクエリって
$this->Model->find('first',array('conditions'=>array('id'=> 1));
ってやつですよ。
$query = "select * from user where id = 1";
mysql_query($query);
ってやつじゃないですよ
0931nobodyさん
2011/06/18(土) 15:49:28.80ID:???0932nobodyさん
2011/06/18(土) 17:34:35.31ID:???0933nobodyさん
2011/06/18(土) 17:40:52.31ID:???お前質問ずれてるよ。
てか、$this->Model->queryってのがあるの知らないのか?
俺はこのことを言ってるとばかり思ってたんだが。
どこでも書けるけど、modelに書くべきだと思う。
うちはcontrollerにSQL書き散らかしてしまって、本来のcontrollerから離れてしまった。
保守では困らないけど純粋なMVCモデルから離れてしまったと反省している。
0935nobodyさん
2011/06/18(土) 23:07:42.72ID:???viewに渡すデータが一行で取得できるならコントローラ。
アソシエーションの設定、findに渡すオプションで対応できないデータを作る必要があるなら、
そのデータを作成するファンクションをモデルに定義。
0936nobodyさん
2011/06/19(日) 01:36:40.13ID:FFWzWxUlCacheをMemcacheにしてるんだけど
SESSION周りがすげー怪しい動きしてるんだけど。
0937nobodyさん
2011/06/19(日) 02:02:18.81ID:???親IDを削除したら子IDも削除されるようにしたいのですが、
Cakeの機能だけで削除できるのでしょうか?
やはり、一旦threadedでデータを取得して
1つずつ再帰して削除するしかないのでしょうか?
0939nobodyさん
2011/06/19(日) 03:01:01.96ID:???treeビヘイビアを使えば、親のIDを指定してModel->delete()で子も消せるよ。
ダルマ落しみたいに中抜きしたい時は、 Model->removeFromTree()で。
0940nobodyさん
2011/06/19(日) 07:14:15.09ID:???Cakeの最新バージョンでは、以下の不具合って直ってますか?
Group Byしている時にpaginator->number()が表示されない件
http://d.hatena.ne.jp/aroundthedistance/20090728/1248784179
0941nobodyさん
2011/06/19(日) 12:53:39.87ID:???treeビヘイビアというのがあったんですね。
今まで自作してツリーをカスタマイズしてました・・。
大変参考になりました。ありがとうございました。
0942nobodyさん
2011/06/20(月) 15:10:17.74ID:???1~47まで都道府県のテーブル用意して、住所などが必要なテーブルでそのIDを設定するのが
本来の正しい設計かもしれないけど、
実際Cake(PHP)でやるとめんどくさいよね。毎回selectが増えるだけのような気がするし。
VARCHARで実装してしまうのはだめかな?
0943nobodyさん
2011/06/20(月) 18:53:56.79ID:???公式リリースはまだ先なのかね?
面倒だったら日本郵政グループのKEN_ALL.CSVでマスターテーブル1つ作っちゃえばいいのでは?
0945nobodyさん
2011/06/20(月) 23:28:05.47ID:???フォームの選択の時は、bootstrapに書いてるな。
Configureに入れて。DBでは管理しない。
>>944
郵便番号から住所検索するとき、それ使ってるけど
ちょっと思うのが気になるよね。10万件ほどあるから当然なんだけど。
0946nobodyさん
2011/06/20(月) 23:28:45.79ID:???CakeでAjaxから読み込むとき、ちょっと重いんだよな
出力されるまで時間がかかる。
0947nobodyさん
2011/06/21(火) 16:49:04.36ID:???0948nobodyさん
2011/06/21(火) 17:45:31.67ID:???0949nobodyさん
2011/06/21(火) 19:26:01.33ID:???0950nobodyさん
2011/06/21(火) 23:28:19.97ID:???フレームワークなのにそのフレームワークを使って
書いたコードはフレームワークに依存しない。
という優れもの。
0951nobodyさん
2011/06/21(火) 23:34:17.44ID:???0952nobodyさん
2011/06/22(水) 04:38:21.61ID:???0953nobodyさん
2011/06/22(水) 10:34:00.18ID:???0955nobodyさん
2011/06/24(金) 10:38:37.73ID:???error-messageは出力されなくなるのか?
actionA() {
if ($this->validates()) {
$this-Model->save();
} else {
$this->setAction('actionB');
return;
}
}
↑このような状況で、actionBに飛んでactionBのビューが表示されたときに、
フォームのinputの下にerror-messageがでない。
ちなみに、actionAとBは同じフォームを中で呼んでいて(element)、Aを表示させるとerror-messageはちゃんと出る。
0956nobodyさん
2011/06/25(土) 13:25:40.60ID:???ModelにhasManyを書いて、dependentをtrueにして削除するか、
削除時に各テーブルをforeachで回してdeleteするか。
自分はhasManyをModelに書かずに必要なときだけ
bindModelしています。
0957nobodyさん
2011/06/25(土) 14:03:37.25ID:???0958nobodyさん
2011/06/25(土) 15:25:53.73ID:???0959nobodyさん
2011/06/26(日) 22:52:58.28ID:???設定かでquery string形式の(?page=1みたいな)リンクに
変更できますか?
結局PaginationHelperのソース書き換えて対応したんですが
書き換えずに済む方法があれば方法を教えて欲しいです。
バージョンは1.3です。
0961nobodyさん
2011/06/28(火) 03:16:25.11ID:???symfony2に浮気しようかな。
他にPHP 5.3ベースのフレームワークってある?
0962nobodyさん
2011/06/28(火) 04:25:36.29ID:???0963nobodyさん
2011/06/28(火) 08:35:52.44ID:???0964nobodyさん
2011/06/28(火) 08:46:54.56ID:???0965nobodyさん
2011/06/28(火) 10:02:59.80ID:???0966nobodyさん
2011/06/28(火) 22:29:51.03ID:???0967nobodyさん
2011/06/29(水) 02:01:54.30ID:???俺俺フレームワークの方が開発速度が速い。
そしてphpだけしゃ武器にはならんから
object-cを習得中。
先を見越せばphpのフレームワークなんて、時代おくれ。
0968nobodyさん
2011/06/29(水) 03:29:14.31ID:???0969nobodyさん
2011/06/29(水) 08:59:10.65ID:???俺もCake風のオレオレフレームワークを作った
どうせMySQLしか考慮しないし、速度の遅さは致命的だからね。
キャッシュ作っても新たにデータを投稿する度に削除する必要があるし、
速いに越した事はないだろう。
0970nobodyさん
2011/06/29(水) 09:38:48.03ID:???0971nobodyさん
2011/06/29(水) 10:11:36.12ID:???0972nobodyさん
2011/06/29(水) 11:53:23.28ID:???会社ならやめてほしいな。
お前がずっと責任とれるはずもないんだから
0973nobodyさん
2011/06/29(水) 13:19:00.43ID:???Cakeのコーディングすら、個々のPGで癖があるのに
0974nobodyさん
2011/06/29(水) 14:04:09.00ID:???多分他人が作ったオレオレフレームワーク触ったことないんだろうな。
ものすごい苦痛だよ。
フレームワーク自体のバグは誰がなおす?
そのフレームワークの思想は大多数にウケるのか?
0975nobodyさん
2011/06/29(水) 14:09:42.82ID:???0977nobodyさん
2011/06/29(水) 14:44:32.33ID:???0978nobodyさん
2011/06/29(水) 15:48:10.37ID:???0979nobodyさん
2011/06/29(水) 16:21:09.22ID:???0980nobodyさん
2011/06/29(水) 16:30:41.22ID:???・Userモデル
id,categories_id,name
・Categoriesモデル
id,name
として、「そのカテゴリに何人のユーザが登録しているのか?」
をバーチャルフィールドとして取得したいと思います。
バーチャルフィールドで書ける場合、書き方を教えてください
0981nobodyさん
2011/06/29(水) 17:22:31.29ID:???UserがbelongsTo Categoryならば、
Categoryにuser_countフィールドを作れば自動でカウントしてくれるよ。
0982nobodyさん
2011/06/29(水) 17:37:38.74ID:???var $virtualFields = array('user_count'=>'COUNT(User.id)');
を、Categoryモデルに書いたらカウント数を取得できました。
ありがとうございます。
レス数が950を超えています。1000を超えると書き込みができなくなります。