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

【PHP】フレームワーク CakePHP 8ホール目【1.3】

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん2010/03/18(木) 10:00:59ID:6+kHM8kH
CakePHPは、Ruby on Railsの概念の多くを取り入れた、Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークです
CakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう

※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
0892nobodyさん2010/07/19(月) 13:12:19ID:???
CakePHP 1.3.3 rainbow icing edition released
08938782010/07/19(月) 13:44:01ID:???
>>890
884で書いた事って、891のURLで書いている事と同じ事ではないでしょうか?
891のURLでも分けてsaveしてますよね。

ちゃんとモデル毎に分けて配列に入れてますし、
paginateする時も一緒に読み込んでますよ。
0894nobodyさん2010/07/19(月) 13:48:04ID:???
すげーなお前
0895nobodyさん2010/07/19(月) 14:44:13ID:???
>>893
ヒント>>890>>891は別人
0896nobodyさん2010/07/19(月) 14:48:41ID:???
MediaPluginの使い方が難しすぎる・・・
素直に適当なコンポーネント作成してアップロードさせた方が良いな
0897nobodyさん2010/07/19(月) 15:09:05ID:???
>>895
え?書いてあるよ
0898nobodyさん2010/07/19(月) 15:14:59ID:???
>>896
ソース読めばそうでもない。
0899nobodyさん2010/07/19(月) 15:40:08ID:???
>>897
ほんとだ。書いてあったw
ってことは結局>>889
>>878は腹に落ちるまで何度も読めばいいのに
0900nobodyさん2010/07/19(月) 18:01:14ID:???
>>882
知ってるよ。
でも設定より規約を重視するフレームワークでは
推奨される行為ではないんだろ?
DBにも制約があるなんて屑加減にも程がある。
0901nobodyさん2010/07/19(月) 18:10:10ID:???
フレームワークをなんだと思ってるんだろうか
0902nobodyさん2010/07/19(月) 18:10:33ID:???
主流のFWの規約=その時代の標準的なコーディング規約

と思っても良いと思うぞ。
それから大きく離れているコードを書く人は、おれおれFWを作りやすい人なんだろうな。
0903nobodyさん2010/07/19(月) 19:17:48ID:???
規約を守らないで使うぐらいだったら、オレオレライブラリとかpearとか使ってやった方が
その後は幸せになれるとおもうよ。規約があるから楽になるんだから。
0904nobodyさん2010/07/19(月) 19:31:31ID:???
複数人で開発する場合は規約があったほうがいい。
0905nobodyさん2010/07/19(月) 20:12:55ID:???
おまえら釣られすぎww
0906nobodyさん2010/07/19(月) 21:49:21ID:???
>規約があるから楽になるんだから。

これ、ほんとそうだな。
俺みたいに優柔不断で仕様作るのに時間かかる人間からしたら
規約が決まっている方が作りやすい。
0907nobodyさん2010/07/20(火) 00:03:25ID:Al1F2MMr
cookbookの投稿記事の編集を見たのですが、
http://book.cakephp.org/ja/view/340/Editing-Posts

function edit($id = null) {
$this->Post->id = $id;


と言うふうに書かれていますけど、関数の$idって
どこから参照されるのでしょうか?

URLが /(コントローラー名)/edit/id:10
であれば、edit関数内で$id=10として代入されるかと思ったのですが、
代入されていませんでした。
0908nobodyさん2010/07/20(火) 00:45:09ID:???
/edit/10
09099072010/07/20(火) 01:14:21ID:???
>>908
出来ました。URLの意味が
/コントローラー名/アクション/ID

だったんですね。id:10とかパラメーターが付いたら直で渡せないと。
その場合は、$this->params["named"]で取るようにします。
0910nobodyさん2010/07/20(火) 01:22:58ID:???
なにがしたいのかしらんがよくわからない方向に向かおうとしてる気がする
0911nobodyさん2010/07/20(火) 01:36:41ID:???
DBの命名に縛りが出ることにすげー違和感を覚えるんだが。
君達はそんなことないのか?
「楽だから」という理由だけでそれに納得してるのか。
単純な脳みそしてんだなー。
0912nobodyさん2010/07/20(火) 01:43:24ID:???
まあそこのページ、英語と日本語でちょっと違ってて
英語版を試すとおかしなことになるんだよね。
1.3用の英語ページが一番正しい。はず。
0913nobodyさん2010/07/20(火) 01:51:17ID:???
>>911
使ったことあればわかると思うけど別に縛りなんて無いよ。ただ初期値があるだけだ。
好きな名前使えばいい。
0914nobodyさん2010/07/20(火) 02:08:39ID:???
サッカーはどうして手を使ったらダメなんだ?って考える人ってめんどくさいだろ?
ボール蹴って「そういうもんだ」と思って楽しんだほうが楽なのと一緒だ。
0915nobodyさん2010/07/20(火) 03:27:06ID:???
ここ数日CakePHPを使えないものとしたくてたまらない奴が一匹いるようだな
0916nobodyさん2010/07/20(火) 03:28:46ID:???
Smartyスレに来るやつと同一人物だな
0917nobodyさん2010/07/20(火) 03:40:37ID:???
つうか、使わなきゃいいんだってw
規約に合わせたくない、合わせるのが諸処の事情で難しい、
そういう現場にまで押しつけようとは
CakePHPコミュニティも、俺らもしてないじゃないの
0918nobodyさん2010/07/20(火) 04:20:04ID:???
たぶん、会社の上司かクライアントか誰かに言われたんでしょ。
「フレームワーク勉強しろ」って。
そんで、必死に勉強しない理由探して叩いてるだけでしょ。
0919nobodyさん2010/07/20(火) 07:51:24ID:???
>>911
DB名を規則通りにすると1〜2行程度、楽ができるとかレベルだから
好きにつければいいよ。一通り、規約によるメリットを調べてから
従うもの、無視するもの選べばいいよ。
0920nobodyさん2010/07/20(火) 08:41:24ID:???
そんなに日本語カラム名が使いたいのか
0921nobodyさん2010/07/20(火) 16:17:54ID:???
サニタイズって使う?
HTML許可するフォーム以外、使い道が思い浮かばない。
0922nobodyさん2010/07/20(火) 17:21:06ID:???
データを表示するときに使う
0923nobodyさん2010/07/20(火) 22:32:55ID:???
ビューキャッシュってapp/tmp/cache/view/にひたすら置かれていくけど、
キャッシュ数が多くなったときのためにディレクトリで管理とかできないの?
0924nobodyさん2010/07/21(水) 08:39:12ID:???
>>923
出来るだろうけどやる意味あるの?
0925nobodyさん2010/07/21(水) 10:35:13ID:???
何万ファイルにもなるとOSに負荷がかかるとかなんとかかんとか
0926nobodyさん2010/07/21(水) 10:54:21ID:???
少なくともviewの数以上増えないんでしょ??
0927nobodyさん2010/07/21(水) 10:57:09ID:???
>>926
viewの数ではないよ
0928nobodyさん2010/07/21(水) 11:01:22ID:???
ん、そうなんだ。
あんま気にしたことなかったな。

ただディレクトリ見ても延々増えてるようには見えない。
09299232010/07/21(水) 12:17:22ID:???
>>924
デフォでは用意されてないのかねぇ・・・

>>926,>>928
たとえば1万ユーザーいるSNSでいろいろキャッシュしたら
ユーザーホームのページ分1万ファイル作られるし、さらに日記
ページとかとかキャッシュしたら、天井知らずに増える。
3万ファイルくらいまでは普通にキャッシュ増えて行ってしまって、
こりゃまずいと思って対策を考えているところなんだ。
0930nobodyさん2010/07/21(水) 12:20:00ID:???
なにがまずい?
0931nobodyさん2010/07/21(水) 12:25:47ID:???
使ったことないけど他のキャッシュシステムだと上限設定できるのか?
もしそうなら切り替えれば?
0932nobodyさん2010/07/21(水) 12:37:22ID:???
>>930
キャッシュもデータファイルだから、鯖の容量食うからまずいって話だろ?
0933nobodyさん2010/07/21(水) 12:50:08ID:???
>>930
ひとつのディレクトリに概ね1万以上のファイルはファイルシステムの動作が遅くなる
>>929
ディレクトリで分けるのが正攻法じゃね?
0934nobodyさん2010/07/21(水) 12:51:29ID:ULlFclUd
古いファイル消せ
0935nobodyさん2010/07/21(水) 14:11:26ID:???
キャッシュのエンジンはクラスになってるんだから
FileEngineからでも派生させてオレオレエンジンクラスをつくればいいと思うよ。

それよりログインした後のユーザー領域をキャッシュにするのは大丈夫なのかな。
俺はなんか不安だからやってないんだけど、ユーザーIDをキーにするとかでいいんだろうか?
09369232010/07/21(水) 14:15:22ID:???
説明不足ですみません
アクセスはまんべんなくくるので、キャッシュを減らすわけにもいかず、
キャッシュファイルの数はどうしても万単位になってしまうのです
http://soudan1.biglobe.ne.jp/qa4019431.html
この辺によると、やはり同一ディレクトリには10k〜15kくらいのファイル数に
納めることが理想のようです

自分の場合は容量は特に問題ないので、ディレクトリで分けようと思っています。
cakeでは
app/tmp/cache/view/test_read.cgi_php_1268874059.php
という感じのファイルが生成されますが、これを
app/tmp/cache/view/test/read.cgi/php/1268874059.php
みたいな感じで生成する方法はデフォルトで用意されているのでしょうか?
0937nobodyさん2010/07/21(水) 14:16:07ID:???
>>935
ずっと前だけど、そのときはURL叩いたらログインして無くても表示された
でも今ならcake:nocache使えばいけるかも?
0938nobodyさん2010/07/21(水) 14:18:45ID:???
>>936
用意されてない
最後の数字がユニークなら末尾2桁とって 59 というディレクトリに書き出すようにすると100分の1になるよ
09399232010/07/21(水) 14:28:11ID:???
>>938
用意されていないのですね・・・
自前で仕組みを作ってみることにします。
0940nobodyさん2010/07/21(水) 14:29:53ID:???
>>939
あ、でも任意のディレクトリを指定できたかも?
調べてみて
09419232010/07/21(水) 14:36:20ID:???
>>940
保存場所を任意のディレクトリにはできるようです
キャッシュ保存前に保存場所を切り替えてディレクトリに分けて保存するという
やり方もありそうですが、結局読み出しの時にそのディレクトリを指定してあげなきゃ
いけないので、どちらにせよその辺は自前で用意しなきゃいけませんね・・・
09429352010/07/21(水) 14:36:36ID:???
あちょっと違ってた。
ビューのキャッシュのファイル名など決めてんのはキャッシュヘルパーの仕事すね。
09439352010/07/21(水) 14:52:27ID:???
>>937
そんなこともあったんだ。

俺が不安に思ってたのは、キャッシュのファイル名はurlをInflector::slugにかけて作ってるから
下手すると、違うページなのに同一ファイル名のキャッシュができてしまう可能性があること。
1.3のInflector::slugはちょっと良くなったみたいだけど、どうなんだろ。
0944nobodyさん2010/07/21(水) 14:55:11ID:???
>>943
URLごとにキャッシュファイル作成するからそれはない
Inflector::slugの件は、PCREライブラリの設定で、回避可能(確認したのはv1.3.0)
0945nobodyさん2010/07/21(水) 14:56:13ID:???
ビュー内で、そのビューが格納されている
フォルダ名(コントローラー名の頭文字を小文字にしたやつ)
を簡単に取得するにはどうしたらいいでしょうか

$this->name で名前がとれましたが、頭文字が大文字の
ため、毎度変換しないといけないので、もっと簡単にとれれば
と思った次第です
0946nobodyさん2010/07/21(水) 15:11:56ID:???
>>945
つ Inflector
0947nobodyさん2010/07/21(水) 15:45:21ID:???
みなさん、Cakeに移行するまでに使っていたclassや関数ってどうしてます?
コンポーネントやヘルパーを作って完全にCakeに移行します?

Cake用に書き換えるとCake以外で使う時、使えなくなるなって思い
どこまで移植するか悩みます。
0948nobodyさん2010/07/21(水) 16:16:24ID:???
ベンダーにいれろよ
0949nobodyさん2010/07/21(水) 16:32:57ID:???
ベンダーですか・・。DB接続あるし、どうしようか悩むんですよね。
0950nobodyさん2010/07/21(水) 16:39:38ID:???
迷ってる暇があるなら、
さっさとcakePHP用に移行したほうが幸せになれると思うけど。

cakePHPのファンクションを使用しなければ、
他のフレームワークに移行したところで影響は少ないと思う。
0951nobodyさん2010/07/21(水) 16:52:33ID:???
DB接続をハードコーディングしてあるクラス
カラスもつつかないごみじゃない?
0952nobodyさん2010/07/21(水) 18:00:11ID:???
>>950
さっきから小一時間やっていたのですが、
ようやく1つの関数を移行できました・・。

いくらやってもデータが追加できなかったのですが、
素のSQL文って INSERT INTO table_name ('name') VALUES ('aaa')
でもインサートされて、IDはオートインクリメントで連番が付けられますが、
Cakeの場合は、IDフィールドを指定しないと追加されません。

$values["Test"] = array(
'id' =>'', // これが必要
'name'=>$name
)

こういうCake特有の仕様が物凄く面倒なんですよね・・・
0953nobodyさん2010/07/21(水) 19:49:47ID:???
え?
0954nobodyさん2010/07/21(水) 19:56:15ID:???
これがPHP脳ですか?
0955nobodyさん2010/07/21(水) 20:24:57ID:???
本当にゴミ以下のソースで藁
0956nobodyさん2010/07/21(水) 20:27:02ID:???
そんな無駄な資産捨てちまえってww
0957nobodyさん2010/07/21(水) 20:33:16ID:???
おまえらにも親の肩身のタオルケットくらいあるだろうが!
0958nobodyさん2010/07/21(水) 21:39:58ID:???
いちいち変数に値が存在するか否かissetで調べないと
Undefined variableエラーが出るんだけど、
issetで調べない方法はゴミソースで良いの?
0959nobodyさん2010/07/21(水) 23:41:22ID:???
>>958
getデータはrouting使うと、issetやらis_numericやらは省略できる
0960nobodyさん2010/07/21(水) 23:44:28ID:???
emptyで
0961nobodyさん2010/07/22(木) 00:33:00ID:???
>>958
お前は何を言ってるんだ?
それがCakePHPの所為だとおもってるんなら今すぐやめたほうがいい
0962nobodyさん2010/07/22(木) 01:07:55ID:???
array地獄をやめてclassに移行してほしい。
生成した側は構造が分かっているはずだけど、
依存するのは避けたいから利用側で確認しないわけにはいかない。
0963nobodyさん2010/07/22(木) 01:41:18ID:???
formヘルパーのtimeで
24時間以降を、午前1時=25:00
というふうに30時くらいまで追加する方法ってないでしょうか
0964nobodyさん2010/07/22(木) 01:46:11ID:???
継承して数値ずらせばいいだけ
0965nobodyさん2010/07/22(木) 02:05:46ID:???
>>961
止めるって何を?
0966nobodyさん2010/07/22(木) 02:35:07ID:???
人生以外ないだろ
0967nobodyさん2010/07/22(木) 12:00:40ID:???
CakePHPは人生
0968nobodyさん2010/07/22(木) 14:36:53ID:+voqy8bn
AというコントローラーでモデルをA・Bと指定してるとします。
findの場合、$this->B->find でBのモデルに対するデータを取得できますが、
これをページネーションでするにはどうすればいいのでしょうか?
$this->B->paginate()では駄目でした
0969nobodyさん2010/07/22(木) 14:46:06ID:???
$this->B->paginate(’B’)

でいけました。スレ汚しすみません。。
0970nobodyさん2010/07/22(木) 15:50:14ID:???
解決はや!
0971nobodyさん2010/07/22(木) 18:41:51ID:???
>>958
あたまに@つけろ
0972nobodyさん2010/07/22(木) 18:44:59ID:???
@推奨すんなw
あとcakePHPとは関係がない。よそでやれ
0973nobodyさん2010/07/22(木) 19:52:23ID:???
DBのカウンタのフィールドを+1したい(SQL で書くと counter + 1 )のだけど
cakePHPのモデルだとどう書くのですか?
0974nobodyさん2010/07/22(木) 19:56:52ID:???
>>973
インクリメントビヘイビアというのがある
それをそのまま使うか、それを参考に
0975nobodyさん2010/07/22(木) 20:43:44ID:???
>>974
Thanx!!
検索用語が難しくて全然探せなかったので助かりました。

$this->Article->doIncrement($id, 1, 'votes');

Increment Behavior (Articles) | The Bakery, Everything CakePHP
http://bakery.cakephp.org/articles/view/increment-behavior

検索用: フィールド +1 カウンター SQL field +1 counter

と思ってソースみたら、結局findByIdしたものを +1 しているからSQLは2回
投げる気がする。それだったら意味ないっぽい。
上記リンクのコメントのリンク先にあるやり方の方が良さそうかな。
$content->updateAll(array(‘num_of_purchases’ => ‘num_of_purchases+1′)
0976nobodyさん2010/07/22(木) 20:44:53ID:???
または、これかな。

app_model.php

function UpdateHits($id)
{
//debug ($this->useTable);exit;
$FieldToInc = 'views';
$this->execute("UPDATE $this->useTable SET $FieldToInc=$FieldToInc+1 WHERE id=$id");
}
0977nobodyさん2010/07/22(木) 21:22:06ID:???
単純にSQL文で書けば
UPDATE table_name SET count=count+1

なのに、やけにめんどくさいよね。仕様だから仕方ないけど
0978nobodyさん2010/07/22(木) 22:04:37ID:???
そう思ったらquery()つかえばよろし
0979nobodyさん2010/07/22(木) 22:55:12ID:???
まぁ、そこら辺はCakeは遠回りするからね。
シンプルなものなら直書きでも良いんじゃないか。
0980nobodyさん2010/07/23(金) 01:12:40ID:???
>>977
それは排他制御が・・

Cakeのは大丈夫なのか、といわれると知らんが。
0981nobodyさん2010/07/23(金) 01:41:37ID:???
saveしようとして
$dat = array('id'=>null,'txt'=>'AAA')
を table->save($dat)
としたら、
クエリの内容が
INSERT INTO "table" ("id", "txt") VALUES (NULL,'AAA')
となってしまって、
idはnullじゃ駄目なんだよ。とエラーが返ってきます。

通常idがnullだと、クエリからidは外してくれるんですが
何故かidが外れません

何か原因で考えられる事はあるでしょうか
0982nobodyさん2010/07/23(金) 01:43:22ID:???
ならidの辞書型自体を指定しなけりゃいいんじゃね?
0983nobodyさん2010/07/23(金) 02:03:22ID:???
確かにそうなのですが、
これまではidを指定していても自動で外してくれていたんです。

特定の場所だけで発生しています
0984nobodyさん2010/07/23(金) 02:06:15ID:???
これまでって何だよ
0985nobodyさん2010/07/23(金) 02:10:46ID:???
エスパー召喚魔法唱えてるんだろ。
人間に方は放置しておk
0986nobodyさん2010/07/23(金) 02:13:24ID:???
>>981
>>952じゃないの?
0987nobodyさん2010/07/23(金) 02:17:47ID:???
いっそソース一式全部晒してくれれば
バグを見つけてくれる人もいるだろう
0988nobodyさん2010/07/23(金) 02:33:57ID:???
どうでもいいけどチュートリアルくらいはこなしてから人に聞いてるんだろうな
0989nobodyさん2010/07/23(金) 02:37:40ID:???
モデル周りのマニュアルちゃんと読めばなんてこと無いことを苦労してる気がする。
0990nobodyさん2010/07/23(金) 02:39:23ID:???
>>980
この場合の排他制御ってどういう意味?
MySQLならUPDATEしていれば問題ないよね?

incrementの方は排他制御的に問題あると思うけど
0991nobodyさん2010/07/23(金) 03:09:35ID:???
そもそも+1したいってなんなの?
システム変更でデータ移行するから一気に+1したいのか
取り出した値を常に+1したいのか
あーめんどくせーどうでもいいや

ここ最近の質問って全部同一人物だろ
ぐだぐだいってないでCakeやろうと思ったなら
オフィシャルやらチュートリアルやらAPIのドキュメントやら読めよ
嫌なら何も始めるな
レス数が950を超えています。1000を超えると書き込みができなくなります。