トップページ⇒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/
0052nobodyさん2011/07/14(木) 00:15:26.04ID:???
使い始めたばかりなのだけど、
ssh接続するサーバ上で開発する場合、開発環境はどんな選択肢があるんだろう?
0053nobodyさん2011/07/14(木) 00:56:03.07ID:???
うん?鯖上のエディタで直接コード書くんじゃないんだろ?
0054nobodyさん2011/07/14(木) 01:03:22.06ID:???
十分な速度があるなら、Eclipseでリモート・システム・エクスプローラーとか便利ですよ。
0055nobodyさん2011/07/14(木) 09:51:20.58ID:???
>>54
試してみます、ありがとうございました
0056nobodyさん2011/07/14(木) 22:23:54.50ID:???
Eclipse xDebug
このあたりの検索キーワードでリモートでデバッグ出来ますので、分かってしまえばかなり便利です。
0057nobodyさん2011/07/18(月) 05:28:44.18ID:???
>>51
奴らは街角で拉致られてタコ部屋に押し込められて強制労働させられてるのか?
自ら希望して派遣会社に登録したんじゃないのか?
まずそこをハッキリして貰いたいんだが。
0058nobodyさん2011/07/18(月) 06:38:04.14ID:???
なにそれこわい
0059nobodyさん2011/07/18(月) 11:02:32.30ID:???
saveAllでさぞ酷い目にあったのかな。。。
0060nobodyさん2011/07/18(月) 12:50:23.72ID:???
トランザクションの裏には凄い苦労が隠されているんだな・・・
0061nobodyさん2011/07/18(月) 17:26:31.69ID:???
軽々しくROLLBACKとかできない雰囲気だな。何人か犠牲になってるんだろ?
0062nobodyさん2011/07/19(火) 14:07:14.50ID:???
お前らってプログラミング初めて何年?
俺は勉強おろそかになってた時期も含むと、8,9年ぐらいになるんだけど
ロールバックとかトランザクションとかDBの知識全くないわ
0063nobodyさん2011/07/19(火) 19:02:12.16ID:???
それってWeb系のプログラミング始めて何年かで違うよな。
ここ10年の間なら、Webプログラミング+DBってパターンが王道だし、
PHPとMySQLは、もっとも利用されている組み合わせだ。

なのに、PHPのみで8〜9年というのはおかしいな。
今までCSVのみでデータの読み書きをしていたのか?
0064nobodyさん2011/07/19(火) 19:55:53.43ID:???
>>63
いや、ずっとDBだけど大規模なサイトの開発しなかったら正直
ロールバックとかトランザクションなんて使わなくてもいいからな
PHPから接続して、CRUDできたら大抵のシステムは組めるでしょ?
0065nobodyさん2011/07/19(火) 21:17:02.33ID:???
俺的にもMySQLでトランザクションができるようになったのは最近。って感覚だな。
デフォルトだと今でもMyISAMだろうし。
0066nobodyさん2011/07/19(火) 21:25:45.94ID:???
この前MAMPからセットアップした時はInnoDBだったけどなー
0067nobodyさん2011/07/19(火) 21:43:17.25ID:???
PHP歴20年だけど質問ある?
0068nobodyさん2011/07/19(火) 21:53:33.13ID:???
>>67
こんな糞言語をよくそんなに使っていられますね(^^)
0069nobodyさん2011/07/20(水) 07:14:48.59ID:???
まぁ、MyISAMで良い場面とInnoDBで良い場面の想定が難しいからな。

月1000万PVあるポイントサイト運営してるけど、MyISAMだし、
それでデータが破壊されることは無い。
だから、この程度の規模だとトランザクションは必要ないのかもな。
0070nobodyさん2011/07/20(水) 11:19:20.67ID:???
昨日からCakePHPを勉強しようと思ってイロイロやってるんだけど
サンプルの中にある
cake\tests\lib\templates の
footer.php と header.php と menu.php から
ものすごい数のエラーが出てるんだけど

何か設定間違えたかな?

http://mergedoc.sourceforge.jp/
ここのEclipse3.6を一回更新して使ってるんだけど
0071nobodyさん2011/07/20(水) 12:27:08.82ID:???
>>69
トランザクションの有無は操作内容によるから規模関係ないかと。
あとInnoDBプラグイン以降はMyISAMの出番はないんじゃない?
小さめのDBならMyISAMのが良いこともあるけど、その規模なら誤差みたいなもんだし。
0072nobodyさん2011/07/20(水) 15:10:09.78ID:???
フルテキストインデックス使うならMyISAMだけどな。
0073nobodyさん2011/07/20(水) 16:08:47.61ID:???
>>71
ポイントサイトやってるから、毎秒100人ぐらいの
同時アクセスが発生するんだが、
DBの読み書きでトランザクションを使用してないので
どうなるかと運営当初は不安だったが、全然大したことなかったw

だから、どの程度の規模・アクセス・処理想定をすれば
InnoDBにしてトランザクションした方が良いかわからないんだよな。
0074nobodyさん2011/07/20(水) 16:58:32.13ID:???
同時アクセスとかあまり関係ない。

銀行口座AからBへ振り込み処理を行うとする。
1.UPDATEでAの残高を減らす
2.UPDATEでBの残高を増やす
もし1の処理の後、エラーが起きて2が実行されなかったとする。
するとAの残高だけ減っているというデータの不整合が起きてしまう。
こうならないために、1と2をトランザクションで囲って、
エラーが起きた場合はロールバックして1の処理をキャンセルする。
0075nobodyさん2011/07/20(水) 17:12:21.69ID:???
同じ編集画面多重で開かれて
内容が戻るのを防ぐのもトランザクションでやるの?
0076nobodyさん2011/07/20(水) 17:16:52.63ID:???
あれ、>>74ってトランザクションか?
上手く言えないが、そう言う場面で使うもんじゃない気が・・・
0077nobodyさん2011/07/20(水) 17:58:07.77ID:???
>>74はトランザクション処理だろ。

>>75はトランザクションじゃないね。
DBでやるなら行ロックとか。
0078nobodyさん2011/07/20(水) 18:11:06.81ID:???
>>74
これはCakePHPでできるの?
0079nobodyさん2011/07/20(水) 19:11:43.20ID:???
>>78
余裕でできる。
CakePHPでというよりMySQLで、だけど。
0080nobodyさん2011/07/20(水) 20:08:13.30ID:???
じゃ、コード書いてみて
0081nobodyさん2011/07/20(水) 20:08:31.53ID:???
>>77
行ロックってデッドロックの解決わからなくて実装してないなぁ
手動で解除できるようにしとくくらいなのか?
0082nobodyさん2011/07/20(水) 20:35:12.17ID:???
>>81
pconnect使わなければプログラム終了したらDB接続も勝手に切れる。
嫌ならロックやトランザクション使うときだけ明示的にconnectする。

>>80
AppModelかBehaviourに
$db =& ConnectionManager::getDataSource($this->useDbConfig);
return $db->begin($this);
こんなメソッド書くかんじ?
同じDB接続なら二回目以降は無視するとかcommit/rollbackをまとめて行うとかの工夫はほしいけど。
0083nobodyさん2011/07/20(水) 20:55:57.12ID:???
>>81
ロックする順番を銀行口座番号の昇順か降順にすれば
デットロックにはならないはず。
0084nobodyさん2011/07/20(水) 22:48:34.13ID:???
>>82
そのコード、もう標準で組み込んでくれよと思う
0085nobodyさん2011/07/21(木) 00:07:23.26ID:???
>>84
通常はsaveAllで事足りるはず。
MySQLならinnoDB使ってれば自動でトランザクションしてくれる。
0086nobodyさん2011/07/21(木) 07:30:42.02ID:???
2.0の正式版ていつごろなのかな?
alpha版ためしたらエラーでまくりだった;

Lithiumとどっちが先か・・・
0087nobodyさん2011/07/21(木) 14:11:40.28ID:???
>>85
通常の範囲せますぎやない?
クエリの間に判定や分岐をいれたいことって多々あるとおもう。
MySQLのストアドは弱いしね。
0088nobodyさん2011/07/21(木) 16:19:08.49ID:???
>>87
どんな時に使うの?
cakeではやった事無いよ。
0089nobodyさん2011/07/21(木) 16:40:06.60ID:???
更新って1つのテーブルだけじゃないからな。
例えば、会員情報を更新しようとして、一緒に
プロフィールテーブルやポイントテーブルを更新する事は想定できるだろ。
0090nobodyさん2011/07/21(木) 16:50:57.97ID:???
>>89は誰に対してのレス?
0091nobodyさん2011/07/21(木) 18:32:52.63ID:???
流れ見てたら解るだろ
0092nobodyさん2011/07/21(木) 19:02:21.63ID:???
>>91
流れ見ててるからわからん。

>>87
saveallじゃ足らんって言ってて

>>88
具体的にどんな時に必要?


>>89は
プロフィールテーブルやポイントテーブルを更新する事は想定できるだろ。
↑これはsaveallで足りるから、まさか>>88へのレスでは無いとは思うけど、
どうなんだろうって思ったから。
0093922011/07/21(木) 19:15:12.79ID:???
ポイントのプレゼント機能があったとして、
会員AからBにポイントを振る場合は、
トランザクション処理になるだろうけど、

cakePHPの場合、model->saveに渡す配列に
ちゃんとデータを入れれば、
saveAll一発で済むし。

0094nobodyさん2011/07/21(木) 19:18:17.61ID:n5p3Ei1e
・ポイントが100以下のユーザーを抽出する
・ポイントをプラスする
・ポイントが500以上になったユーザーのプロフィールを更新する

こういうのはSaveAllじゃダメだろ。
どんだけ単純なアプリ作ってるんだよ。
0095nobodyさん2011/07/21(木) 20:01:13.12ID:???
92よ・・・お前もう一度一からDB設計の勉強してこいよ
単純思考過ぎる。saveAll一発でいけたら苦労しない
0096nobodyさん2011/07/22(金) 17:29:49.62ID:???
tinyint(2)
int(2)
これって同じことなの?
0097nobodyさん2011/07/22(金) 18:25:40.59ID:8Fm0K952
>>96
ちがうよ
0098nobodyさん2011/07/22(金) 18:31:43.01ID:???
>>96
MySQLでのテーブル定義時の話だよね?

TINYINTは-128から127 (符号無しの場合0から255)が保持可能
INTは-2147483648から2147483647 (符号無しの場合0から4294967295)が保持可能。

型の後ろのカッコは表示幅。(2)は2桁に満たない場合に0フィルしてくれるけど3桁だと
幅指定無視して3桁表示される。切り捨てたりするわけではない。INTだと4桁、5桁も
ありえるので、そういう値を扱うとき同じとはいえない
0099nobodyさん2011/07/22(金) 20:18:54.31ID:???
パスワードの入力エリア2つにして、一方を確認用にするって
仕様が良くあると思いますが、この場合のバリデーションってどうしてます?
0100nobodyさん2011/07/22(金) 20:32:49.17ID:???
ふつうに二つエリア有るだけだろ?
0101nobodyさん2011/07/22(金) 20:54:14.56ID:???
controller側で、パスワードA==パスワードBの場合true、そうでなければfalse
で作ればいいだけでは?
0102nobodyさん2011/07/22(金) 21:00:44.84ID:???
>>101
コントローラでやる意味がわかんない。
普通にバリデーションルールつくるだけでしょ。
0103nobodyさん2011/07/22(金) 21:25:49.24ID:M3kIDpUH
Cake使ってもなおMVCを守らんとはやるな。
01041012011/07/22(金) 21:31:07.20ID:???
>>102
思い浮かばなかった。MVCでいうMに書くべきなんですね。
0105nobodyさん2011/07/22(金) 22:13:36.68ID:???
じゃ、パスワードの暗号化もmodelに書くの?
0106nobodyさん2011/07/22(金) 22:32:30.85ID:???
好きにしたらいいんじゃね。
おいらはAuthコンポーネント使うからコントローラで
$this->Auth->password($hogehoge)
かな。
0107nobodyさん2011/07/22(金) 22:36:18.41ID:???
それってさ、

if ($this->User->validates() {
 $this->data['User']['password'] = $this->Auth->password($this->data['User']['password']);
 $this->User->save($this->data, false);
}

てな感じで、一度バリデーションして
問題なければパスワード暗号化してそれからsaveするんだよね?

好きにしろって言われればそれまでだけど、他はどうしてるか気になってね
0108nobodyさん2011/07/22(金) 22:47:57.32ID:???
入力はpassword1, password2 にして
password1 == password2のバリデーションをpassword1 に設定

コントローラで
$this->data['User']['password'] = $this->Auth->password($this->data['User']['password1']);
$this->User->save($this->data, true);

みたいにしてる。定石かどうかは知らん。
ただ、入力をpasswordにするとAuthコンポーネントが
勝手にハッシュ化してめんどいことになる。
0109nobodyさん2011/07/22(金) 22:57:53.24ID:???
俺もそれだわ。勝手にハッシュ化されると困る時あるし。
0110nobodyさん2011/07/23(土) 01:00:17.82ID:???
くだらない事だけど、↓みたいにsave失敗した処理も入れてる?

if ($this->User->save($this->data)) {
 save後の処理
} else {
 $this->set('error', '登録に失敗しました');
}
0111nobodyさん2011/07/23(土) 01:38:41.86ID:???
>>110
くだらなくない。商用コードでそれ抜くやつはほんと勘弁してほしい。
実際はModelでException投げるのがスマートかもね。
0112nobodyさん2011/07/23(土) 14:35:22.31ID:???
>>98
0フィルしてくれる?
0113nobodyさん2011/07/23(土) 16:13:15.44ID:???
>>98
括弧の中の数字は最低幅ってことか
0114nobodyさん2011/07/23(土) 18:02:27.92ID:???
MVCて
コントローラーに比重を大きくした方がよくね?

高速生産オンリー視点でいえばモデルに比重を大きくした方がいいけど
モデルの比重が大きくなると
拡張や柔軟性が失われるデメリットがある。

大規模サイトに発展する可能性、またはアジャイル開発なら
高速生産と柔軟性のバランスを取った方が良いので
コントローラの比重を大きくした方がよいと思う。
0115nobodyさん2011/07/23(土) 18:14:28.33ID:???
>>114
俺もそう思う。モデルにあれこれ書きすぎるのは汎用性が低くなる。
モデルはシンプルで、コントローラで色々操作する方が良い。
0116nobodyさん2011/07/23(土) 19:09:03.76ID:???
自演してまで馬鹿な考え広めなくていいよ
0117nobodyさん2011/07/23(土) 20:25:12.50ID:???
>>115
ありえん
0118nobodyさん2011/07/23(土) 20:28:29.38ID:TdNTdShr
この前EC-CUBEをちょっと触ったけど、コントローラーにSQLとCSSが書いてあったよ。
0119nobodyさん2011/07/23(土) 22:36:05.05ID:???
EC-CUBEはスパゲティコード過ぎるからな
0120nobodyさん2011/07/23(土) 23:54:29.15ID:???
>>118
あっちはMVCの概念で作られてはいない。
ひどいごった煮だよ。
0121nobodyさん2011/07/24(日) 09:35:25.15ID:???
CakePHPもlayout使う場合、$title_for_layoutをコントローラでsetしないといけないよね。
あれってビューで設定できないの?
CSSなら、
$html -> css('abc', null, array('inline' => false));
でできるんだけど、同じようにタイトルもできたらいいんだけど。
0122nobodyさん2011/07/24(日) 15:34:45.69ID:???
$this->set('title_for_layout', 'abc');
0123nobodyさん2011/07/24(日) 17:11:36.84ID:???
>>122
ビューでっていってんのに
0124nobodyさん2011/07/24(日) 17:53:34.30ID:???
>>123
*.ctp に>>122 の通り書いてみろって
0125nobodyさん2011/07/24(日) 18:39:27.04ID:???
レンタルサーバーにアップする場合どこを設定するのかググってもさっぱりわからない。
0126nobodyさん2011/07/24(日) 18:43:37.38ID:???
んなもん、レンサバによるだろうに
0127nobodyさん2011/07/24(日) 20:43:06.84ID:???
>>125
メジャーなIaaSくらいは公式で手順を公開してほしいよな。
Azureとか。
0128nobodyさん2011/07/24(日) 21:27:38.88ID:???
>>125
PHPが動けば、最悪FTPでどうとでも出来る。
0129nobodyさん2011/07/25(月) 00:04:03.79ID:???
>>126
ここ
http://www.toypark.in/
0130nobodyさん2011/07/25(月) 00:31:03.69ID:???
マニュアルに沿ってやれば特に難しいことは無いと思うけど。

ドキュメントルートの中にしか入れないレンサバなら「3.3.1 開発」のページ
一段上に上がれるレンサバなら「3.3.2 運用」を
VPSとか好きにいじれる鯖なら、「3.3.3 応用インストール」を見て好きなところにコアを入れればいい。

0131nobodyさん2011/07/25(月) 01:23:27.03ID:???
てか、普通に
/public_html
└/cake

で、いんじゃないの?
0132nobodyさん2011/07/25(月) 22:18:23.04ID:???
知ってるかどうか分からないけど、
マッチングサイトの「さぶみっと!」ってCakePHPで開発してるんですかね?
ログインフォームを見ると、name="data[Customer][c_mail]"
みたいになってました。
0133nobodyさん2011/07/26(火) 01:54:11.26ID:???
インデックスのつけ方わからん
0134nobodyさん2011/07/26(火) 01:54:48.76ID:???
ググってやっとできた。
http://cialla.toypark.in/note/dev20100702_01.php

一番下に書いてあるようにアクセスのURLがださい。
>アクセスは http://cialla.toypark.in/sample/index.php/コントローラー/アクション/引数 のように
>index.php をはさむ形になります。

こんなのは嫌だから他のサーバーに変えたい。
CakePHPが使える無料のサーバーのお勧めはある?
0135nobodyさん2011/07/26(火) 08:26:21.57ID:???
自鯖
はい次の人
0136nobodyさん2011/07/26(火) 15:45:29.74ID:HGkMvVWC
今時無料で探すのは無理じゃないか?
月200円捻出してXREAでも借りた方がいいと思う
0137nobodyさん2011/07/26(火) 18:15:32.16ID:???
さすがに無料というのは虫が良すぎる話しだよなw
月100円でも出せば、ロリポップやさくらでも借りられるだろ。
それすら出せない奴がFWでどんなコンテンツ提供するって言うんだ?
0138nobodyさん2011/07/27(水) 08:20:56.42ID:???
バージョンアップキタ!!

2.0系を新規に使うのはまだ早いかな?
0139nobodyさん2011/07/27(水) 10:52:52.97ID:???
>>138
じゃぁ俺が使ってみる
0140nobodyさん2011/07/27(水) 11:35:39.15ID:???
いや、俺が使ってみる
0141nobodyさん2011/07/27(水) 12:15:56.89ID:???
いやいや、俺が
0142nobodyさん2011/07/27(水) 13:06:18.65ID:???
どうぞどうぞどうぞ
0143nobodyさん2011/07/28(木) 01:45:02.72ID:???
フリーランスでWEBアプリを開発しています。
PG歴8年で、PHP歴は1年程度です。
フレームワークを使わないPHP開発は一通り経験しているつもりです。

まだcakeを紹介したサイトをいくつか読んだレベルなのですが、
「なぜcakeを使うのか?」がいまいちピンときていません。

開発スピードなら、既成ライブラリや私製ライブラリで十分な成果が出る気がします。
MVCがしたいなら、別にcakeをつかわなくてもできるんじゃ?と思います。
複数PGでの協業にcakeが威力を発揮するとも思えないのです。

みなさんはなぜcakeにかぎらず、PHPフレームワークをつかっているのでしょうか?
みなさんのご経験された案件でcakeなりPHPフレームワークを使うことを決定した理由は
なんなのでしょうか?差し支えなければ教えてください。
0144nobodyさん2011/07/28(木) 02:05:07.80ID:???
なんかセッションがすぐ切れるんだが
core.php
Configure::write('Session.timeout', '720');
Configure::write('Security.level', 'low');
こういう設定なのに、、、
ほかにセッション関連の設定ってあったっけ?
0145nobodyさん2011/07/28(木) 09:25:36.36ID:???
>>143
デザイナがいなくて画面を自分で作らなければいけない仕事をやってるんで、
scaffoldを吐き出してくれるのが一番助かってるかなあ。
あとはクエリパラメータを関数の引数にマップしてくれるので
どこでどのパラメータを使っているかわかりやすいとか。
フォームヘルパーみたいのも自作しなくてすむし。
ページングも楽だ。

まあ、単体で見るとたいしたことなくても、Railsがフルスタックフレームワーク
と言われていたように、オールインワンでそろってるのが楽なわけよ。
0146nobodyさん2011/07/28(木) 09:31:09.08ID:???
>>143
俺は単に「ネット上の情報が一番多い」事が理由だな

cakeに限らない場合、命名規則や開発方法が決められていると、
開発時の迷いが少なくなるというメリットがある。俺にはこれがでかい。
0147nobodyさん2011/07/28(木) 09:35:44.21ID:KTDSJqbk
なんとなく使ってる感じですかね、別にこれじゃなくてもなんでもいいです。
あと情報が多いのも理由ですね、ここもそうですが他のプログラマーの意見を見るのも参考になりいますし。
0148nobodyさん2011/07/28(木) 10:55:09.01ID:???
>>143
チーム開発してると合意というか統制がとりやすい。デザインパターンみたいなもん。
保守面でもFWのバグやセキュリティフィックスの作業が軽減できる。
Cake1.x自体は構造が古くてクソだけど。
0149nobodyさん2011/07/28(木) 14:22:31.40ID:???
標準Authコンポーネント使って管理ページ作ってるんですが、SSLにするのが普通ですか。
0150nobodyさん2011/07/28(木) 16:15:59.59ID:???
>>144
これなんだけど、
ログイン情報を Session->write() で書き込んで
>>144のような設定なのに数時間ぐらいで切れる
だれかエスパーして
0151nobodyさん2011/07/28(木) 17:06:30.84ID:???
>>150
数時間どころじゃなかった
1時間か、それ以下で切れる><
■ このスレッドは過去ログ倉庫に格納されています