トップページphp
995コメント290KB

【PHP】フレームワーク CakePHP 13ホール目【v2.0】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2011/11/09(水) 01:05:10.60ID:???
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 12ホール目【笑】
http://hibari.2ch.net/test/read.cgi/php/1309505626/
02352222011/12/12(月) 22:21:11.57ID:???
>>229
セキュリティ的にちゃんとした物が書ける自信がなかったので
プラグイン使おうと思いました。
>>230
今回は裏目に出たけど、他人のソースを読めてよかったと思う事にします。


画像うpについては↓のプラグインがさくっと動いたので今回はこれで行く事にします。
ttps://github.com/fusic/filebinder
制作者様(?)の解説動画↓
ttp://zenpre.net/p/Gacui

では、名無しに戻ります。お騒がせしました。
0236nobodyさん2011/12/12(月) 22:26:02.72ID:???
>>234
1.3でぼろぼろだから2.0は厳しいと思う。
作者がgithubで「自分の為に作ってるプラグインで、今忙しいごにょごにょ」
って言ってたから自分で修正できないならやめとけ。
0237nobodyさん2011/12/13(火) 10:15:11.41ID:???
結局、誰の助言も聞かずに自分で探して終了か。
画像アップロード如きで「セキュリティが〜」とか言っちゃう奴が
他人の作ったプラグインをすんなりと受け入れるというのが
おかしいとは思わないんだろうな。

頑なに意思を変えないなら、人に質問しなきゃ良いのに。
0238nobodyさん2011/12/13(火) 11:31:08.57ID:???
なんか陰湿でキモい
0239nobodyさん2011/12/13(火) 15:08:02.43ID:???
うかつに質問も出来ないこんな2ちゃんねるじゃ
0240nobodyさん2011/12/13(火) 15:53:33.42ID:???
自分で分かるならわざわざ質問するなとは思わないか?
0241nobodyさん2011/12/13(火) 16:19:08.03ID:???
>>239
ぽいずん
0242nobodyさん2011/12/14(水) 00:20:14.28ID:???
>>240
自分の中で80くらいがんばって無理だったらネットで質問しつつ後の20の努力をする。
質問に回答もなく、後の20がんばっても無理だったら諦めて違う方法を模索する。
0243nobodyさん2011/12/14(水) 01:34:17.83ID:???
いや、回答出してるじゃん
0244nobodyさん2011/12/14(水) 17:39:11.08ID:???
CodeIgniterは覚えたからCakePHPも覚えたいと思うんですけど難しいよ
0245nobodyさん2011/12/14(水) 17:40:34.96ID:???
モデルってデータベースに接続しないといけないの?
モデルに変数でデータを入れててコントローラーからそれらの変数を取得ってできないの?
0246nobodyさん2011/12/14(水) 17:41:52.04ID:???
グローバル変数みたいなことか?出来ると思うけど。
あと、データベース使わなくても使えるよ。
0247nobodyさん2011/12/14(水) 23:57:19.24ID:???
Railsのせいでモデル=データベースの1テーブルって
間違った考えが広まってしまったよな。
0248nobodyさん2011/12/15(木) 00:06:20.83ID:???
4
0249nobodyさん2011/12/15(木) 03:00:05.66ID:???
モデル名とコンポーネント名が重複してるとコンポーネントの方が優先されてモデルにアクセスできなくなるのって仕様?
UserモデルがあるところにUserコンポーネントも作っちゃうと$this->User->save()とかがundefined methodになってしまう
0250nobodyさん2011/12/15(木) 11:44:42.72ID:???
同名ならそりゃそうだ
0251nobodyさん2011/12/15(木) 11:46:40.70ID:???
またCakeの関数と重なるアクション名を付けてうまく動かなかったよ
すぐ参照できる一覧とかねーのかよ
つーかPHPてnamespaceないわけ?なにこの糞言語
0252nobodyさん2011/12/15(木) 12:26:04.28ID:???
>>251
PHP5.3以降ではnamespace使えるけど、
Cake2.0は動作環境にPHP5.2系も入れてるので互換性のために仕方ない部分もあるのでは。

FuelPHPみたいに最初からPHP5.3以降で作られてるやつはコアでnamespaceサポートされてたりするし。
0253nobodyさん2011/12/15(木) 13:24:42.38ID:???
PHPって後からつけたしつけたし、つぎはぎみたいな言語だし
フレームワークは苦労するわな
0254nobodyさん2011/12/15(木) 17:12:04.31ID:???
>>250
やっぱそうなのか
一つのモデルに対して、同名のコントローラーとコンポーネントを作れると名前がそろっていて綺麗なんだがなあ・・・

たとえばUserModelに対してeat_cake_countをアップデートする処理とかはUserComponentに書きたい
そういうときはUsersComponentって名前にすればいいのかな
なんかその辺のコンポーネントの分け方(ネーミングルール)のセオリーみたいなのがよくわからないんだよね
UpdateComponentって分け方にすると、とんでもなく巨大なファイルになりそうだし
0255nobodyさん2011/12/15(木) 17:32:59.52ID:???
それはモデルに書くべきじゃないの?
コントローラーは薄く、モデルは厚く
0256nobodyさん2011/12/15(木) 18:14:13.62ID:???
>>251

せめて

function actionIndex()
function actionView()

みたいな作りになってればいいんだけどね。
0257nobodyさん2011/12/16(金) 13:25:33.43ID:???
Modelの中身が突如出力されだしたんですが消し方知ってる方いませんか?
http://www.dotup.org/uploda/www.dotup.org2386365.png

0258257 2011/12/16(金) 13:34:08.67ID:???
自己解決 <php がありませんでしたw
0259nobodyさん2011/12/16(金) 19:10:30.97ID:???
1つのレコードの1つのカラムを更新したい場合、
findで目的のレコードを取り出してsaveするのと
updateAllで1つだけ更新するのとでは、どちらが速いですか?
0260nobodyさん2011/12/16(金) 21:55:12.50ID:???
<php じゃ動きません
0261nobodyさん2011/12/16(金) 22:46:31.07ID:???
一人で開発する分にはフレームワークいらない
CakePHPだと逆に遅くなる。
PHPは頭よりも手を動かしてなんぼだと思う。
フレームワークは頭を動かす比重が大きくなる。
設計部分が特にそう。
極端に言えば変数が上書きされないようクラス化しておけば実運用では問題ない。
スパッティーコードにもメリットはあって頭使わなくても最速でコーディングできる。
関数の共通化を考える時間があれば手を動かしてた方がいい。後でリファクタリングで十分。
0262nobodyさん2011/12/16(金) 23:38:25.39ID:???
一生のうちPHPで書くアプリケーションが3つほどまでで、書き直しを一切しないというなら完全に同意してもいい
0263nobodyさん2011/12/17(土) 00:03:51.26ID:???
>スパッティーコードにもメリットはあって頭使わなくても最速でコーディングできる。
ワロタ
学生の課題ならそれでいいんじゃね
0264nobodyさん2011/12/17(土) 06:04:20.02ID:???
セッションが設定した時間内で切れてしまうのですが、
原因として何が考えられますか?

core.phpでは以下のようになっています。
Configure::write('Session.timeout', '31536000');
Configure::write('Session.start', true);
Configure::write('Security.level', 'low');

ちなみに、サーバーにアップロードすると自動的に切れてしまうのですが、
ローカルでは大丈夫(もしくは切れるまでの時間が長い)なんですよね・・・
0265nobodyさん2011/12/17(土) 06:11:18.00ID:???
Configure::write('Session.save', 'php');
Configure::write('Session.checkAgent', true);
あと関連しそうな設定は上記になっています。忘れていました。
他のsession関連の設定はコメントアウトされています。
0266nobodyさん2011/12/17(土) 09:24:53.68ID:???
1つのレコードの1つのカラムを更新したい場合、
findで目的のレコードを取り出してsaveするのと
updateAllで1つだけ更新するのとでは、どちらが速いですか?
0267nobodyさん2011/12/17(土) 11:42:27.08ID:???
>>266
findする意味がわかんないんだけど。
saveするだけが一番早いだろうに。
0268nobodyさん2011/12/17(土) 14:55:06.91ID:???
select id from posts where user_id = 3;
update posts set title = 'hogehoge' where id = 5;



update posts set title = 'hogehoge' where user_id = 3;

さてどっちが速いかね
0269nobodyさん2011/12/17(土) 15:59:01.03ID:???
user_idがユニークでインデックスあたってれば、後者のほうが速そう
0270nobodyさん2011/12/17(土) 18:54:27.72ID:???
>>267
findしないと、idがわからない
0271nobodyさん2011/12/17(土) 18:58:31.20ID:???
>>268
後者が速いよな。
CakeではupdateAllか。それ以外方法ないよな?
0272nobodyさん2011/12/17(土) 19:59:48.04ID:6Ny+9Cbj
エレメント使うと Starting to render ってHTMLにコメントが入っちゃうんですけど
これ消す方法ないですか?
0273nobodyさん2011/12/17(土) 21:10:11.26ID:???
>>272
debugが0なら消える
0274nobodyさん2011/12/18(日) 04:48:44.53ID:9T9v3cA3
CakePHP2.0 + SQLite3で
arning (512): _cake_model_ cache was unable to write 'default_"xxx"' to File cache [CORE\Cake\Cache\Cache.php, line 310]
みたいな警告が出るんですが同じ症状の人いません?
0275nobodyさん2011/12/18(日) 18:19:44.28ID:???
>>223
どこが遅いかの原因解明をまず行うべきです。

SQLレベルなのか、画面描画なのか、CakePHPのせいなのかetc
ユーザー数増加によるアクセス過多も問題になることはありますね。
根本的に解決しない可能性もあります。
0276nobodyさん2011/12/18(日) 18:27:15.86ID:???
>>259
やりたい事をそのまま2つの処理で書いて、debugでSQLが出力されますので、
それをMySQLのオプティマイザーなどの時間が計測できる機能で実際に試してみては?

レコード数の多い・少ないにも関連しそうなので、
テストする際には1か月後、1年後などの予測されるレコード数で実行することを忘れずに。
0277nobodyさん2011/12/19(月) 21:46:59.93ID:???
HABTAMで関連付けられた、投稿-タグのテーブルの検索ってどうやるんでしょうか。
やりたいことは、特定のタグを持った投稿を取得する、という単純なものです。
配列は以下のようになっていて、ConditionにTag.name => $tagname などとしても取得できませんでした
Array
(
 [0] => Array
  (
   [Post] => Array
    (
     [id] => 60089
     [message] => testtest
    )
   [Tag] => Array
    (
     [0] => Array
      (
       [id] => 8
       [name] => タグ1
       [PostTag] => Array
        (
         [id] => 26
         [post_id] => 60089
         [tag_id] => 8
        )

      )
     [1] => Array
        :
        :
    )
  )
0278nobodyさん2011/12/19(月) 22:57:47.33ID:???
>>277
Set::extract使うべし
0279nobodyさん2011/12/20(火) 05:19:51.29ID:???
え、そういう問題?
0280nobodyさん2011/12/20(火) 11:14:14.85ID:???
>>278
SQLでとってくる方法はないですか?
「タグ1と関連づいた投稿を全て取得する」というfindができれば教えてほしいんですが、、、
0281nobodyさん2011/12/20(火) 11:48:28.25ID:???
Cakeってさ、findでデータ取ってきた時に
モデル名のキーが頭に付くのがジャマでしょうがないよね
仕方ないからいつもこうやってる
$data = $this->find( ....
$data = $data['モデル名'];
0282nobodyさん2011/12/20(火) 12:16:02.08ID:???
>>277
findするときに、joinsオプション使って明示的にJOINする
0283nobodyさん2011/12/20(火) 12:36:01.65ID:???
>>281
よくやる。
0284nobodyさん2011/12/20(火) 14:59:31.58ID:???
>>281
俺は↓する
$data = $this->User->find('all');
$user_data = $data['User']

これだとどのモデルか分かりやすいし。
ただし、アソシエーション使ってる場合などは、適切でないかも。
0285nobodyさん2011/12/20(火) 16:07:14.62ID:???
>>281
$this->data = $data
ってやると、formヘルパーの値valueに自動でセットするためにキーがついてからね。

おれはあんまり気にしたことがない。
0286nobodyさん2011/12/20(火) 17:30:41.74ID:???
>>284
find('all');ってテーブルの全レコード取り出してるの?
あんまりそういう機会ないなあ
あとfind('all')だと配列が返ってくるから、2行目はエラーになるんじゃないか
0287nobodyさん2011/12/20(火) 17:36:47.14ID:???
>>281
じゃまくせえとは思うけどアソシエーションを考えると仕方ないなと思ってそのまま使ってる
0288nobodyさん2011/12/21(水) 08:45:16.75ID:???
CakeEntity使えよ。色々捗るぞ
0289nobodyさん2011/12/21(水) 10:15:07.10ID:???
>>264だけど、
Configure::write('Session.timeout', '31536000');
↑これってセッションファイルが破棄されるまでの時間じゃないのかよ!!!ややこしすぎ
0290nobodyさん2011/12/21(水) 13:07:35.76ID:???
>>286
あくまで例を書いただけだが・・・
0291nobodyさん2011/12/21(水) 14:24:31.11ID:???
>>288
紹介している人のブログ見たけど、いまいち何が捗るのか分からん
別に配列で指定しても見た目で分かるじゃん。
0292nobodyさん2011/12/21(水) 14:41:31.77ID:???
そんなんだからぺちぱーなんだよ
0293nobodyさん2011/12/21(水) 14:45:23.68ID:???
ぺちぱーってなんですか
0294nobodyさん2011/12/21(水) 14:57:27.19ID:???
PHPer
0295nobodyさん2011/12/21(水) 23:18:44.66ID:???
パーラー(Pearler)ほど洒落た言い回しではありませんね。
0296nobodyさん2011/12/21(水) 23:35:54.39ID:???
APIにアクセスしたりするメソッドってどこに書けばいい?
複数のモデルとコントローラーから利用する予定だけど、クラスとしてLibに置いた方がいいのか
APIからデータを持ってくるところまでモデルとして扱っちゃった方がいいのかで迷っている。

http://www.multiburst.net/sometime-php/2009/01/cakephp-rakuten-webservice-genrecode/
この人はモデルに書いてるけど、外部のライブラリを使うわけで無ければモデルとして書いちゃった方がいいのかな。
0297nobodyさん2011/12/22(木) 16:13:09.95ID:???
ログインの実装のデファクトスタンダード的な方法ってあるの?
ログイン維持しておくのはセッションで?クッキーで?
セッションなりクッキーにユーザーIDだけ保存する?ユーザー情報も保存しておく?
0298nobodyさん2011/12/22(木) 16:20:05.12ID:???
ユーザー情報って具体的に何?
0299nobodyさん2011/12/22(木) 17:12:31.58ID:???
セッションで。名前とか権限とかよく使いそうなデータもいっしょにセッションに入れておく。
0300nobodyさん2011/12/22(木) 17:51:46.44ID:???
AuthComponentだと、usersテーブルの情報だけ持ち回してくれるんだっけ?
その都度SQL叩いてるんだったか、どっちだったか忘れた。
0301nobodyさん2011/12/22(木) 18:58:21.21ID:???
ってかCakePHPってアプリケーションにアクセスするだけで
セッション発行してるけど、なんのために?
中規模のサイトだったらsessionファイルが何万も作られて怖いんだけど
0302nobodyさん2011/12/22(木) 21:04:43.88ID:???
>>301
親切心での自動発行じゃ無いかな
いらないんならSession.startをfalseにしておこうぜ
0303nobodyさん2011/12/22(木) 21:12:30.05ID:???
>>302
falseにしたら
$this->Session->setFlash
のメッセージが表示されなくなったニダ
0304nobodyさん2011/12/23(金) 00:56:07.87ID:???
というか、2.0だとSession.startの設定出来なくなった?
0305nobodyさん2011/12/23(金) 12:30:12.44ID:???
俺も2,0にしたいけど書き換える部分めっちゃあるだろうからめんどうだわ
0306nobodyさん2011/12/23(金) 12:56:48.08ID:???
なんでCakeなんて使って作っちまったんだろうなあ
今更変えられないし
0307nobodyさん2011/12/23(金) 13:04:59.22ID:???
>>306
変えられないのはお前のせい。

正しくフレームワークを使っていれば
自分の作ったコードとフレームワークを分離させられる。
0308nobodyさん2011/12/23(金) 13:24:47.98ID:???
いやいやいやw
0309nobodyさん2011/12/23(金) 13:33:57.13ID:???
時間と手間をかければできる
0310nobodyさん2011/12/23(金) 14:26:04.13ID:???
1.3使ってる、それなりに大きなサイトあるだろ。
そのサイトで問題ないんだから、使い方が悪いだけだ
0311nobodyさん2011/12/23(金) 16:12:44.23ID:???
ふと気づいたんだけど、1.2系でさえまだメンテナンス続いてるのね
最終版と銘打ったものが出ない限り、クリティカルなバグを含んでなければコアをアップデートする気になれない俺は無精すぎる
0312nobodyさん2011/12/23(金) 16:19:01.72ID:???
動いてるシステムに手を入れたくない気持ちはよく分かる。
0313nobodyさん2011/12/23(金) 16:46:26.74ID:???
そうそう
寝た子を起こすようなことになってしまったら嫌だし
0314nobodyさん2011/12/23(金) 17:12:11.79ID:???
メジャーバージョンは動いているシステムだとアップデートするのはきついね。
マイナーバージョンは以前あったセキュリティコンポーネントのバグとかあるから注視しないといかんと思うけど。
0315nobodyさん2011/12/24(土) 08:41:32.33ID:???
1.3.13を使っています。
ビューキャッシュって$autoLayoutがfalseの場合、
キャッシュファイルが生成されません。

レイアウトを使用しない場合、キャッシュが生成されないのでしょうか?
0316nobodyさん2011/12/24(土) 15:39:27.27ID:???
>>315
その状況でのみキャッシュ生成されないんならそうなんじゃない?
layout/empty.ctpとか作ってコンテンツだけを単純に出力するレイアウトにして適用すれば回避できそうだけど
03173152011/12/24(土) 17:08:20.11ID:???
>>316
ありがとうございます。仮のレイアウト作る方法で出来ました。

ただビューキャッシュについては上手く行かないことが多くて、
例えば、core.phpに
Cache::config('default', array('engine' => 'File', 'prefix' => 'aaa_'));
としてもキャッシュファイルにprefixが付きません。
pathを指定しても、指定した箇所にファイルが生成されず、
普段通りapp/tmp/cache/viewsに作られるだけだし・・・

1.3.13をダウンロードして初期設定以外変えてないのですが
どうにもキャッシュ設定の変更が上手く行きません。
ググっても問題を見つけられないし・・・
分かる方いたらアドバイスお願いします。
0318nobodyさん2011/12/25(日) 03:30:55.85ID:S4Adtqyt
CakePHP2.0でSessionの設定関連がcore.phpに見当たらないんですが、
セッションの有効期限を変更するのってどこをいじればいいんでしょうか?
03193182011/12/25(日) 03:57:41.58ID:???
自己解決。
一箇所に固まったのね。
0320nobodyさん2011/12/25(日) 17:29:14.64ID:???
PaginatorHelperって使ってる?
自分で作るよりそんなに楽なの?
0321nobodyさん2011/12/25(日) 21:18:29.33ID:???
>>320
標準であるから使ってる。既にあるものを再作成しちゃいけない。
0322nobodyさん2011/12/25(日) 22:46:46.49ID:???
>>320
かなり楽
0323nobodyさん2011/12/26(月) 00:40:12.74ID:???
SQL文のパラメーターを自分でエスケープする時ってmysql_real_escape_stringでいいんだよね?
conditions に array("MATCH(title) AGAINST ('".mysql_real_escape_string($keyword)."')");
みたいな感じに書くと「DBに接続できてないからmysql_real_escape_stringは使えないっすよ」的なエラーが出るんだけどどうしたらいいんだ
0324nobodyさん2011/12/26(月) 08:51:40.09ID:???
>>323
cakeディレクトリ以下をmysql_real_escape_stringでgrepすることぐらい思いつかなかったの?
0325nobodyさん2011/12/26(月) 08:53:39.81ID:???
>>323
cakeディレクトリ以下をmysql_real_escape_stringでgrepすることぐらい思いつかなかったの?
0326nobodyさん2011/12/26(月) 19:22:58.29ID:???
>>323

App::import('Sanitize');
Sanitize::escape($keyword); とか
0327nobodyさん2011/12/27(火) 02:42:47.86ID:???
>>321,322
でもDBの値を変更して出力する場合には
対応してないですよね?
0328nobodyさん2011/12/27(火) 11:15:57.24ID:???
>>327
ページネイトでDBの値を変更するってどういう用途?
0329nobodyさん2011/12/27(火) 13:24:45.98ID:???
webrootをpublic_htmlにして、それ以外のフォルダはドキュメントルートの外に起きたい場合はどのように設定するのでしょうか?
0330nobodyさん2011/12/27(火) 13:29:34.03ID:???
↓のように見える件について報告はしたけど返信もこないんですけど
たいしたことないから修正されないんですかね?
実際に個人情報とか漏れてるわけでもないので別に問題ないっちゃ問題だいけど。
ちょうどフレームワーク名に使おうか迷っててcakephpにも興味あるんですが
cakephpてurlにクエリをつけるとこういうページが表示されるものなんでしょうか?

http://mystone.aeriagames.jp/?
0331nobodyさん2011/12/27(火) 14:05:11.21ID:???
うわー、urlに?を含めたこと無かったからびっくり。
0332nobodyさん2011/12/27(火) 16:06:32.48ID:???
>>324-325
以前は入っていたような気がするんだけれども、2.xになってから使われてないっぽかったので、よくわからんので質問したんだ
説明不足ですまぬ

>>326
さんくす!
03333152011/12/27(火) 17:42:17.16ID:???
どなたか>>317についてはわかりませんか?
もう何日もググって試してやってますが、
ビューキャッシュファイルにprefixが付きません・・・
0334nobodyさん2011/12/27(火) 19:36:48.08ID:???
>>329
webroot/index.phpでパスを指定する
■ このスレッドは過去ログ倉庫に格納されています