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

【PHP】フレームワーク CakePHP 14ホール目【v2.1】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2012/05/01(火) 16:58:44.53ID:fVBzm1/A
CakePHPは、Ruby on Railsの概念の多くを取り入れた、Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークです
CakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう

※他フレームワークとの比較等はスレ違いです
テンプレは>>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 13ホール目【v2.0】
http://kohada.2ch.net/test/read.cgi/php/1320768310/
0583nobodyさん2012/09/10(月) 16:01:44.70ID:???
そもそもフレームワーク自体オワコンで生PHPの時代かも


openpneだって2までは良かったんだけど3からシンフォニー()とか変なの採用してクソ重くなっただけでなくカスタマイズ性も落ちた
0584nobodyさん2012/09/10(月) 16:20:01.42ID:???
まぁ、フレームワーク使うのは開発者が開発しやすくするためだからな
利用者にはほとんどメリット無いよ
0585nobodyさん2012/09/10(月) 23:20:40.72ID:???
>>582
フレームワークの中ではYiiが一番良い

>>583
生はないだろ・・・めんどくさすぎるわ
0586nobodyさん2012/09/11(火) 03:14:36.56ID:???
何だよ cakephp.org のサイトが落ちちゃってるんで、
前から騒いでる Yii ってのでも覗いてみようと思ったら
そっちのサイトも落ちてるじゃねーかw

>>585
前からことあるごとにYiiの宣伝に勤しんでるようだが、
(別人かも知れないがな)
どう良いのか書かねぇと誰も話を聞いてくれんぞ
0587nobodyさん2012/09/11(火) 04:59:28.19ID:???
すれち
0588nobodyさん2012/09/12(水) 00:44:18.90ID:???
Eclipse 3.7.2 Indigo

一般 > ファイルの関連付けで
*.ctp をしっかり PHP エディター(デフォルト)に関連付けて
いるにも関わらず、Eclipseから*.ctpファイルを開いても
*.phpファイルを開いた時のフォントが適用されていません。

どこか設定が間違っているのでしょうか?

0589nobodyさん2012/09/12(水) 00:59:24.23ID:???
cakePHP使っているのに
標準のバリデーションを使わずに、
自前でController内でバリデーション処理を組み込んでいるのですが
こーいうことはしないほうがやっぱり良い?
0590nobodyさん2012/09/12(水) 01:03:11.83ID:???
DRYに書けるならいいんじゃね
0591nobodyさん2012/09/12(水) 01:08:25.46ID:???
>>590
実は、まだcakePHPのバリデーション機構をあまり理解していなくて(時間がないので)
既存のPHPの知識だけでコントローラ内でバリデーション処理を組んでます。
(FW使ってる意味ねーじゃんw)
0592nobodyさん2012/09/12(水) 01:10:40.04ID:???
あっそw
0593nobodyさん2012/09/12(水) 02:19:19.08ID:???
>>591
コントローラは質素に作るのが定石。
そのやり方はたぶんまずい。
使い方が分からなければ、ロジックをモデルに書いておいて後でリファクタリング。
0594nobodyさん2012/09/12(水) 02:33:05.48ID:???
>>593
アドバイスサンクスです。
※現在は、モデルは形上テーブル数分用意してますが
特にこれといったコードを書いていないです。。。
おいおい勉強してゆきます。
0595nobodyさん2012/09/12(水) 02:45:41.26ID:???
>>594
まずこれを読むといいと思ってどこかに上がってた翻訳を探してたんだが
見つけられなかったスマン。
http://bitfluxx.com/2008/01/23/cakephp-best-practices-fat-models-and-skinny-controllers.html

概要はここでわかる。
http://blog.syuhari.jp/archives/172

俺も始めコントローラにゴリゴリ処理を書いて納品したあとで
この知識を知って、この記事を早く読めばよかったと心から悔やんだ。
コントローラに複雑な処理を書くとあとで泣きを見る確率激高だ。
趣味でやってるんならじっくり覚えていけばいい。
0596nobodyさん2012/09/12(水) 05:14:49.77ID:???
>>595
ありがとうございます。
モデルの本来の使い方をやっと知った感じです。

コントローラに何でも詰め込んでいましたが
モデルに検索機能とかを移動させたら大分コードがすっきりしました。
0597nobodyさん2012/09/12(水) 10:25:29.96ID:???
バリデーションて使ったことないんだけど
ユーザー入力からのデータを保存する際には使った方がいいのか
0598nobodyさん2012/09/12(水) 11:06:09.67ID:???
君次第だ
0599nobodyさん2012/09/12(水) 13:35:01.67ID:???
どうでもいいってことか
0600nobodyさん2012/09/12(水) 14:33:36.86ID:???
Cake2.2にしたけど、どうしてもredirectするとセッションが空になるという問題が起きて
2日ぐらい調べているけどわからない
海外フォーラムとか見ても多発してるが解決策がない模様
1.3に戻すか…
0601nobodyさん2012/09/12(水) 16:00:33.62ID:???
>>600
あぁ、どっかで回避策読んだなぁ、、、
割と簡単に解決できるようなこと書いてあった。
0602nobodyさん2012/09/12(水) 18:21:16.88ID:???
うーむぐぐってもぐぐっても解決法が見つからん
古いバージョンのなら出てくるんだけど、当然試してもダメだった

よく調べるとリダイレクトすると空になるんじゃなくて、
リダイレクト前後でsession_id()が異なる値を返し、リダイレクト前にwriteした値が正しく保存されてないようだ
何故こうなるのかがわからない
0603nobodyさん2012/09/12(水) 19:14:19.36ID:???
>>600
Cakeってこういうバグたくさんあるからいやなんだよ
0604nobodyさん2012/09/12(水) 19:19:58.01ID:???
同感。まだまだ旧バージョンを使い続けた方がいいみたいだな
1.3も1.3.10ぐらいまではひどいバグあった、テーブル全消し喰らったり
0605nobodyさん2012/09/12(水) 19:24:44.80ID:???
Cakeに限った話じゃないが、セッションてデバッグしにくいよな
0606nobodyさん2012/09/12(水) 20:06:50.64ID:???
セッションがどれぐらい保持されるかっていう設定もややこしすぎるしCake
0607nobodyさん2012/09/12(水) 23:23:35.18ID:???
セッション切れは多分存在しないcssとかjsとか呼び出しちゃってんじゃないか
なんでもcakeのバグとか言わない。
0608nobodyさん2012/09/13(木) 00:03:27.42ID:???
>>600
普通にできるけど?
0609nobodyさん2012/09/13(木) 07:33:06.03ID:???
既存のWebアプリに外部に機能を提供するAPIを追加したいんだけど
APIでのユーザ認証はどんな風に実装するのが普通でしょうか?
APIへのセッション情報の受け渡し方法が判らないです・・・
0610nobodyさん2012/09/13(木) 08:19:36.38ID:???
クッキーで渡すしかない?
0611nobodyさん2012/09/13(木) 10:08:21.91ID:???
Oauth
0612nobodyさん2012/09/13(木) 11:09:41.72ID:???
>>611

トークン管理(発行・破棄)とか多重ログイン対応とか考えると大変そう・・・
0613nobodyさん2012/09/13(木) 11:11:51.90ID:???
あっそ
0614nobodyさん2012/09/15(土) 18:54:29.08ID:???
score_daily

って名前のテーブルを定義しようとしたら
score_dailies にしろってエラーがcakeから返されるんだけど
どうも daily は形容詞であり、複数形など無いので
凄く納得が行きません。

テーブル名称は、複数系にしなくちゃならないのでしょうか?
0615nobodyさん2012/09/15(土) 18:58:42.11ID:???
daily_scores


いやならmodelにuseTableで指定すればいいだけ
0616nobodyさん2012/09/15(土) 19:28:52.44ID:???
>>615
!!!Good!!!
0617nobodyさん2012/09/17(月) 13:46:54.01ID:???
コントローラーのアクション関数中で$this->redirectを書いたら
それ以下の行は実行されないという認識であってまっすか
0618nobodyさん2012/09/17(月) 14:23:03.05ID:???
>>617
第3引数次第。デフォルトではそれでOK。
0619nobodyさん2012/09/17(月) 16:12:43.15ID:???
>>618
なるほど�dです
0620nobodyさん2012/09/18(火) 10:50:35.32ID:???
Cake2.2
core.phpで Configure::write('debug', 0);としていても、エラー時にCakeのエラー表示が出てしまいます
出さないようにするにはどこで設定するのでしょうか?
0621nobodyさん2012/09/18(火) 22:18:22.36ID:???
php のエラーじゃなくて?
0622nobodyさん2012/09/18(火) 22:38:41.86ID:???
です。Cakeのエラーです。

引き続き調べていてわかったのは、PHPにエラーがある場合にそうなります。
存在しないURLを入れた場合には、CakePHPのエラー表示用の?ソースコードが吐かれます。頭にCakeのコメント付きの。

これでは困るので、なんとかならないでしょうか。何かおかしいと思うのですが…。
エラーがなければ正常に動いています。
0623nobodyさん2012/09/19(水) 00:47:19.09ID:???
error_reporting(0) はしてみた?
0624nobodyさん2012/09/19(水) 08:58:59.05ID:???
コントローラとかビューでdebug上書きしてるんじゃないの
0625nobodyさん2012/09/19(水) 10:46:33.83ID:???
2でどのくらい速くなったの?ざっと見た所構造同じだし、速くできるような違いが見当たらなかったが
モデルの遅延読み込みで速くなったって、アソシエーション使ってなければ関係ないんじゃないの?
0626nobodyさん2012/09/19(水) 16:01:01.46ID:???
>>625
http://d.hatena.ne.jp/cakephper/20120828/1346162341
0627nobodyさん2012/09/19(水) 16:03:18.26ID:???
>>626
�dクス
Verあがるたびに遅くなってるw
0628nobodyさん2012/09/19(水) 16:28:46.26ID:???
2.1でテストしている限りには速く感じたけど、
>>626見ると、バージョンアップしていく毎に遅くなるのか。

まぁ、機能が増えるから遅くなるのはわかるけども
0629nobodyさん2012/09/19(水) 16:56:44.01ID:???
このやり方じゃボトルネックがよく分からんが、
DBをメモリに乗せてないだろうからDB接続を確立させるコストが一番高いんだろうな

そういう意味じゃどのFW使っても大差ないと思うし、バージョンの差分などは気にするほどでもないと思う。
0630nobodyさん2012/09/19(水) 16:58:04.41ID:???
つまり1.3でも大差ないってことだ
0631nobodyさん2012/09/19(水) 18:20:17.13ID:???
感覚的には1.3系より2系の方が速く感じるけどな
0632nobodyさん2012/09/19(水) 19:49:16.34ID:???
っていうか、実際早いんだろ
0633nobodyさん2012/09/19(水) 20:54:32.34ID:???
少しはな
0634nobodyさん2012/09/20(木) 01:40:17.08ID:???
じゃぁ良かったじゃん
0635nobodyさん2012/09/20(木) 04:06:56.13ID:???
元が遅いからそんなによくない
0636nobodyさん2012/09/20(木) 10:15:47.13ID:???
じゃぁ何が早いのさ
0637nobodyさん2012/09/20(木) 10:32:10.03ID:ir1LF+Ba
Cake2.2を使ってます。
各アクションのsetメソッドで1つづつ値を渡す方法でなく
AppControllerから一括でViewの全てのディレクトリのctpに変数を渡す方法ってありますか?

0638nobodyさん2012/09/20(木) 10:52:45.15ID:???
beforeFilterかbeforeRenderあたりに書けば良いんでないの
0639nobodyさん2012/09/20(木) 11:02:18.03ID:???
Cake2.2を使ってます。
掲示板を作っていて、スレタイモデルとレスモデルが
スレhasManyレス
レスbelongsToスレ
になっているのですが、レスが追加された際にスレのmodifiedを自動更新する方法ないでしょうか?
counterCacheを使うとレス数カウントはできるのですが、更新時刻も取りたいです
0640nobodyさん2012/09/20(木) 16:59:36.49ID:???
>>639
そんなロジック実装してないよ。
Modelに書いとけ。
0641nobodyさん2012/09/22(土) 18:00:13.95ID:???
counterCacheの存在を初めて知った
0642nobodyさん2012/09/22(土) 18:06:13.12ID:???
アソシエーション便利だけど、裏ではどんだけ無駄な処理が実装されて動いてるんだろうな
findやsaveを1回する度にCPUが悲鳴を上げているような気持ちになる

気になるので今度lib以下のソース見てみるか
使わない機能はばっさりコメントアウトとかしちゃおうかな
0643nobodyさん2012/09/22(土) 18:12:35.09ID:???
そういうのがもっと整理されれば速度も上がるんだけどね
0644nobodyさん2012/09/22(土) 19:00:02.06ID:???
cakephpは使わないコードはなるべく読み込まないような実装になっているはず
0645nobodyさん2012/10/01(月) 00:47:57.77ID:fpJxZWOx
ファイルのアップロードで、fileに対するバリデーションのことなんですが、
ファイルが指定されていたらファイル形式、ファイルサイズなどをバリデーションにかけて、
指定されていなかったらかけない、という書き方がわかりません
どうしたらいいんでしょうか?
0646nobodyさん2012/10/01(月) 02:38:43.69ID:???
ファイルのアップロードでファイルが指定されている/いないって意味がよく分からないし、
どこで躓いているのかもよく分からないし、
CakePHPのバージョンも分からないので答える気が失せる質問だから、
何となくvalidate 系のコールバックをうまく使えばいいじゃんとしか言えない。
0647nobodyさん2012/10/01(月) 05:38:17.07ID:???
if (isset($_FILE['image'])) {
//ファイルがアップロードされた場合のバリデーション
} else {
return true;
}

素のPHPで言うと、こういう事じゃないの?
0648nobodyさん2012/10/01(月) 07:27:09.08ID:qwXCS9RT
>>646
$form->file()でファイル渡せる状態になってるフォームで、
そこにファイルを指定したときだけファイルの中身のバリデーションをかけたいってことです

>>647
ありがとうございます
allowEmptyみたいな感じで、
<input type="file">にファイルを指定していなければバリデーションルールはスルーする
みたいな簡単にできるものってないんでしょうか?
0649nobodyさん2012/10/01(月) 10:28:51.05ID:???
簡単には出来ないよ。俺もルールは自作してるよ
0650nobodyさん2012/10/01(月) 10:29:01.17ID:???
>>648
>>1
>質問するときはCakePHPのバージョンを書きましょう
0651nobodyさん2012/10/01(月) 10:30:55.20ID:???
俺は簡単にできてるけど、やってみてできなかったの?
0652nobodyさん2012/10/01(月) 20:09:57.83ID:fpJxZWOx
>>649
ありがとうございます自作してみます

>>650
echo Configure::version();してみたら1.3.8って出ました
書き漏れすみません

>>651
allowEmptyでは無理でした
普通にエラー警告(ファイルの形式を見て、jpgでなければ警告を出すようにしてました)が出ました
0653nobodyさん2012/10/01(月) 21:49:36.94ID:???
Cake2本がついに発売されてるのか
2のリリースから1年も経って、やっとまともな本が一冊
うれしい
06546452012/10/01(月) 22:08:47.24ID:fpJxZWOx
>>649
>>647のやり方でうまくいきました
みなさまありがとうございました
0655nobodyさん2012/10/02(火) 01:23:26.02ID:???
いまだ1.3使ってる人いるんだな
何故2系を使わないのか
0656nobodyさん2012/10/02(火) 03:11:43.69ID:???
使う理由がないから
0657nobodyさん2012/10/02(火) 15:09:48.22ID:???
さすがに新案件は2系だな
0658nobodyさん2012/10/02(火) 18:17:45.17ID:???
これまで書いたコードを、2対応に書き直す時間がないお
0659nobodyさん2012/10/02(火) 18:23:04.39ID:???
そんなに時間かからないよ
0660nobodyさん2012/10/02(火) 18:26:06.05ID:???
>>659
きちんとテストコードをかいてるひとには苦行だぞ
0661nobodyさん2012/10/07(日) 03:32:25.58ID:vSsbr+AJ
CakePHPでバリデーションエラー時に
エラーメッセージをまとめて一箇所に表示する方法ってある?
0662nobodyさん2012/10/07(日) 10:11:59.83ID:???
>>661
無い
0663nobodyさん2012/10/07(日) 15:15:02.59ID:???
ちょっと前に同じ話が出てたはず
ログ見るべし
0664nobodyさん2012/10/12(金) 18:03:03.50ID:zHaiJKat
最終ログイン時間を記録する場合どういう実装をするのが適切でしょうか?

僕が思いつくのは、
app_controller.phpのbeforeFilter()に、
アカウントテーブルのlastloginに現在の時間をupdateする方法です

ログインのアクションに記述すると、
クッキーで自動ログインしている際などはそのアクションを通らないので不適切でした

なにか他に良い方法ありますでしょうか??
0665nobodyさん2012/10/12(金) 23:39:10.35ID:???
自動ログインの場合も記録したいというのならそれが正解なんじゃないかな
0666nobodyさん2012/10/16(火) 15:59:26.74ID:???
はてブで見かけた、
「外注が作ったCakeのコードが糞だから書き直した」的なブログ記事。
「お前のコードも糞じゃねぇか」って叩かれてワロタw

てか、俺の書き方が意外と駄目じゃないと知っただけでも収穫あったぜ
0667nobodyさん2012/10/17(水) 20:17:29.91ID:???
URLくれくれ
0668nobodyさん2012/10/17(水) 20:54:19.04ID:???
http://ac7.tumblr.com/post/33569124174
これかな
0669nobodyさん2012/10/18(木) 00:28:24.24ID:???
cakePHPの勉強を始めようと思い、ver2から始めようと思ってます。
「プロになるためのPHPプログラミング入門」という本が良さそうと思ったんですが、
ver1.3基準で書かれているようです。
cakePHP2を勉強するうえで、1.3基準の本は有用でしょうか?
0670nobodyさん2012/10/18(木) 01:17:25.05ID:???
有用ではありません。
もうcake2の本はあるんだからそっち選びなさい。
CakePHP2 実践入門 は評判良いぞ。
0671nobodyさん2012/10/18(木) 23:55:26.47ID:???
>>669
670に同じく今さら1.3の本を読むのは時間のむだ。
公式のチュートリアルを何回も繰り返して手順を身体に覚えこませてから
>>670 の本を読むといいと思うよ。
06726692012/10/22(月) 14:14:23.93ID:???
遅くなりましたがアドバイスありがとうございました
0673nobodyさん2012/10/24(水) 12:14:02.26ID:???
2.2.2を使用しています。
Authコンポーネントのログインで、認証条件を付ける時、
以下のようにすればOKとあったのですが、条件が適用されません。
書き方が違うのでしょうか?

$this->Auth->userScope = array( 'User.status'=>1 );
0674nobodyさん2012/10/24(水) 14:29:36.53ID:???
さくらサーバーをレンタルし、2.2.2のソースをCakeファイル直置きでアップロードした所
同コントローラの別アクションへredirect処理が行なわれなくなりました。
$this->redirect(コントローラ名:アクション名)を試してみても
$this->redirect(相対パスor絶対パス)の形でも
どちらの形式でも正しくリダイレクトが行なわれていないようです(真っ白なページが表示される)
何か間違っているのでしょうか
06756742012/10/24(水) 15:50:39.87ID:???
とりあえず動かす為にJavaScriptで遷移させます
お騒がせしました
0676nobodyさん2012/10/24(水) 16:28:04.62ID:???
>>673
それ、1.3の書き方なんじゃないの?
よく分からんけど公式ドキュメントにそんなプロパティ載ってないよ
1.3ならあったみたいだけど

>>674
真っ白=debugモードが0でいいのかな?
だとしたらキャッシュクリアしてみた?
0677nobodyさん2012/10/24(水) 16:30:39.54ID:???
>>673
今改めて見直したら AuthComponent::$authenticate じゃないかな?
06786732012/10/25(木) 09:13:43.26ID:???
>>676-677
ありがとうございます。
自分もソースを見直したら、以下のようにしたら実行できました。

$this->Auth->authenticate = array(
  'Form' => array(
    'scope' => array('User.status' => 1)
  )
);
0679nobodyさん2012/10/26(金) 15:07:41.06ID:???
ファイルアップロードを今まで自作コンポーネントで扱っていたのですが、
これってモデル(ビヘイビア)の処理ですかね?
コントローラ側でエラーチェックとかアップロード先のパスとか書いていくと
長くなるのでどうすれば納まりが良く、使い回しが利くかと悩んでいます。
0680nobodyさん2012/10/26(金) 15:44:39.23ID:???
679ですが、後から考えたらコントローラに入れる方が小回り利きますね
効率化よりも今まで書いていた方法で行きます。
0681nobodyさん2012/10/26(金) 17:58:57.48ID:???
まぁ、それでいいなら構わないけど、Modelだよ普通は。
あとプラグインもいいのあるけど、何で使わないの?
0682nobodyさん2012/10/26(金) 19:01:29.27ID:???
>>681
自分の使い方だと、コントローラの方が良いと思いまして。

例えば、一度アップロードしたファイルはセッションに入れて、
フォームのその他の項目にエラーがある時は、
そのセッションを表示して再アップロードさせない。

みたいな処理を入れる時、セッションコンポーネントを使うので、
モデル内で解決するより、コントローラの方が簡単だと思いまして。

あと、プラグインも小回りが利かないんです。
ファイル名をいくつかのパターンで生成したい時とか、
最初は仮フォルダにアップして、save前に公開画面のフォルダに移動するとか
そういう細かい仕様に対応するには自作の方が便利なんです。
ファイルアップロードの仕組みを自作する事自体は簡単ですし。
■ このスレッドは過去ログ倉庫に格納されています