【PHP】フレームワーク CakePHP 3ホール目【本命】
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
2008/03/14(金) 15:16:00ID:HF9x5ODX10分で作るCakePHPアプリ for Windows
http://p4life.jp/cake/
マニュアル日本語化
http://www.cakephp.jp/doc/
日本語フォーラム
http://cakephp.jp/modules/newbb/
あとこのへんとか(初心者向けTIPS)
http://www.avatarfinancial.com/pages/cake/
CakePHP入門リンク集
ttp://pub.studio15.jp/2007/11/13/cakephp-links/
【PHP】フレームワーク CakePHP 2ホール目
http://pc11.2ch.net/test/read.cgi/php/1194976228/
【PHP】フレームワーク CakePHP
http://pc11.2ch.net/test/read.cgi/php/1163850802/
0002nobodyさん
2008/03/14(金) 15:46:16ID:???乙。
0003nobodyさん
2008/03/14(金) 18:11:15ID:???いろんな構造のデータになるけど、どんなパターンがあるのかな?
ちょっと見にくいだろうけど、ありそうなのを組み合わせてみた。
この結果から、配列.Model.・・・、Model.Model.・・・、Model.field、Model.配列.field の
パターンに大別できると思っている。 Model.配列.配列.field なんてのは無い。
そしてキーの先頭が大文字ならモデル名、数値なら配列、
先頭が小文字ならフィールド名と判別できると思っている。
Model::aliasとかあまり使ってないんだけど、これであってる?
何の為にこれを調べているかというと、アソシエーションでごっそり取ってきた
全データの中で、特定モデルの特定の型(たとえば日付)のフィールドだけ変換したいっていう場合に
array_walk_recursiveみたいなのがあればやりやすくない?という話
その下調べ
00043
2008/03/14(金) 18:11:43ID:???'Model1' => array(
'model1_field1' => '値1', 'model1_field2' => '値2',
),
'Model2' => array(
'0' => array(
'model2_field1' => '値1', 'model2_field2' => '値2',
),
'1' => array(
'model2_field1' => '値1', 'model2_field2' => '値2',
),
),
'Model3' => array(
'0' => array(
'model3_field1' => '値1', 'model3_field2' => '値2',
'Model4' => array(
'model4_field1' => '値1', 'model4_field2' => '値2',
)
),
'1' => array(
'model3_field1' => '値1', 'model3_field2' => '値2',
'Model4' => array(
'model4_field1' => '値1', 'model4_field2' => '値2',
)
),
),
)
これに加えて一番上が配列で始まる事もある。
0005nobodyさん
2008/03/15(土) 03:10:39ID:???0006nobodyさん
2008/03/15(土) 04:05:03ID:???長くやっている人は、すでに自分で考え設計し開発しているから、
学習コストのほうが高いように錯覚するかもしれないが
本来は、自分でやるほうがコストは大きい。
0007nobodyさん
2008/03/15(土) 04:29:13ID:???最終的にこれをコードで処理してやらなければならないんだが
どんだけ時間かかるんだろ怖いよ
0008nobodyさん
2008/03/15(土) 04:31:23ID:???気晴らしにコーラでも買いに行く
0009nobodyさん
2008/03/15(土) 08:17:47ID:4Bb0W2wlアクセス数と処理内容は?
0011nobodyさん
2008/03/15(土) 10:04:27ID:???アクセス数とかじゃなくて、モデルのオブジェクトにしこたま
データを溜め込んだりする仕様になってるから、データ量が増えて
閾値をこえると落ちるって感じかなぁ。
初めはそんなこと考えなくてもいいと思うけど・・・
0012nobodyさん
2008/03/15(土) 12:47:39ID:???ぶっちゃけCakePHPがはじめてw
0013nobodyさん
2008/03/15(土) 12:49:38ID:???やるならCIを負荷を考慮して拡張していく
0015nobodyさん
2008/03/15(土) 12:57:52ID:???流行て何でも肯定されちまうから怖いよな。
流行についていかねば、食えないから仕方ないけどな
0016nobodyさん
2008/03/15(土) 14:20:17ID:???その具体的がまったくないよね。
これじゃウソだと思われるのが当然だし、
仕方が無い話だよね。
0017nobodyさん
2008/03/15(土) 14:21:14ID:???> なんでこんな不完全なフレームワーク流行してんだよ。
世の中に完全なフレームワークは無い。
もしあったとしたら、そのフレームワークは
バージョンアップしない。
0018nobodyさん
2008/03/15(土) 14:25:44ID:???信じてもらえないのだろう?
俺、何もしてないのに・・・
0019nobodyさん
2008/03/15(土) 14:47:28ID:???メモリ不足で落ちるということを証明する義務があるのに、
それを証明しない、何もしないから信じてもらえない。
0020nobodyさん
2008/03/15(土) 15:39:59ID:???他人の作ったプログラム内でHello word書いて落ちるんだから
そう簡単には証明できねーよ、素人発言にも度が過ぎる
0021nobodyさん
2008/03/15(土) 15:44:29ID:???証明てエラー画面のキャプチャー画像とれってことか?w
0022nobodyさん
2008/03/15(土) 15:47:01ID:???19はPHPのことあまり知らなさそうな感じが・・・
0023nobodyさん
2008/03/15(土) 15:48:52ID:???0024nobodyさん
2008/03/15(土) 16:33:57ID:???>>20
そう簡単に証明できない?
なぜ? 簡単にメモリ不足になるんじゃなかったのか?
自分で言っていて矛盾に気づかない?
0025nobodyさん
2008/03/15(土) 16:43:49ID:???証明とは、他人がやっても再現できるだけの
コードや環境設定に決まっている。
Hello worldぐらいなら君でも掲示板にもかけるはずだが?
0026nobodyさん
2008/03/15(土) 17:14:17ID:???0029nobodyさん
2008/03/15(土) 17:26:40ID:???0031nobodyさん
2008/03/15(土) 17:29:55ID:???そのレベルだろうな
0033nobodyさん
2008/03/15(土) 17:32:16ID:???自分のサイトを作ろうと思うとこだわりすぎてなかなか開発が進まない。
大工さんは自分の家を建てようとするとこだわりすぎて会社がつぶれるってこともあるらしいけど。
わかりますかね?この気持ち。
0034nobodyさん
2008/03/15(土) 17:33:07ID:???0035nobodyさん
2008/03/15(土) 17:39:44ID:???0036nobodyさん
2008/03/15(土) 17:44:25ID:???0037nobodyさん
2008/03/15(土) 18:11:15ID:???メモリ不足になったこと無いんだが?
作り方が悪いんじゃね?
0038nobodyさん
2008/03/15(土) 18:17:57ID:???とか言うのが出て書き込めない?
27 :nobodyさん:2008/03/15(土) 17:23:01 ID:???
28 :nobodyさん:2008/03/15(土) 17:24:29 ID:???
29 :nobodyさん:2008/03/15(土) 17:26:40 ID:???
30 :nobodyさん:2008/03/15(土) 17:28:21 ID:???
31 :nobodyさん:2008/03/15(土) 17:29:55 ID:???
32 :nobodyさん:2008/03/15(土) 17:31:24 ID:???
33 :nobodyさん:2008/03/15(土) 17:32:16 ID:???
34 :nobodyさん:2008/03/15(土) 17:33:07 ID:???
0039nobodyさん
2008/03/15(土) 19:16:04ID:???開発元は認識してないバグなの?
0040nobodyさん
2008/03/15(土) 19:21:27ID:???http://www.sooey.com/journal/2007/04/10/641/
memory_get_peak_usageでメモリ使用料を調べられるが、
それでCakePHPを調べたら、使用量は4M程度だったよ。
symfonyよりは少ないね。
0041nobodyさん
2008/03/15(土) 19:59:52ID:???php 5.2.5
cake 467.5KB, symfony 674.6KB
フレームワークとしてはデフォルトでこんなもんなんだから
メモリ不足というのはアプリケーションの実装の問題だと思うのだが。
DB周りとか、大抵使われるアドオン・プラグインとかも含めないとなんとも言えないってのはあるけど。
0042nobodyさん
2008/03/15(土) 21:05:39ID:???メモリ不足とか言ってる香具師はどんな糞コード書いてるの?w
0044nobodyさん
2008/03/15(土) 21:11:12ID:???42も含めて、みんな糞コードくレベルやろ
CakePHPで糞コード書くとメモリ不足になる確率は高いわな
0045nobodyさん
2008/03/15(土) 21:13:30ID:???相当に意識して糞コード書かないと8Mオーバーはむずいよ
0046nobodyさん
2008/03/15(土) 21:16:24ID:???0047nobodyさん
2008/03/15(土) 21:17:54ID:???ろくでもないフレームワークやな
0048nobodyさん
2008/03/15(土) 21:19:20ID:???0049nobodyさん
2008/03/15(土) 21:24:48ID:???てことはPHP4つかってるやつだなメモリ不足おきんのは
0050nobodyさん
2008/03/15(土) 21:26:39ID:???リミット8MのままPHP 5.2.1使えばメモリ不足になる可能性は高いわな
0051nobodyさん
2008/03/15(土) 21:34:35ID:???> 相当に意識して糞コード書かないと8Mオーバーはむずいよ
簡単だよ。
たとえば、8Mを超えるようなファイルを受信したり、
また出力すればいいだけ。
っていうか、もうすでに8Mにはならないという結論がでている
話なんかどうでもいいんだがね。
0052nobodyさん
2008/03/15(土) 21:36:48ID:???それが答えだろう。PHP5でメモリ使用量が大幅に増えて
それに伴って、デフォルトのリミット値も増えているのに、
PHP4からアップグレードしたとかでPHP4の設定のまま使っている奴が
メモリ不足と出ているだけ。
フレームワークではなく、PHPの問題。
0053nobodyさん
2008/03/15(土) 21:37:19ID:???ただしくは、PHPとそれを使っているユーザーの問題。
0054nobodyさん
2008/03/15(土) 21:38:08ID:???0055nobodyさん
2008/03/15(土) 21:38:50ID:???44 :nobodyさん:2008/03/15(土) 21:11:12 ID:???
45 :nobodyさん:2008/03/15(土) 21:13:30 ID:???
46 :nobodyさん:2008/03/15(土) 21:16:24 ID:???
47 :nobodyさん:2008/03/15(土) 21:17:54 ID:???
48 :nobodyさん:2008/03/15(土) 21:19:20 ID:???
49 :nobodyさん:2008/03/15(土) 21:24:48 ID:???
50 :nobodyさん:2008/03/15(土) 21:26:39 ID:???
またこいつかw
0056nobodyさん
2008/03/15(土) 21:40:39ID:???記憶する脳のメモリもないということか。うまいなぁ。
メモリ不足にるというのなら、そのコードを覚えてここで書けよw
0057nobodyさん
2008/03/15(土) 21:41:32ID:???そしてsymfonyは処理速度も最悪
0058nobodyさん
2008/03/15(土) 21:44:17ID:???> 初心者が無限ループ書きまくっても8M越えはむずいで
お前はプログラミング素人だな。
そもそも無限ループじゃメモリ使用量は増えないだろ。
ループの中にメモリを消費していくコードが含まれていれば
メモリ使用量は増えるが、それだと難しいという話にはならない。
時間がたてばいずれ8Mを超える。
0061nobodyさん
2008/03/15(土) 21:58:18ID:???http://pc11.2ch.net/test/read.cgi/php/1122105465/
0063nobodyさん
2008/03/15(土) 22:02:57ID:???0064nobodyさん
2008/03/15(土) 22:03:54ID:???これは仕方のないこと
0065nobodyさん
2008/03/15(土) 22:07:39ID:???脳内のメモリが不足してるという結論になりました
0066nobodyさん
2008/03/15(土) 22:10:56ID:???どうでもいいクライアント用のフレームワークだろwww
0067nobodyさん
2008/03/15(土) 22:12:26ID:???CakePHPは使ってるやつは ×
CakePHPを使ってるやつは △
CakePHPを糞と言ってるやつは ○
脳内メモリが不足してくると日本語もおかしくなっているという法則
0068nobodyさん
2008/03/15(土) 22:12:32ID:???なんでsymfonyとメモリ不足量の競い合いしてんだよw
0070nobodyさん
2008/03/15(土) 22:16:09ID:???0071nobodyさん
2008/03/15(土) 22:22:04ID:???どんな糞コード書いてても
CakePHP以外でこんなこと今までおきなかった
0072nobodyさん
2008/03/15(土) 22:26:10ID:???>>71
じゃあそのCakePHPの場合だけ落ちるっていう糞コードをさっさと書けよボンクラ
0073nobodyさん
2008/03/15(土) 22:31:54ID:???symfony,CI,mojaviは落ちなかったけど
CakePHPだけはどんなコード書いてもすぐ落ちる
最悪なフレームワークです
0075nobodyさん
2008/03/15(土) 22:35:35ID:???信用の無いフレームワークですね
0076nobodyさん
2008/03/15(土) 22:37:25ID:???0077nobodyさん
2008/03/15(土) 22:39:22ID:???だったらCI使ってた方がいいやん
何なのCakePHPの存在意義て?
0078nobodyさん
2008/03/15(土) 23:01:27ID:???0079nobodyさん
2008/03/15(土) 23:10:48ID:???全世界の人間に見えるように書いてるもんに独り言も糞もあるかよw
さっさとCakePHPの場合だけ落ちるコードを書いてみろや
0080nobodyさん
2008/03/16(日) 00:28:57ID:???激しく糞。
つーか、ここでCIのことを語りだすやつは、
CakePHPがメモリ不足になりやすいとデマ流している奴だから。
0081nobodyさん
2008/03/16(日) 00:29:46ID:???0082nobodyさん
2008/03/16(日) 00:33:53ID:???0083nobodyさん
2008/03/16(日) 00:37:26ID:???メモリ不足になるというコードがでていないのに、
メモリ不足になるというコードが存在すると主張している
と言い換えてもいいけど?
こっちなら間違ってないでしょ?
0084nobodyさん
2008/03/16(日) 00:41:22ID:???0085nobodyさん
2008/03/16(日) 00:42:48ID:???> どんだけ最低最悪な糞コード書いてても
> symfony,CI,mojaviは落ちなかったけど
常識で考えて、ありえない話。
メモリ制限8Mで10Mのデータをメモリに読み込むような
プログラムを書けば絶対落ちる。
マジレスしたらだめなのか?w
0086nobodyさん
2008/03/16(日) 00:49:54ID:???Q : cakephp メモリ不足になるんですが
・他のフレームワークを使う
・フレームワークを使わずコーディングする
・ticket 投げてメモリを喰わないように cakephp を作ってもらう
どれかを選らんで下さい。
0088nobodyさん
2008/03/16(日) 00:54:42ID:???投げようがないな。デマといわれて終わるだけだ。
悔しいなぁ。
なんで、なんでメモリ不足になるという
証拠がないんだよ! ありえない。
これじゃCakePHPを叩けない!
0089nobodyさん
2008/03/16(日) 00:58:35ID:???メモリ不足になるという
再現コードお願いします。
それがないと信用してもらえません><
0090nobodyさん
2008/03/16(日) 01:10:03ID:???0091nobodyさん
2008/03/16(日) 01:11:43ID:???0092nobodyさん
2008/03/16(日) 01:15:35ID:???0093nobodyさん
2008/03/16(日) 01:15:51ID:???CakePHPはそういうフレームワーク
0094nobodyさん
2008/03/16(日) 01:17:05ID:???知っていれば落ちるはずがないことがわかるはずなんだが。
それがわからないってことは馬鹿ということだよ。
0095nobodyさん
2008/03/16(日) 01:18:12ID:???大きすぎるうそは逆効果だと思うんだが(笑)
0096nobodyさん
2008/03/16(日) 01:18:14ID:???これでメモリ不足で落ちます
CakePHPはこんなフレームワークです
使うのはやめましょう。クライアントがかわいそうです
0097nobodyさん
2008/03/16(日) 01:19:44ID:???ためしたけど落ちなかったよ。
0098nobodyさん
2008/03/16(日) 01:20:34ID:???0099nobodyさん
2008/03/16(日) 01:20:46ID:???やる前から落ちないってわかるwww
0100nobodyさん
2008/03/16(日) 01:21:56ID:???0101nobodyさん
2008/03/16(日) 01:22:13ID:???っていうかデバッグ出力するってどういうこと?
他のフレームワークと勘違いしてね?
きっとそのフレームワークだよ。メモリ不足で落ちるというのは。
0102nobodyさん
2008/03/16(日) 01:22:44ID:???0103nobodyさん
2008/03/16(日) 01:24:23ID:EXDzIJ8Mメモリ不足で落ちるとはじめに言ったのは俺なんだが、
あれ勘違い。俺のバグだった。
で、それに便乗して落ちる落ちる言っている奴がいるのか?
0104nobodyさん
2008/03/16(日) 01:24:44ID:???0105nobodyさん
2008/03/16(日) 01:25:25ID:???0106nobodyさん
2008/03/16(日) 01:26:34ID:???0107nobodyさん
2008/03/16(日) 01:27:00ID:???0108nobodyさん
2008/03/16(日) 01:27:46ID:???0109nobodyさん
2008/03/16(日) 01:28:08ID:???0110nobodyさん
2008/03/16(日) 01:28:27ID:???0111nobodyさん
2008/03/16(日) 01:28:49ID:???0112nobodyさん
2008/03/16(日) 01:29:14ID:???0113nobodyさん
2008/03/16(日) 01:29:31ID:???0114nobodyさん
2008/03/16(日) 01:30:21ID:???CakePHPがはじめてだよ
0115nobodyさん
2008/03/16(日) 01:30:42ID:???0116nobodyさん
2008/03/16(日) 01:30:53ID:???0118nobodyさん
2008/03/16(日) 01:33:07ID:???0119nobodyさん
2008/03/16(日) 01:33:16ID:???class TestController extends AppController {
var $name = 'Test';
function index() {
echo 'Hello World';
}
}
0120nobodyさん
2008/03/16(日) 01:33:58ID:EXDzIJ8Mマジ落ちたwwww
0121nobodyさん
2008/03/16(日) 01:34:19ID:???0122nobodyさん
2008/03/16(日) 01:34:23ID:???0123nobodyさん
2008/03/16(日) 01:35:06ID:???103 名前:nobodyさん[] 投稿日:2008/03/16(日) 01:24:23 ID:EXDzIJ8M
あー。なんか面白いことになっているな。
メモリ不足で落ちるとはじめに言ったのは俺なんだが、
あれ勘違い。俺のバグだった。
で、それに便乗して落ちる落ちる言っている奴がいるのか?
120 名前:nobodyさん[] 投稿日:2008/03/16(日) 01:33:58 ID:EXDzIJ8M
>>119
マジ落ちたwwww
0125nobodyさん
2008/03/16(日) 01:36:34ID:???0126nobodyさん
2008/03/16(日) 01:36:55ID:???0127nobodyさん
2008/03/16(日) 01:38:20ID:???結論がでたね
0128nobodyさん
2008/03/16(日) 01:38:32ID:???CodeIgnitor なんてどうかな?
0129nobodyさん
2008/03/16(日) 01:39:10ID:???0130nobodyさん
2008/03/16(日) 01:41:35ID:???0131nobodyさん
2008/03/16(日) 01:43:44ID:???0132nobodyさん
2008/03/16(日) 08:13:02ID:???0133nobodyさん
2008/03/16(日) 12:34:32ID:???アソシエーションしたモデルをfindAllなどで持ってくると、
いろんな構造のデータになるけど、どんなパターンがあるのかな?
ちょっと見にくいだろうけど、ありそうなのを組み合わせてみた。
この結果から、配列.Model.・・・、Model.Model.・・・、Model.field、Model.配列.field の
パターンに大別できると思っている。 Model.配列.配列.field なんてのは無い。
そしてキーの先頭が大文字ならモデル名、数値なら配列、
先頭が小文字ならフィールド名と判別できると思っている。
Model::aliasとかあまり使ってないんだけど、これであってる?
何の為にこれを調べているかというと、アソシエーションでごっそり取ってきた
全データの中で、特定モデルの特定の型(たとえば日付)のフィールドだけ変換したいっていう場合に
array_walk_recursiveみたいなのがあればやりやすくない?という話
その下調べ
0134nobodyさん
2008/03/16(日) 12:34:56ID:???'Model1' => array(
'model1_field1' => '値1', 'model1_field2' => '値2',
),
'Model2' => array(
'0' => array(
'model2_field1' => '値1', 'model2_field2' => '値2',
),
'1' => array(
'model2_field1' => '値1', 'model2_field2' => '値2',
),
),
'Model3' => array(
'0' => array(
'model3_field1' => '値1', 'model3_field2' => '値2',
'Model4' => array(
'model4_field1' => '値1', 'model4_field2' => '値2',
)
),
'1' => array(
'model3_field1' => '値1', 'model3_field2' => '値2',
'Model4' => array(
'model4_field1' => '値1', 'model4_field2' => '値2',
)
),
),
)
これに加えて一番上が配列で始まる事もある。
0135nobodyさん
2008/03/16(日) 14:39:55ID:???>>119-121
それで落ちるってphp.iniにどんな設定しとるんや?
まずは脳内メモリを増設したほうがいいんじゃね?(プ
0137nobodyさん
2008/03/16(日) 17:21:50ID:???すでについとる容量の低いやつを全部外して
デュアルチャネル対応の容量大きいやつを増設したらええんや
そしたらCakeもサクサク、オマエの小汚い脳内もサックサク〜(* ^ー゚)
0140nobodyさん
2008/03/16(日) 22:11:05ID:???ecripse って最近よく聞くんですが、 dreamweaver よりも開発効率いいんでしょうか。
よろしくお願いします。
0141nobodyさん
2008/03/16(日) 22:46:20ID:???http://pc11.2ch.net/test/read.cgi/php/1171452901/
0142nobodyさん
2008/03/16(日) 22:54:10ID:???0143nobodyさん
2008/03/16(日) 23:03:52ID:???http://news24.2ch.net/test/read.cgi/news2/1193936653/
とりあえず「脳内メモリがや〜」とか言ってる人は読んどいたら?
0145nobodyさん
2008/03/17(月) 01:02:50ID:???0146nobodyさん
2008/03/17(月) 01:03:05ID:BkHzbTOg0147nobodyさん
2008/03/17(月) 01:06:46ID:BkHzbTOg落ちなくて困っているんだけど、どうすればいい?
0148nobodyさん
2008/03/17(月) 01:23:22ID:???0150nobodyさん
2008/03/17(月) 01:25:35ID:???0151nobodyさん
2008/03/17(月) 01:27:02ID:???0152nobodyさん
2008/03/17(月) 01:34:16ID:???みんなで中小企業にアピールしようぜ。
そしてもう二度と同じ被害者を生まないためにも
0153nobodyさん
2008/03/17(月) 01:44:22ID:???0154nobodyさん
2008/03/17(月) 01:59:39ID:???使うのは駄目な俺だけでいい。
0155nobodyさん
2008/03/17(月) 02:09:58ID:???誰も信用してないよ。
0156nobodyさん
2008/03/17(月) 06:47:17ID:???超みにくいよw
0157nobodyさん
2008/03/17(月) 07:00:18ID:???それを読み込むようにしている。
0158nobodyさん
2008/03/17(月) 15:09:42ID:???デフォルト値にhttp://をつけると
バリデーションで他の項目がひかかったときに
http://yahoo.co.jpと入力していても
またhttp://のデフォルト値がはいる
デフォルト値は最初の画面だけ挿入したい場合はどうすればいいのですか
$form->input('TestUser.url', array('value'=>'http://')
0160nobodyさん
2008/03/17(月) 16:22:23ID:???0161nobodyさん
2008/03/17(月) 16:39:49ID:???その辺て自動でやってくれないんだっけ?
再編集のときの話だったら、データ構造を見て本来はDBから持ってくるデータを用意しておいてあげればいい
またはデータが無いと判断したときだけ、value入れればいいんじゃね
0162nobodyさん
2008/03/17(月) 18:22:09ID:???タイムリーだなw
俺も今同じようなことをやっていた。
最初はそのように、$form->inputに書いていたが、
同じようにダメだと気づいて、
コントローラで、(↓こんな感じ。適当に書く)
if(!empty($this->data)) {
if($this->Model->save($data)) {
・・・
} else {
・・・
}
} else {
$this->data['Model']['url'] = 'http://';
}
本当についさっき書いたコードなので、これで問題ないか深く考えていない。
0163nobodyさん
2008/03/17(月) 20:25:58ID:???0165nobodyさん
2008/03/17(月) 22:07:27ID:6Wsl0FQ6エラーの内容は
Warning: Invalid argument supplied for foreach() in /home/~~/htdocs/cake/cake/libs/controller/controller.php on line 666
Warning: Invalid argument supplied for foreach() in /home/~~/htdocs/cake/cake/libs/controller/controller.php on line 801
コントローラとモデルはscaffoldのみのシンプルなものです。
0167nobodyさん
2008/03/17(月) 22:21:02ID:???Viewにこう書くのはどう?
if(empty($this->data['TestUser']['url'])) $this->data['TestUser']['url']='http://';
echo $form->input('TestUser.url', array('label'=>'*URL','size'=>50,'value'=>$this->data['TestUser']['url']));
0168nobodyさん
2008/03/17(月) 22:28:21ID:6Wsl0FQ6801:foreach ($objRegistryModel->hasAndBelongsToMany as $relation => $relData) {
でした。何なんでしょうか。アソシエーションでしょうか。
0169nobodyさん
2008/03/17(月) 22:52:12ID:???この辺りの辺、サンプルある?
もしあったら見せて欲しい。
昨日あたりからcakePHPを使い初めたのだけど、たしかにWebにあった
チュートリアルに沿って作ると、モデルがヴァリデーションだらけに
なりそうなので。
0173nobodyさん
2008/03/18(火) 04:22:49ID:???controler
$url = ''http://;
$data = $this->Model->ほげほげ();
if (unko) {
$url = $data["url"]
}
$this->set('url',$url);
view
$form->input('TestUser.url', array('value'=>$url)
0174nobodyさん
2008/03/18(火) 09:45:05ID:LdGu1qpabakeでいろんなテーブルを焼いてみると、まともにscaffoldが働くものもありました。
焼かれたVIEWのIndex.thtmlを見てみると、テーブルの値を表示する所で、配列の添え字が記入されていませんでした。
おそらくテーブルの定義の仕方に問題があるように思います。
テーブルの定義は、まず成功した方が
Table "public.users"
Column | Type | Modifiers
------------+------------------------+-----------
id | integer | not null
username | character varying(255) | not null
password | character varying(32) | not null
first_name | character varying(255) | not null
last_name | character varying(255) | not null
次に失敗した方が
Table "public.flash_tests"
Column | Type | Modifiers
--------+---------+----------------------------------------------------------
id | integer | not null default nextval('flash_tests_id_seq'::regclass)
count | integer | not null
です。fefaultの所は削除しても変わりませんでした。
心当たりのある方、助言お願いします。
0177nobodyさん
2008/03/18(火) 13:01:47ID:???自分のコードをかけよ。
0178nobodyさん
2008/03/18(火) 13:03:45ID:???コントローラで設定すべきだよな。
ビューはただ表示するだけ。
0183nobodyさん
2008/03/18(火) 15:20:33ID:???0184nobodyさん
2008/03/18(火) 15:59:35ID:???0185nobodyさん
2008/03/18(火) 16:06:00ID:???フォームの初期値はどこで設定すべきでしょう。
1.コントローラ
2.ビュー
3.モデル
4.モデルに初期値情報が有り、それをコントローラが取得してビューに渡す
俺は4。面倒だとか、フォームによって初期値が違う場合は1
0187nobodyさん
2008/03/18(火) 16:51:14ID:???俺もビュー
管理するのが楽
コントローラーに書くとみにくくなる
ビューだと全くみにくくない、それどころか見通しがよくなる
0188nobodyさん
2008/03/18(火) 16:53:16ID:???モデルをこれ以上見にくくするのはよくないよ
バリデータ
アソシエーション
バリデータ関数
これだけでもずいぶん見にくいのに
0189nobodyさん
2008/03/18(火) 16:54:16ID:???変更が楽な場所がベスト
0191nobodyさん
2008/03/18(火) 17:06:20ID:???ここは初心者が多いからね
0192nobodyさん
2008/03/18(火) 18:10:04ID:???お前、まさか、それだけしかないんじゃないだろうな・・・
モデルは設定ファイルじゃないぞ。
ビジネスロジックを書く所がモデルだぞ。
0193nobodyさん
2008/03/18(火) 18:11:06ID:???初期値をビューで設定するのは変。
0194173
2008/03/18(火) 19:04:45ID:???何でダメなの?因みにcakeは1週間ぐらいしかやってない
あとコントローラに初期値は
ロジックとviewの分離等から考えると微妙だが
めんどくさかったんだそこはごめんw
0195nobodyさん
2008/03/18(火) 19:29:58ID:5PAxNly00196nobodyさん
2008/03/18(火) 19:38:40ID:???0198nobodyさん
2008/03/18(火) 21:23:10ID:???携帯用サイト作るとわかると思うけどあんまりガンガン表示する内容まで
コントローラーで固めない方がいいよ。
携帯用サイト用の コントローラーまで作る羽目になるから。
0199nobodyさん
2008/03/18(火) 22:59:49ID:???$_SESSION[''][''] を直接使った方が早い感じがすんだけど、みんなどうしてます?
やっぱり $this->Session->read を使った方がいいんですかね。
0200nobodyさん
2008/03/18(火) 23:48:37ID:???> smartyだってテンプレート側で初期値いれらるようになってる
入れられるようになっているからって、入れるべきということにはならないだろ?
モデルやコントローラ側で初期値入れられるようになっているんだしさ。
> 携帯用サイト用の コントローラーまで作る羽目になるから。
その理屈がよくわからん。初期値の話をしているのに
なんでもコントローラでやると拡大解釈してしてないか?
それにビューに書く場合、携帯用サイトとPC用サイトで分けるもんだから、
ビューに初期値を書いたら、コードが重複するじゃん。
だからビューだけはありえない。そう思わないか?
ちなみに、おれは初期値はモデルに書くもんだと思っているが。
0202nobodyさん
2008/03/19(水) 01:36:20ID:???オブジェクトで呼ぶことに意味がある
それは、オブジェクトにはいってるデータを
外から制御できるからだ
0203nobodyさん
2008/03/19(水) 07:53:45ID:???>>202
cakephp やってて
「意味あるのかな・・・」と思ってましたけど、やっぱり意味があったんですね。
勉強になります。ありがとうございます。
0204nobodyさん
2008/03/19(水) 12:54:14ID:???ユーザ(usersテーブル)、投稿(commentsテーブル)が一対多の
関係にある時、あるviewで、
ユーザ1
コメント1-1
コメント1-2
コメント1-3
ユーザ2
コメント2-1
コメント2-2
コメント2-3
・
・
という表示をさせたいのですが、view、controllerをどう書いてよいか悩んでいます。
modelで、hasManyリレーションを貼るところ迄は合っていますか?
どこか、参考になるページがあれば教えて下さい。
0205nobodyさん
2008/03/19(水) 19:47:56ID:???CommentモデルにはbelongsToプロパティを作って、usersに依存していることを示す。
コントローラのアクションでUserモデルからデータを引っ張ってくる
アソシエーションによりCommentもくっついてくる。
コントローラのアクションで、引っ張ってきたデータを
ビューに詰め替える。
ビューは渡されたデータをぐるぐるして表示する。
0206nobodyさん
2008/03/19(水) 21:42:10ID:???この辺言及する人が少ないのはcakeユーザのレベルが低いからだろうか。
0207nobodyさん
2008/03/19(水) 22:11:32ID:???何を言っているんだ?
自分のレベルが低いと告白しているのか?
0209nobodyさん
2008/03/19(水) 23:03:06ID:XOo5uLlV返信ありがとうございます。
> コントローラのアクションでUserモデルからデータを引っ張ってくる
> アソシエーションによりCommentもくっついてくる。
なるほど。
きちんとリレーションを設定すれば、コントローラ側ではUserモデル
からデータを引っ張るだけで、芋づる式にcommentsを取れるんですね。
> ビューは渡されたデータをぐるぐるして表示する。
今、$usersをforeachで回してる状態なんですが、これを$usersと
$commentsの二重ループにすればオッケーですかね。
ちょっとやってみます。
>>206
論点がずれてませんか?
そもそも、具体的なアクセス数、H/Wの規模を示さないと意味のない
指摘じゃないでしょうか。
この方法だと中規模以上に向かないから、この方法を使うといいよ、
と言うのならまだ分かるのですが。
0210nobodyさん
2008/03/19(水) 23:13:10ID:???>>208
お前らのcakeはこの時どういったクエリが発行されんの?
select ... from users ... (id 1,3,5のユーザがヒットする)
select ... from comments where user_id in (1) ...
select ... from comments where user_id in (3) ...
select ... from comments where user_id in (5) ...
0211nobodyさん
2008/03/19(水) 23:28:29ID:???そして、この findAll() で実行された SQL は以下の通り。
SELECT `Job`.`id`, `Job`.`com_id`, `Job`.`name`
FROM `jobs` AS `Job` LEFT JOIN `coms` AS `Com` ON `Job`.`com_id` = `Com`.`id`
WHERE 1 = 1 ORDER BY `Job`.`id` ASC LIMIT 10;
0212nobodyさん
2008/03/19(水) 23:42:19ID:???参照の方向が違う。
0213nobodyさん
2008/03/20(木) 00:12:41ID:???hasmanyとかconditionsにどういうSQLで
JOINするかをSQLの断片で書いているしなぁ。
JOINしているとわかりそうなものだがなぁ。
0214nobodyさん
2008/03/20(木) 00:28:36ID:???結局「表示するユーザ数+1のクエリが発行される」が間違ってることは示せないんでしょ。
実際やってみてクエリログ見ればすぐ分かるはずなんだが。
0216nobodyさん
2008/03/20(木) 00:40:19ID:???その代わり複雑なSQL文を書かないといけないから
CakePHPの負荷よりも生産性というスタイルに合わないがな
ループの中でクエリをぐるぐる発行しまくると負荷が高くなる
0217nobodyさん
2008/03/20(木) 00:43:11ID:???結局こういうのが出てくるのか・・・
ほんとバカばっかだなー
それじゃ論点がどうずれてるか説明もらってもいい?
210での発言にphpの基礎は全く関係ないから、それのほうが論点ずれてると思うのだが。
んで、実際お前のcakeではこの処理でどういうクエリが発行されんの?
0219nobodyさん
2008/03/20(木) 00:52:19ID:???とてつもなく負荷の高いシステムがたくさん世に出そうだな
こりゃサーバー会社が儲かるな
sakuraインターネット株でも買うか!
0220nobodyさん
2008/03/20(木) 05:31:17ID:???柔軟な制御ができん、
ページリンクに検索項目のパラメーター付加できない、というか
できるけど、面倒なことしないとダメくさい
ソート項目のパラメータは標準で付加できるようだが
0221209
2008/03/20(木) 10:56:59ID:mwRuCB98私の技術力だと、二重ループ以外に実現する方法が思いつかないのですが、
他によい方法があったら教えてもらえますか?
ユーザ毎のコメントを表示する機能はパスするにしても、
同様にmasManyリレーションのテーブルを親子両方とも表示したい
機会はあると思うので。
負荷という意味では、masManyの定義でlimit=>10とする事で大量の子を
取得しないように、というのは心がけています。
0223nobodyさん
2008/03/20(木) 12:36:12ID:???データを取得することが
負荷が高いと思っているのかな?
JOINの方がよっぽど負荷高いですぜ。
0224nobodyさん
2008/03/20(木) 12:40:34ID:???0225nobodyさん
2008/03/20(木) 12:58:50ID:???> お前らのcakeはこの時どういったクエリが発行されんの?
こういうクエリが発行されますがなにか?
select ... from users ... (id 1,3,5のユーザがヒットする)
select ... from comments where user_id in (1, 3, 5 ) ...
0226nobodyさん
2008/03/20(木) 13:35:31ID:???自分の性格に合わない気がしてきた
0227nobodyさん
2008/03/20(木) 13:39:58ID:???CakePHPはメモリも食わないし、負荷も高くない。
生産性は高い。
0228nobodyさん
2008/03/20(木) 13:40:43ID:???1.ページ送りの絞り込み条件パラメータをセッションで持たせている
2.ページ送りの絞り込み条件パラメータをURLの後ろに繋げてる(CakePHP1.1 paginate)
3.ページ送りの絞り込み条件パラメータをURLの後ろに繋げてる(CakePHP1.2 pagination)
0229nobodyさん
2008/03/20(木) 13:45:28ID:???4. 基本は3と同じだが、場合によってpagination等をオーバーライドして独自の条件を追加している。
0231nobodyさん
2008/03/20(木) 13:45:54ID:???たしかに、
●自分の用途に合わせて、全てのコードとHTMLを一から作成したシステム
●作り込み部分は最小限にして、大半のコードはcakePHP任せにしたシステム
を比べると、負荷は、一から作成したシステムの方が、余分なものがない分、
軽くできるかもね。
まあそこはトレードオフの部分だから、自分に向いてないと思ったら、
cakePHP以外のやり方を模索すればいいと思うよ。
0233nobodyさん
2008/03/20(木) 13:49:21ID:???どこでもフレームワークを使っている。
0234nobodyさん
2008/03/20(木) 13:50:32ID:???View側で
$paginator->prev()
$paginator->next()
の第2引数に絞り込み条件を配列で入れてやら無いと
URLの後ろにパラメーターが付加されてなくない?
http://localhost/cake/test/index/page:1/parameta:hogehoge
みたいなかんじ
0235nobodyさん
2008/03/20(木) 13:55:14ID:???いまソースが手元に無くて忘れたが、CakePHP1.2でかなり改善された。
そういえば、そういうパラメータを”コントローラ”側で追加していたきもする。
コントローラーのpagination変数だったっけ?
pagination[モデル名]だっけ?
まあわすれた。
0236nobodyさん
2008/03/20(木) 13:55:53ID:???どちらかと言うと、「負荷が高いシステム」と言うより、
「大規模なシステム」はフレームワークを使ってるという感じじゃない?
そうしないと、コーディングや保守が大変だもんなあ。
0237nobodyさん
2008/03/20(木) 14:03:35ID:???生産性重視で高級言語(フレームワーク)で書くかの話でしかないな
0238nobodyさん
2008/03/20(木) 14:07:42ID:???CakePHPは小規模フレームワークのクセにsymfonyと同レベルくらい負荷かかりすぎ
0240nobodyさん
2008/03/20(木) 14:15:07ID:???0242nobodyさん
2008/03/20(木) 14:18:04ID:???http://www.tsujita.jp/blojsom/blog/default/PHP/2007/07/13/PHP%E3%83%99%E3%83%B3%E3%83%81%E3%83%9E%E3%83%BC%E3%82%AF-Zend-Framework-vs-Symfony-vs-CakePHP-vs-CodeIgniter-vs-PHP-on-TRAX.html
0243nobodyさん
2008/03/20(木) 14:20:54ID:???一番重要なモデルが貧弱すぎる。中規模以上ならCakePHPだな。
http://blogs.atanaka.biz/tanaka/index.php?itemid=691
・フレームワークにありがちな、あまり使わない機能が削がれている
・フレームワークにありがちな、よく使う機能もけっこう削がれている。
・だから、ステップ数が他のPHPフレームワークと比べて格段に少ない。
・だから、実行速度が速い。(ベンチマークはこちら)
・フレームワーク自体が複雑なことをしようとしていないので、潜在バグの深刻さも小さい。(たぶん)
・マニュアルがかなり読みやすく、取っつきやすい。
・cakePHPには名前のインパクトには負ける。
・ZendFramework には格式の高さで負ける。
・MVCというよりは、VCだ。モデルはあくまでもおまけ的。
・PHPがそもそもテンプレート的なんだからテンプレートエンジンいらない、と考えているふしあり。(だから速い、と)
・でも、簡単な変数置き換えの簡易テンプレートはデフォルトでついてるし、Smartyとの連携もできる。
0244nobodyさん
2008/03/20(木) 14:22:14ID:???[PHP][フレームワーク]CodeIgniterスレ
http://pc11.2ch.net/test/read.cgi/php/1177683436/
0245nobodyさん
2008/03/20(木) 14:25:59ID:???モデルはCIベースでオレオレ的に拡張した方がいい。
CakePHPの既存モデルにしっくり来ないから
まずコードが凄く見難い状態になる
結局バリデートにYAML使ったりと拡張しないいけない
0246nobodyさん
2008/03/20(木) 14:27:28ID:???中規模 CakePHP
大規模 Symfony
これでいいじゃん
0247nobodyさん
2008/03/20(木) 14:29:19ID:???中規模 CI
大規模 ここまできたらCIでいいや
0248nobodyさん
2008/03/20(木) 14:31:12ID:???0250nobodyさん
2008/03/20(木) 14:36:52ID:???$paginator->options(array('url'=>'hogehoge'))
controllerでpaginate(モデル)した後のoptionsにセットしてもurlに展開される
$this->params['paging'][モデル]['options']['hogeoge_key']='hogeoge_value'
*この方法は裏技的な気がするけど、、、
0252nobodyさん
2008/03/20(木) 14:40:57ID:???わざわざCakePHPスレを盛り上げて乙
0253nobodyさん
2008/03/20(木) 14:46:46ID:???最初は機能が少なくて、バージョンがあがるにつれて機能が追加され最終的には重くなるんだよな。
で、ほかと同等の機能を備えたときには、ほかと同等の重さになっている。
0254nobodyさん
2008/03/20(木) 15:00:55ID:???使ってる方、どうぞ書き込んで下さい。
http://pc11.2ch.net/test/read.cgi/php/1177683436/l50
0255nobodyさん
2008/03/20(木) 15:11:51ID:???0256nobodyさん
2008/03/20(木) 15:33:39ID:???hasManyアソシエーションでlimitを指定しないと確かに225のクエリになる。
ソース読んだらそのためのif文があった。これは知らなかった。サンクス
limit指定しないのが普通なのか・・・あと、なんでそういう実装にしてるんだろう。
limitでUserの件数絞るとしてもwhere user_id (1,3,5)はできると思うのだが。
0257nobodyさん
2008/03/20(木) 15:35:10ID:???> limitでUserの件数絞るとしても
limitでCommentの件数絞るとしても
0259nobodyさん
2008/03/20(木) 15:42:19ID:???バカじゃん俺。この振る舞いについてのドキュメントはどっかにあったのかな。
連投スマソ。
0260nobodyさん
2008/03/21(金) 01:06:38ID:???コントローラーにこんな感じで書こうと思うのですがどうでしょうか。
start transaction
$resultA = $modelA ->method();
if($resultA == 'error')
{
rollback
return;
}
$resultB = $modelB ->method();
if($resultB == 'error')
{
rollback
return;
}
$resultC = $modelC ->method();
if($resultC == 'error')
{
rollback
return;
}
commit
0262nobodyさん
2008/03/21(金) 11:15:08ID:???0263nobodyさん
2008/03/21(金) 11:28:48ID:???0264nobodyさん
2008/03/21(金) 22:38:30ID:???0265nobodyさん
2008/03/22(土) 02:17:57ID:rTbTxKR5コントローラにはあまり詳細な処理は書きたくない(つまり、大まかな流れだけ)ので、
具体的な処理はコンポーネントをこさえて、そちらで処理したいんだけど考え方あってるかな?
たとえば、会員登録処理をするアプリを例にすると、UserRegisterComponentみたいなのを作って
identify()やregister()、update()といったモデルを扱う処理を記述して、
コントローラーからはフォームの値の受け取りとコンポーネントをコネコネ使うこと、結果によって
ビューを表示しわけるようなイメージです。
ソース書いて晒した方が早い?
0266nobodyさん
2008/03/22(土) 03:46:35ID:???> コントローラにはあまり詳細な処理は書きたくない
> 具体的な処理はコンポーネントをこさえて、そちらで処理したい
大事なのはこれらの明確な理由が何なのかってことだと思う。
その会員登録処理がシステムの他の部分からも必要になるならコンポーネントにした方がいいと思うよ。
もしくは他のアプリでも(ほぼ)そのまま使用できるなら。
あとはコントローラとモデル(DAO層)を分離することでテスタビリティを向上させたいとかかなぁ
例えばテストの時はモックコンポーネント使うようにすればデータベースがなくてもコントローラのテストができる。
0267265
2008/03/22(土) 05:08:43ID:rTbTxKR5なるほど。コンポーネントで会員登録処理と思いついた理由は指摘のとおり他のアプリで
いつも同様のことを実装してるのでコンポーネント化してしまおうというのが一番の理由。
それにコントローラ内に細かい条件分岐や処理を書き始めるとものすごくコードが肥大して
メンテナンスがし難いし、もし今後会員登録のフローを同アプリケーションの別箇所でも使い
たいって仕様変更があっても対応しやすいかと。
でも、「会員登録(管理)コンポーネント」なんて作っちゃうとモデルやDBテーブルの構造が
かなり固定化&依存してしまうのがいやだなだ、と…(AuthComponentみたいにね)
それならばpluginにしちゃえば?って考えることもあるけど、pluginってあんまり使われてないし。
うーむ。
0269nobodyさん
2008/03/22(土) 10:19:47ID:???DBテーブルの構造がかなり固定化&依存
これ内容が会員登録だったらテーブル構造に依存しちゃうのやばいだろ?
会員認証なら固定依存しても、それほど問題ないけど
コンポーネントてそもそもDBテーブルの構造がかなり固定化&依存してしまうものなんだね
0270nobodyさん
2008/03/22(土) 10:52:32ID:???コンポーネント設計のポイントは、Plug-and-Playを可能にすることであり、独立性を高めることにある
重要となる設計要素は、インターフェースであり、注目すべきは設計要素間の依存関係だと思う
内部実装に依存しない形でコラボレーションをモデル化できるインターフェースが重要じゃないかな
コンポーネント化するということは、結局クラスをグループ化することだからね
クラス間の関連(集合-部分、汎化-特化)と依存関係を意識して設計しないと
物理的にはコンポーネント化したが、論理的にはひとつのシステム全体
ひとつの再利用単位として使わざるを得ないという状況が現れるから
この点で、依存関係の設計はかなり重要
0271nobodyさん
2008/03/22(土) 11:26:27ID:???モックコンポーネント
あまり聞かない、組み合わせだけどw
モックとコンポーネント入れ替えするものじゃないの?
0272nobodyさん
2008/03/22(土) 11:49:52ID:???0273nobodyさん
2008/03/22(土) 19:56:20ID:rTbTxKR5「配布できる」と書いてあるくせに、プラグイン配布サイトって見たことないやと思って。
「会員登録プラグイン」とかあるといいのになー
会員登録コンポーネントの件、結局ユーザーテーブルを分けて(users:ログインIDとパスワードだけ、user_profiles:その他のプロフィール項目)
コンポーネントで固定化するのはusersテーブルを主にして、user_profilesの方はアプリケーション毎に
自由に定義できるような仕様でコンポーネントを書いてみようかと思っています。
0274nobodyさん
2008/03/22(土) 20:52:09ID:???そういうこと。テストの時はモックを使うようにする。
「コンポーネントのモック」って意味でモックコンポーネントって言った。
0275nobodyさん
2008/03/22(土) 21:01:00ID:???会員登録プラグイン
何度も使うような処理でも無いし面倒な処理でもないからなあ
個人的には確認画面やらページ送りやら何度も使う場面のあるプラグインもしくは
コンポーネントが欲しい
0276nobodyさん
2008/03/23(日) 01:31:09ID:???yamlの空白に少しはまった
0278nobodyさん
2008/03/23(日) 12:24:28ID:???ファンクションはありますか? イメージとしてはこんな感じで。
$this->Post->hogehoge($id, 'Address'->'Hokkaido');
Model classのファンクションを一通り眺めてみたのですが、
それらしきファンクションを見つける事ができませんでした。
http://api.cakephp.org/class_model.html#d25735e5d69a1c55c58de6df8c06bd9e
0280278
2008/03/23(日) 13:46:28ID:9wMqWTzf先に挙げたURLで、「Public Member Functions」と記述されていたので、
ファンクションと書かせてもらいました。
methodと言えばいいですか?
既存のものでいうと、findAllやsaveなどの事です。
ご存じでしたらお教え下さい。
0282nobodyさん
2008/03/23(日) 21:00:13ID:xiSCrZA7会員登録プラグイン、完成したら俺にくれ
0284nobodyさん
2008/03/23(日) 23:07:41ID:???カラム単位の更新でいいなら、saveField。
$this->Post->id = $id;
$this->Post->saveField('Address', 'Hokkaido');
0285nobodyさん
2008/03/23(日) 23:25:30ID:???小さい車輪だろうが再開発をしなくて済むなら助かる。
0286nobodyさん
2008/03/24(月) 00:14:26ID:???そうじゃなければ、すでに作ってる人たくさんいるよ
0287nobodyさん
2008/03/24(月) 00:19:02ID:???スルー推奨。
しばらく前、本やWebを参考にRoRを使っていたが、cakePHPの方が
使いやすい。
ひょっとしたら、RoRでActiveRecordとかに若干慣れたので、
馴染みやすかっただけかもしんないけど。
0288nobodyさん
2008/03/24(月) 00:22:17ID:gAnd/HKbなんのためにプラ銀機能なんて実装されてんの?
0289nobodyさん
2008/03/24(月) 03:29:33ID:???0290nobodyさん
2008/03/24(月) 03:37:25ID:???会員登録ページのメソッドにアクセスしてるにもかかわらず
コントローラでPaginationコンポーネントを定義していれば
ページ処理の関わるクラスがnewされるんでしょ
0291nobodyさん
2008/03/24(月) 13:06:37ID:???コンポーネントやモデルはヘルパーに比べればメソッド単位で呼び出しやすいけど
こっちも深く考えずにコントローラ単位で呼び出すんだ
多分
0292nobodyさん
2008/03/24(月) 13:16:08ID:???function gugurekasu() {
App::import('Helper', 'Hoge');
$ajax = new HogeHelper();
}
0293nobodyさん
2008/03/24(月) 20:55:32ID:???ヘルパーとか呼び出したいのなら、
そういうコンポーネントを作ればいいんじゃないのかな?
コンストラクタあたりで、url見てごにゃごちゃすれば出来るでしょう?
0296nobodyさん
2008/03/25(火) 10:30:40ID:Qe2AafnSだからといってコントローラにごちゃごちゃとロジックを書き並べたくないので
コンポーネントにすべてモデルを操作するカスタムメソッドを記述してます。
これって俺だけ?
0297nobodyさん
2008/03/25(火) 10:37:30ID:???まずいケーキだってケーキ様が言っている。
http://cakephp.org/files/OCPHP.pdf
0298nobodyさん
2008/03/25(火) 10:46:51ID:???ケーキがどうのこうのいおうが
自分の見やすい書き方が一番
たとえば1万step以下のコードなら
全部コントローラに書いた方がいい、みたいなね!
0299nobodyさん
2008/03/25(火) 10:55:58ID:Qe2AafnS3ページ目? こんなにモデルに書くもんかね…
俺だったらcとmの間のコンポーネントをずっしり書くな。別のプロジェクトにも使いまわしできるし。
コントローラだとほぼ、使いまわせないしな。
0300nobodyさん
2008/03/25(火) 11:02:26ID:???0301nobodyさん
2008/03/25(火) 11:05:24ID:???コントローラに関する再利用性の高いメソッドはコンポーネント
モデルに関する再利用性の高いメソッドはビヘイビア
再利用性が高いロジックじゃないとダメ
そのロジックがコントローラ側かモデル側かどっちに属するかを間違えるとダメ
0305nobodyさん
2008/03/25(火) 11:13:20ID:Qe2AafnS0306nobodyさん
2008/03/25(火) 11:14:25ID:???コンポーネントにすべてモデルを操作するカスタムメソッドを記述してます
これダメだろ?再利用性の高さとか無視してるやん
0307nobodyさん
2008/03/25(火) 11:17:23ID:???それだけでもオワッテルw
0308nobodyさん
2008/03/25(火) 11:22:06ID:???男性・女性・オカマとか
こういうセレクトに必要な初期データはどこへ入れるの?
0309nobodyさん
2008/03/25(火) 11:38:31ID:???spyc重くね?
>>308
とりあえずモデル作ってfind('list')呼んでセレクトボックスへ流す。
都道府県データなんてほぼ100%変更出ないからデータの中身は定数でもいいし
郵便番号検索とか使うアテがあるならデータベース使う。
中で何やってるかは置いといて、ともかくモデルから呼べる事が大事。
0310nobodyさん
2008/03/25(火) 11:42:07ID:???モデルのメソッドの中に都道府県データをいれて
呼び出してもOK?
もしくはDBからひっぱる、それ以外に方法はわからない
0311nobodyさん
2008/03/25(火) 11:44:21ID:???呼び出すときにモデル経由でincludeして呼び出すのがいいのかな
0312nobodyさん
2008/03/25(火) 12:29:56ID:???> spyc重くね?
書くのはYAMLでもキャッシュとしてPHPのシリアライズデータに
変換してそれを読み込むから重くない。
0313nobodyさん
2008/03/25(火) 12:34:26ID:???ケーキを使っている以上ケーキ様の言うことは絶対です。
コンポーネントにいろいろ書くとどれだけテストが大変になるか。
0314nobodyさん
2008/03/25(火) 12:38:32ID:???> 男性・女性・オカマとか
これじゃ足りないな。
現在の肉体的性別 男・女
生まれたときの肉体的性別 男・女
現在の精神的性別 男・女
生まれたときの精神的性別 男・女
好きな性別 男・女・両方・肉体が男・肉体が女
まだ足りないかもな!
0317nobodyさん
2008/03/25(火) 16:31:35ID:???コンストラクタ内で先に
parent::__construct();
を呼ばないとダメだよ
なぜ?て
それは>>318が答えてくれるはず
0318nobodyさん
2008/03/25(火) 17:10:42ID:???0319nobodyさん
2008/03/25(火) 17:42:53ID:???それぞれが間違いとも正解とも言えないから余計めんどくさい。
もっと縛りがキツければ良いのに。
0321nobodyさん
2008/03/25(火) 18:24:02ID:Qe2AafnSEmailコンポーネントと連携して"emailable=1"を判別してメールするビヘイビアだとか、
ソフトデリート(=削除フラグ=1を削除)を実装したビヘイビアとかのサンプルは目にした
んだけど、もっと実践に役立つ使い道ってどんな風なの??
0322nobodyさん
2008/03/26(水) 01:26:50ID:???ユーザーが入力した情報を加工したものを別フィールドに自動的に保存する。
データベースのセオリーからいえば計算で求められる物なのでビューやトリガーを使うところだが、
パフォーマンスを重視&汎用性を高めるためにこうしている。
あとどこかでぐぐって見つけた画像を保存するビヘイビア。
あるテーブルに保存したら、自動的にほかのテーブルにメタ情報を保存するビヘイビア
つまりトリガーの代わりだね。
文字コード変換ビヘイビア
仕様が変わって使っていないが、一つのフィールドに複数の値を入れられる配列型フィールドを作るビヘイビア。
(一対多のテーブルを作れというなよ?そんなJOINが発生する重い処理を作りたくないこともあるんだ。
SQL99 で標準規格化されたしね。)それの応用でオブジェクト(シリアライズ)型
それともうひとつあるのだが、これはちょっとアイデア賞物だと思うので自分のブログで書きたいw
結構いろいろ使っているなw 総論としてデータベースの機能を拡張したいときに使っている。
0323nobodyさん
2008/03/26(水) 02:10:48ID:???日本語でおk
あいかわらず文章下手糞やなw
単純なことをわかりにくい表現するの好きやな
前スレから全く変わってねーな
0325nobodyさん
2008/03/26(水) 02:29:03ID:???ユーザーが入力した情報を加工したものを別フィールドに自動的に保存する。
この自動的て具体的にどういう意味?
0326nobodyさん
2008/03/26(水) 02:34:57ID:???ユーザーが入力した情報を加工したものを別フィールドに自動的に保存する。
これは前スレで自作ヘルパーでやってなかったか?
パフォーマンスを重視&汎用性を高めるというのに具体的内容が欲しい
0327nobodyさん
2008/03/26(水) 02:40:36ID:???一つのフィールドに複数の値を入れられる配列型フィールド
SNSのような大規模サイトでもこれ使う機会なんて滅多にないんだが、何作ってんの?
0330nobodyさん
2008/03/26(水) 03:12:41ID:???それともうひとつあるのだが、これはちょっとアイデア賞物だと思うので自分のブログで書きたいw
恒例自慢きたこれw
0331nobodyさん
2008/03/26(水) 03:36:11ID:???なんだこの過剰反応ぶりw
みるからに同一人物のようだが、
ただの使用例に必死すぎだろw
0332nobodyさん
2008/03/26(水) 03:41:59ID:???激しく必要のない○○○じゃね?
なんにでも当てはまるなw
無理やり反論しようとして滑ってる。
0334nobodyさん
2008/03/26(水) 03:51:47ID:???0336nobodyさん
2008/03/26(水) 04:38:16ID:pkIggipTシーケンス図やクラス図なんかどんな風に記述してるかとか見せてもらえると
参考になります。
0337nobodyさん
2008/03/26(水) 04:51:55ID:???UMLを使うと従来の方法より効率が落ちる時もある。
なぜなら、従来なら手書きで適当に書いてきた図をUMLでどうやって書けばいいのか調べなければならないから。
書き方が全部頭の中に入った後でなら従来よりスムーズに開発ができるようになるかもしれない
が、しかし、それまでは相当の苦労が必要w
オブジェクト指向開発とUMLとはまた別の話でUMLはオブジェクト指向開発の道具にすぎない
0339nobodyさん
2008/03/26(水) 05:04:03ID:???そんなクラスが複雑じゃないやん
0340nobodyさん
2008/03/26(水) 05:24:25ID:???0342nobodyさん
2008/03/26(水) 10:50:05ID:???だがそれは個人の話であって統計的な意味は無い。
検索結果のほうがまだ意味があるな
PHP UML の検索結果 約 957,000 件中 1 - 10 件目 (0.03 秒)
Java UML の検索結果 約 593,000 件中 1 - 10 件目 (0.04 秒)
C# UML の検索結果 約 404,000 件中 1 - 10 件目 (0.04 秒)
0343nobodyさん
2008/03/26(水) 11:29:28ID:???0344nobodyさん
2008/03/26(水) 11:31:39ID:???0346nobodyさん
2008/03/26(水) 11:58:29ID:???複雑になってくるクラス間の関連性の構造の手助けとしてUMLを活用することが多い
だから>>339のいってるように複雑なクラスで無ければ必ずしもUMLが必要とは思わない
0347nobodyさん
2008/03/26(水) 12:17:07ID:???実装者が未熟な場合か、処理が複雑なときだけかな。
クラスダイアグラムはモデル限定でこれもテーブル構成が複雑なときだけ。
ユースケースは文書に起こして仕様書にするので必須。
PHPのクラスを自動生成してくれる奴なかったっけ?
あれでCakeのモデルを自動的に管理してくれると楽かも...楽じゃないかw
0348nobodyさん
2008/03/26(水) 12:24:40ID:???書いているだけでしかないからなぁ。
それならコードで書いてコードからクラス図を自動生成したほうが楽。
0349nobodyさん
2008/03/26(水) 12:38:45ID:???正確にはEJBを使った場合だが、同じものを作るにしても
無意味に複雑になりすぎる。
あれじゃあ、UMLが必要になるのもわかる。
0350nobodyさん
2008/03/26(水) 13:44:26ID:ktIW9Uv7それだから「できました」とかいいながらテストしたらバグ出まくりのプログラムなんか量産しちゃうんだよwwww
UMLじゃなくてもいいが、実装前に詳細なロジックを書き起こしてからコードつくるのは常識だろ。
時間がかかる、めんどくさい、頭の中にもう仕様書書いてあるから、という奴に限ってたいした技術力じゃないんだよな。
設計書ってのはコーディング作業が楽になるだけでなく、チーム関係者との意識共有や、リリース後しばらくたってメンテが必要になった時に効果がでるもんだぜ。
プロとして仕事でやってるならば当たり前だと思ってるが、ここにはプロはいないのか?
0351nobodyさん
2008/03/26(水) 14:32:19ID:???0352nobodyさん
2008/03/26(水) 15:25:48ID:???実装前に詳細なロジックを書き起こしてからコードつくるのは常識だろ
それお前だけの常識乙w
CakePHPのような小規模案件に無理があるぞお前w
0355nobodyさん
2008/03/26(水) 15:37:50ID:???わざわざUMLとか工数伸びるだけやんけ
そんなんで、ほんまに黒字になってんのかw
0356nobodyさん
2008/03/26(水) 15:41:14ID:???スレ違いながら言わせてもらうと・・
実際、開発しながら見えてくる事って多いよね。
キチンと設計や仕様固めが出来ないまま、見切りスタートを切ってしまうことも多々。
問題は、その仕様の追加、変更に対応出来るように設計する事だよ。
0357nobodyさん
2008/03/26(水) 16:12:51ID:???俺は書き方すら知らないけど。
作る前に一応メモに何をどうするかを書き出して、その通りに作ってくね。
あまりに自分の頭の中だけで作ると変数とか何を使ったかわからなくなったり。
イラレで仕様書とか作るのが激しくめんどい。
よって手書きで自分はやってます。
0358nobodyさん
2008/03/26(水) 16:15:44ID:???w
0359nobodyさん
2008/03/26(水) 17:32:25ID:???最低限、要求定義書とユースケースとビジネスロジック(=モデル)の関係図とそれを基にしたスキーマ設計位は必要じゃねーの
打ち合わせ段階で作りまくるじゃん、そんなの
どやってクライアントのイチャモンに対応してるの?
>>357
イラレで仕様書とか正気?
0360nobodyさん
2008/03/26(水) 17:56:28ID:???よって俺もexcel&イラレだな。
0361nobodyさん
2008/03/26(水) 17:58:19ID:???概要みたいなもんだからね。
たとえば関数をすべてコーディング前に列挙できるかといったらまず不可能
プロのプログラマはコードで設計するんだよ。
鉛筆で図を書くか、キーボードでコードで書くかの違い。
0362nobodyさん
2008/03/26(水) 18:01:13ID:???0363nobodyさん
2008/03/26(水) 19:04:34ID:???○プロはソースに意味のあるコメントを残す。
0366nobodyさん
2008/03/26(水) 21:07:55ID:???0368336
2008/03/27(木) 00:00:03ID:d9lPRB8S意外と盛り上がっててびっくり…
0370336
2008/03/27(木) 02:53:28ID:d9lPRB8Sマジかよ。それなんてイラレ?
0371nobodyさん
2008/03/27(木) 11:48:14ID:???値を省略して(空文字で)データベースに保存した場合空文字でINSERTされる。
このときのどう保存されるか動作はデータベース依存であり
MySQLは0になり、PostgreSQLはエラーになる。
https://trac.cakephp.org/ticket/4233
チケットが出ていたみたいだが、修正無しでクローズ?
これ直る見込みないんかいな。確かに空文字とNULLは違うものだが
「データベースの省略可能な数値フィールド」ってのは
数値とNULLしか入れられないんだよね。
どうせNULLが入ったフィールドをModelから読み込むと
空文字になるんだし(あってるよね?)
NULLに変換して保存したほうが実用的だと思うんだけどなぁ。
データベース間の違いも吸収したほうがいいし。
beforeSaveあたりで書き換えるか・・・
0374nobodyさん
2008/03/27(木) 17:50:07ID:???広範囲のテーブルから値を持ってくるにはどうすればいいんでしょうか
SQLならLEFTJOINを繋げて行けば済むのですが
単純にrecursiveを増やしていくとクエリの量が異常に増えて困っています
0375nobodyさん
2008/03/27(木) 19:31:16ID:???どうせ同一人物だろうからトリップつけてくれ。削除すっからさ。
0379nobodyさん
2008/03/27(木) 21:54:01ID:???アソシエーションが直接繋がっている関係なら資料は山ほどあるのですが
例えば4テーブル先まで繋がっているデータを手繰り寄せてくる場合、デバッグ情報を見ると
一旦findで取得してきた配列をforeachで回して一つ一つまたfindを使っているように見えます
結果、データ自体は取ってこれるもののSQLの発行数が異常な量になってしまいとても使う気になれません
SQLの発行を抑えつつもアソシエーションを柔軟に広げるためには、自前でqueryを使うしかないのでしょうか?
0380nobodyさん
2008/03/27(木) 22:01:13ID:???var $fixtures = array(〜〜〜);
こんな感じでfixturesをしているわけだけどさ、
なんかテーブルの生成のタイミングとか変じゃない?
テストを単体で実行すると問題なく動くんだけど、
すべて実行するとテーブルが無いとか言われることがある。
0381nobodyさん
2008/03/27(木) 23:06:17ID:???adobe社のイラレだと思うけど。
>>375
わかる。人をバカにしてばっかだよな。あおってるやつ。
見てて気分悪い。
>>376 >>377
リファレンス見てわかるならそのURL教えてあげようよ。
しかも、聞いてる 374 はある程度知識あると思うよ。
もうちょっと人を思いやる気持ちを持とうよ。
0384nobodyさん
2008/03/27(木) 23:25:34ID:???0385nobodyさん
2008/03/28(金) 00:13:02ID:???残念なやつが多い
>>379
その4テーブルはどんなリレーションなの?
で、今はどんなアソシエーションを記述してんの?
もしかしたらDB設計が悪いという可能性もある。
0386nobodyさん
2008/03/28(金) 00:51:53ID:???各フレームワークの評価目的でプロトタイプを作っていますので
特定のテーブルの再設計で問題を解決するアプローチでは応用範囲が非常に限られてしまいます
申し訳ありませんがCakePHP側での解決を求めています
例えばごく単純にモデルが
A→B→C→D
とbelongsToで数珠繋ぎにアソシエーションが設定されている場合
AのリストにB〜Dのデータを動的に付加して取得したいとすると
どのような指定をすればよいのでしょうか
SQLならJOINをただ書き連ねていけばいいのですが
0388nobodyさん
2008/03/28(金) 01:30:56ID:???0389nobodyさん
2008/03/28(金) 01:42:40ID:???初心者が他人の力借りて簡単にCakePHP評価しようなんて
CakePHPなめすぎだろ?
自分で死ぬ思いでググれボケ
0390nobodyさん
2008/03/28(金) 02:37:39ID:???できそうにない。
https://trac.cakephp.org/ticket/2931
上で同じようなこと言ってたけど対応なしにcloseされた模様。
https://trac.cakephp.org/ticket/4277
上も同様のことを言ってる。3週間ほど前。
>>377 >>383 >>387 >>388 >>389
俺もこれの具体的な解決方法を知りたいです。どうか教えてください。
0393nobodyさん
2008/03/28(金) 03:20:48ID:???今調べて出来そうにないって。こういうケースはじめてなの?
経験浅すぎじゃね。1つのサイトをCakePHPで完成させたことないやろ
0394nobodyさん
2008/03/28(金) 03:22:38ID:???いや、これに関しての日本語の情報がなかなか見つからなかったから英語の記事を探さざるを得なかっただけ。
で、CakePHPの知識がある人はこれをどうやって解決してるんでしょうか?
0396nobodyさん
2008/03/28(金) 03:56:27ID:???0397nobodyさん
2008/03/28(金) 06:59:33ID:???何でだかアンチが混じっている。
で、cakePHPは重いとか、質問者を叩いたり。
無視推奨。
つか、アンチしてる人、cakePHPを無視すればいいのにね。
0398nobodyさん
2008/03/28(金) 08:46:16ID:???日本のサイトで分からなければ、海外サイトくらい見るだろ。
分からなければWeb翻訳すればいいんだしな
0399nobodyさん
2008/03/28(金) 09:18:10ID:???トリップの付け方も知らないらしいし、ほんと終わってんな。w
0400nobodyさん
2008/03/28(金) 09:20:55ID:???とてつもないバカが何人かいるな
0401nobodyさん
2008/03/28(金) 09:29:46ID:???まさしくそのtickets通りです
CakePHPは隣り合ったアソシエーション間ではJOINを繋いでSQLワンコールに最適化してくれますが
それ以上のテーブルをまたいだ関係を持とうとすると途端にクエリ量が増えてしまいます
個人的にrecursiveでアソシエーションの深度を指定する考え方は
好感が持てるのですが、負荷の高さを考えると使用をためらわざるを得ません
サブクエリをインテリジェントに挿入しろとは言いませんが
今回の様な使用頻度の高いと思われる(かつ、割と実装の想像しやすい)処理ならば
既に解決された方がいらっしゃるのかと質問に至りました
--
先ほどContainableBehaviorを試してみましたがクエリ量は変わりませんでした
やはりコアに直接手を加えないといけないようですね(´・ω・`)
0402nobodyさん
2008/03/28(金) 10:01:46ID:???モデルにB→Aのアソシエーションも記述してあると
B→Aのクエリも発行される
だから
A→B→C→D のようなのをそのままやっちゃうと
えらいことになる
だから、いらいないアソシエーションはunbindModelでぶった切る
あと、1.2だと発行クエリが1.1より最適化されている
(つまり、少なくなってるってこと)
0403nobodyさん
2008/03/28(金) 10:11:39ID:???明らかにアンチじゃない奴のほうがたち悪いぞ。質問者叩いてるのもそう。
>>402
>>401の問題解決にはならないんじゃない。B->Aのアソシエーションがなくても起こるから。
>>401
DBにview作れば早いと思うよ。
0404nobodyさん
2008/03/28(金) 10:15:32ID:???レベル低いよな。
ここでアフォみたいな質問してるやつは
CakePHPでサイト構築したことあるのかと聞きたいよ
0405nobodyさん
2008/03/28(金) 10:19:27ID:???もっと常識レベルでの会話して欲しいな
駄文ばっかで何の役にも立たないよ
0407nobodyさん
2008/03/28(金) 10:30:15ID:???0408nobodyさん
2008/03/28(金) 10:36:03ID:???0409nobodyさん
2008/03/28(金) 10:57:56ID:???ウェブアプリなんて画面に表示する少ないデータを
表示するだけなんだからJOINしなくてもいいと思うんだけどね。
どうせ複雑なJOINならJOINするのにも負荷かかるわけだし。
ま、パフォーマンスと開発効率のトレードオフ。
どうしても必要なら、モデルに専用の検索メソッドでも作って
自分でクエリー書けばいいんじゃない?
0410nobodyさん
2008/03/28(金) 11:00:25ID:???0411nobodyさん
2008/03/28(金) 11:03:37ID:q/btZ3WHCakePHPが人気になって普及してきた証拠かなぁw
アンチじゃない人はIDだすようにするか?
そうすればID出していない人はアンチってわかるし。
出したら出したで削除できるしw
0412nobodyさん
2008/03/28(金) 11:10:07ID:???いい質問には、マナーをもって接するが
ろくでもないレスばっかりだからな
0414nobodyさん
2008/03/28(金) 11:14:01ID:???訂正を促すのが良い返答の仕方だよ。
0415nobodyさん
2008/03/28(金) 11:14:44ID:q/btZ3WHやってみなきゃわからないじゃんw
0417nobodyさん
2008/03/28(金) 11:57:59ID:anJTbKapもちろん速度を重視しなくてはならない場面ならば専用メソッド内でSQLを書きます
しかし、上記の様にシンプルなアソシエーションすら動作が怪しいとなると
フレームワーク自体に手を出して最適化させた方がコスト的にベターかなと思います
>>403
複雑なアソシエーションのパターンが出来上がってる時はView使った方がいいですね
今ふと考え付いたのですが、結合済みの仮想テーブルを作って、それを元に
CakePHP側のモデルを構築するアプローチは面白いかもしれません
#仮想テーブルへの更新作業はDB依存のため怪しい臭いはしますが
0418nobodyさん
2008/03/28(金) 12:20:53ID:???負荷を考えるならフレームワークやめろ
CakePHPなんてのは、どうでもいいクライアントに高速納品するための道具てことに気づけよバカ
0420nobodyさん
2008/03/28(金) 12:43:39ID:???> 結合済みの仮想テーブルを作って、それを元にCakePHP側のモデルを構築する
view作ればって言ったのはそういうこと。
面白いかどうかはおいといて、現状の打開策としてはアリかなと思うわけです。
> 仮想テーブルへの更新作業はDB依存のため怪しい臭いはしますが
このDB依存は仕方ないと割り切ればいいんじゃないかな。割り切れるところだと思うし。
0422nobodyさん
2008/03/28(金) 12:53:20ID:???やってくうちに想像しない難点が沢山でてくるよ
0424nobodyさん
2008/03/28(金) 13:04:47ID:???最適化したいならCIスレにいって、このスレからでていけや
0426nobodyさん
2008/03/28(金) 13:34:05ID:???どのフレームワークでも同じこと。
CIでもSymfonyでもRubyOnRailsでも同じだよ。
特にCIは最悪だね。いろんな意味で。
ここではすれ違いだから言わないけど。
0428nobodyさん
2008/03/28(金) 13:44:02ID:???> しかし、上記の様にシンプルなアソシエーションすら動作が怪しいとなると
シンプルではないよ。
CakePHPでもその他でもそうだけどO/Rマッピングというのは
従来の表形式の使いづらいリレーショナルデータベースを
高レベルに扱いやすく使えるようにするもの。
リレーショナルデータベースを基本に設計されたものではなく
より理想的なオブジェクト指向風なデータ構造をもとに設計されたもの。
だからいろんな取り出し方ができる出来る柔軟性がある。
たとえば、behaviorでデータ挿入・取り出し時に色んな処理をかませられる。
そういう柔軟性を持たせながらシンプルなSQLに置き換えるのは容易ではない。
不可能な場合すらある。
なんでもかんでもパフォーマンスを気にして無駄なものを作るのは
初心者のやること。一日働いて3万円人件費をかけるのなら、
その3万円でスペックをあげたほうが総合的に考えてメリットが
高いという時代だから、今は。
0429nobodyさん
2008/03/28(金) 13:50:03ID:???データベースを使う場合、貧弱だよな。
あれならSQL直書きした方がいいってほどメソッドがアホらしいしw
なによりビヘイビアが無いのが一番痛い。
0430nobodyさん
2008/03/28(金) 13:50:47ID:???なんでもかんでもパフォーマンスを気にして無駄なものを作るのは
初心者のやること
サイトリニューアルなど
既存ユーザーが多数いる自社製品ならパフォーマンスを意識する
0431nobodyさん
2008/03/28(金) 13:52:21ID:???マシンスペックを上げろ
0433nobodyさん
2008/03/28(金) 13:55:17ID:???0436nobodyさん
2008/03/28(金) 13:56:12ID:???パフォーマンスはたいして変わんないんだけどなw
0437nobodyさん
2008/03/28(金) 13:57:04ID:???ユーザーが増えると重くなるのはどれでも一緒ですが?
働いていない人は、人件費というコストを計算に入れないからなぁw
まあ、がんばれやw
0439nobodyさん
2008/03/28(金) 13:57:57ID:???0440nobodyさん
2008/03/28(金) 13:58:21ID:???脱却に意味があるというのに、今時SQLなんて低レベルなことやるかよw
0442nobodyさん
2008/03/28(金) 14:00:15ID:???今のCakePHPなら
だったらCIでSQL直書きが最高よ
0443nobodyさん
2008/03/28(金) 14:03:25ID:???重くなりかたが異なってくるんですが?
1回で済む処理を2回のクエリで行ってるとアクセス数が増えたときにクエリ発行数が大きく変わることがわかんない?
ほんとにプログラマなのか?まぁ、がんばれや
0444nobodyさん
2008/03/28(金) 14:05:37ID:???mixiでは”高負荷に耐えるためにJOINを使っていない”んだよ。
http://www.google.co.jp/search?hl=ja&rlz=1T4GGIH_jaJP221JP221&q=MIXI+MYSQL+JOIN+%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3&lr=
0445nobodyさん
2008/03/28(金) 14:07:29ID:???使えていますが? JOINが使われないってだけでしょうが。
パフォーマンスに問題が無い場所で、
複雑なSQLを、SQLを書かずに作れる(買いても作れる)CakePHPと、
SQLを書くのと同等の手間をかけなければならないCIでは
どちらが優れているかは言うまでも無く、CakePHPですね。
0447nobodyさん
2008/03/28(金) 14:09:13ID:???0451nobodyさん
2008/03/28(金) 14:14:14ID:???0454nobodyさん
2008/03/28(金) 14:20:13ID:???0455nobodyさん
2008/03/28(金) 14:21:44ID:???0459nobodyさん
2008/03/28(金) 14:25:14ID:???データベースを分割してJOINが使用できなくなった。
負荷を考えるのなら、JOINなんかするより、
マシンに投資してデータベースを分割(当然マシンも増えているはず)して
アプリケーションで行ったほうがいいということです。
0461nobodyさん
2008/03/28(金) 14:31:33ID:???0462nobodyさん
2008/03/28(金) 14:37:17ID:???データベース部分は、SQLの単語(selectやfromやwhere)を
それぞれメソッドに置き換えて実行しないといけない。
なんとビックリw
だから糞。
0463nobodyさん
2008/03/28(金) 14:38:23ID:???$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);
$query = $this->db->get();
0464nobodyさん
2008/03/28(金) 14:38:41ID:???ただ、「マシンに投資してデータベースを分割(当然マシンも増えているはず)して」が始めからできるわけじゃないんだよね。
だからSQL発行数も含め、パフォーマンスには常に気を遣うわけで。
mixiが今はソフトウェア側でパフォーマンスを気にしてないかっていったらそんなことはないし。
>>460
パフォーマンスの話してるよ。何言ってんの?
もう面倒だからお前いいよ。
0465nobodyさん
2008/03/28(金) 14:40:13ID:???最適化して、あとは楽で速いコーディングをすればいいじゃんか。
パフォーマンスの基礎だよ?
0466nobodyさん
2008/03/28(金) 14:41:27ID:???これいいね。わかりやすい構文だ
CakePHPの
find(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,)
これに比べれば天と地に差
0469nobodyさん
2008/03/28(金) 14:44:26ID:???$this->db->select('title');
$this->db->from('mytable');
$this->db->where('id', $id)
$this->db->limit(10, 20);
こうなります。
0470nobodyさん
2008/03/28(金) 14:45:17ID:???名無しで必死にレスしてるようだが
名前に番号でもつけてくれないと
今までどんな発言してんかわかんないんだがw
0473sage
2008/03/28(金) 14:50:37ID:JUQ1v1x2ってことはUTF関係か。
0474nobodyさん
2008/03/28(金) 14:50:44ID:???0475425
2008/03/28(金) 14:54:55ID:???>>420
その通りですね。同一アプリケーション内でDBをスイッチする事はありえないので
リスクとしては小さいため十分検討できます(一応、PostgreSQL使ってる方は注意です)
>>424
CodeIgniterもとてもいいフレームワークだと思います
ぜひその情熱で当該スレッドを活性化させて盛り上げて欲しいですね
>>428
確かにアソシエーションの自動判別が面倒(無理)という事情は分かります
面倒なSQLを叩かずオブジェクティブにデータセットを取得できる機能が
すでに実装されていているのですからそれを使うに越した事はありません
この辺りの実装はアプリケーション全体のパフォーマンスに影響するため
サーバ増設前の改良を十分に検討できる部分だと思います
0476nobodyさん
2008/03/28(金) 14:54:59ID:???見ろ他フレームワーク(特にCI)の静けさを!
0479nobodyさん
2008/03/28(金) 15:45:01ID:???0480nobodyさん
2008/03/28(金) 15:54:32ID:???0481nobodyさん
2008/03/29(土) 07:40:57ID:???0482nobodyさん
2008/03/29(土) 09:07:16ID:???0483nobodyさん
2008/03/29(土) 15:28:58ID:???0484nobodyさん
2008/03/29(土) 15:56:30ID:???0485nobodyさん
2008/03/29(土) 16:10:19ID:???0489nobodyさん
2008/03/29(土) 22:04:16ID:t2qvxoud0490nobodyさん
2008/03/29(土) 22:08:25ID:???0491nobodyさん
2008/03/29(土) 22:15:25ID:???完璧すぎる
0492nobodyさん
2008/03/29(土) 22:29:55ID:???0493nobodyさん
2008/03/29(土) 22:57:31ID:???トイレ行った後とか今まで何考えてたかさえ忘れる
0494nobodyさん
2008/03/29(土) 23:43:43ID:VJRoSuRrFreeMindインストール済み。
自宅ではCakePHPのシステム設計に使ってる。
ひとつずつやる事片付けて、終わったブランチに「レ」のアイコン付けるのが
楽しい。
0495nobodyさん
2008/03/30(日) 02:14:14ID:???マインドマップは自由な図解表現
0496nobodyさん
2008/03/30(日) 02:16:24ID:???0497nobodyさん
2008/03/30(日) 02:17:48ID:xhO/sY7i0498nobodyさん
2008/03/30(日) 02:19:35ID:???0499nobodyさん
2008/03/30(日) 02:26:47ID:???0500nobodyさん
2008/03/30(日) 02:31:49ID:???思ったことを、どんどん言葉として書き出す
わかってるからと頭の中でしまいこむと、全体的な解決図を結び付きにくくする
0501nobodyさん
2008/03/30(日) 02:45:33ID:???もっと言語化するクセつければ、コミュニケーション能力向上になるんじゃないかな
0502nobodyさん
2008/03/30(日) 17:27:12ID:???すぐexit();
してる?
0503nobodyさん
2008/03/30(日) 20:27:27ID:3z+xm+ln遅レスだが、ソースの頭にBOMを付けたら表示されるようになた。
が、viewのファイルは8Nで保存しておかないと、たまに悪さをするようだ。
0506nobodyさん
2008/03/31(月) 10:59:21ID:???コンポーネントでrenderを呼んだときは
exitしないとデフォルトのrenderが最後に読み込まれるよ
0507nobodyさん
2008/03/31(月) 11:00:31ID:???SeleniumとSimpleTestの組み合わせが最強?
0508nobodyさん
2008/04/01(火) 01:26:52ID:j0Vrw1hDそっちのテストなら、セレニウムだろうと手作業だろうとなんだって良くね?
ユニットテストをするのなら1.2から正式対応したSimpleTestって言うだろうけど。
ていうか、テスト駆動開発って面倒ですよね、時間がかかるけど出来上がり安定するのは確かだけど。
0509nobodyさん
2008/04/01(火) 01:34:29ID:???ある程度の規模になったら、ユニットテストをやらないなんて
考えられないよ。
修正があるたびに同じテストなんてやってられない。
それこそ時間がかかる。
0510nobodyさん
2008/04/01(火) 02:09:46ID:???なんといってもテストが楽
0511nobodyさん
2008/04/01(火) 12:33:08ID:???0512nobodyさん
2008/04/01(火) 20:20:10ID:???0513nobodyさん
2008/04/02(水) 00:32:30ID:Ldo05SB7ビヘイビアって使ってる?
0514nobodyさん
2008/04/02(水) 00:38:10ID:???荒らしが去ったので落ち着いただけ。
CakePHPを使って、ようやくサイトを公開できた。
思ったより使いやすいね、CakePHP。
0515nobodyさん
2008/04/02(水) 03:09:53ID:???ビヘイビアを一番使うな。
よくよく考えると、ソフトウェアの中心はモデル。
その中心の共通処理なんだからよく使うのは当たり前か。
0516nobodyさん
2008/04/02(水) 11:07:25ID:???ソフトウェアの中心はコントローラー
なぜならコントローラーはモデルとビューにも指令を出すが
モデルは、たいていコントローラを介してのやりとりになるから
そういう考えで行けば、よく使うのはコンポーネントじゃないとおかしい
0517nobodyさん
2008/04/02(水) 11:18:11ID:Ldo05SB7アフォがあらわれた
0518nobodyさん
2008/04/02(水) 11:57:50ID:KzinrGTWそれは、findAll() でやるべきなのでしょうか?
0519nobodyさん
2008/04/02(水) 12:05:53ID:???コントローラなんて所詮インターフェースに過ぎんよ。
実際の処理じゃなくて、ブラウザから引数を受け取って
それを少々加工してモデルに渡す。
またモデルから受け取ったデータを少々加工してビューに渡す。
流れとしてはこんな感じだね。
「ブラウザ」→「コントローラ(加工)」→「モデル(実際の処理)」→「コントローラ(加工)」→「ビュー(HTML出力)」
っていうか、このように作らないとテストがしづらいったらありゃしない。
SeleniumやCakeWebTestCaseがあるとはいえ、
コントローラを操作してのテストでは範囲が大きすぎる。
もっと小さな範囲でテストできるようにしないといけない。
一番重要な処理を最小限の大きさ(なるべく他に依存しない)で
テストすること考えれば、自然とこうなるはず。
0520nobodyさん
2008/04/02(水) 15:46:57ID:???これほど自民党の一党独裁の問題点が分かりやすい現象は無いなw
0521nobodyさん
2008/04/02(水) 16:07:32ID:???そうなんだ。だから本にもモデルのテストの方法しか書いてなかったんだ。
モデルよりコントローラーをテストしたいんだけど・・・ってずっと思ってた。
ということは、僕のプログラムの組み方がよくないんでしょうか。
0522516
2008/04/02(水) 16:33:04ID:Ldo05SB7さきほどはアフォと一言で片付けてしまって申し訳ない、2ch流の愛情表現だと思ってくれ
で、>>519のいうとおりアプリケーションの中心となるビジネスロジックについてはコントローラなどでは
なくモデル内で実装するべき。一番大切なテストはビジネスロジックであるわけだし、モデルに集約して
(かつコントローラとのインタフェースも疎結合にして)コアロジックを実装することでコアロジックを別システムに
再利用しやすくなるというメリットも受けられる。
なので、コントローラはある意味、テストをしなくても問題ないくらい「薄い」実装にするべきだし、コントローラ
内で繰り返しよく使う処理についてはコンポーネント化してあげたほうが、ユニットテストで品質を保証できるので
良いかと。
こんな感じで考えていますが、どうでしょう?
0523nobodyさん
2008/04/02(水) 16:44:10ID:???Seleniumこれだけあれば、全く十分なんだが
これ以外でテストしようとすればコストかかるだけやろ
どんくさい作業してんな、赤字やろ?
0524nobodyさん
2008/04/02(水) 16:50:49ID:???だから何ってかんじだが、それがどうしたんだよ
リファレンスに書いてあるようなこと、なんで必死に訴えてるのwww
0525nobodyさん
2008/04/02(水) 16:52:59ID:???0526nobodyさん
2008/04/02(水) 16:56:38ID:???ブラウザを起動する為、そもそも動作が遅いってのもあるが、
Seleniumだといくつものモジュールが組み合わさった状態で
テストするしかないから、どこのバグがあるのか見つけにくい。
またデータの初期化などが出来ない。
途中で内部のデータを調べることも出来ない。
CakePHPにはSimpleTestでブラウザをエミュレートした状態の
テストもできるので基本はそれを使ったほうが良い。
Seleniumを使うとしたら、SimpleTestではできない
JavaScriptが絡んだ処理のテストぐらいだな。
0527nobodyさん
2008/04/02(水) 16:58:43ID:???間違いではないということだなw
0528nobodyさん
2008/04/02(水) 17:01:36ID:???アプリケーションの中心となるビジネスロジックて何?
どんなロジック?
一番大切なテストてどんなテスト?
>>モデルに集約して
(かつコントローラとのインタフェースも疎結合にして)コアロジックを実装
プラグインと違うの?
>>なので、コントローラはある意味、テストをしなくても問題ないくらい「薄い」実装にするべき
モデルとビューに命令出すのに薄い実装なんて物理的に無理
モデルはカラッポでOK
0529nobodyさん
2008/04/02(水) 17:04:44ID:???ブラウザ上でテストするだけなのにモジュールとか関係ないしwww
JavaScriptテストやるなら加工しないと出来ないだろwww
0531nobodyさん
2008/04/02(水) 17:08:00ID:???0532nobodyさん
2008/04/02(水) 17:08:48ID:???0533nobodyさん
2008/04/02(水) 17:09:00ID:???0534nobodyさん
2008/04/02(水) 17:09:39ID:???糞スレでやってねw
0537nobodyさん
2008/04/02(水) 17:18:56ID:???いや、まて、わざと悪い例を出しているのか?
まあ、訂正している俺は考えをまとめられていいけどな。
(そして訂正している文を見て学習する人もいるだろう)
> モデルとビューに命令出すのに薄い実装なんて物理的に無理
> モデルはカラッポでOK
コントローラが出す命令はすごく小さなものだよ。
モデルに対して、「データ取って来い!」「書き込め!」「削除しろ!」
そして、「複雑な一連の処理をしろ!」
前三つは、CakePHPの自動生成コードでも書いてあるから
簡単にわかると思うけど最後の「複雑な一連の処理をしろ!」を
モデルに書くべきってことをわかってない人が多いんだよね。
複雑な一連の処理をコントローラに書いてしまう。悪い例だ。
0539nobodyさん
2008/04/02(水) 17:29:17ID:???0541nobodyさん
2008/04/02(水) 17:32:26ID:???0544nobodyさん
2008/04/02(水) 17:53:38ID:???モデル上で別のモデルのデータ取得できなくね?
0545nobodyさん
2008/04/02(水) 17:55:24ID:???どこまでをモデルでやるかは結局設計しだいだけど、
>>541
ユーザーがフォームからの条件入力。URL形式での条件入力
、つまりコントローラのアクション関数の引数に入る場合。
その引数をもとにモデルを呼び出すわけだけど、
このときのモデルの関数は汎用的なfind関数でもいいし、
もっと簡単に扱いたければ、モデルに専用の関数を作って呼び出す。
汎用的なfind関数を使う場合には、array('key' => '= ' . $value)なんて
条件データに加工しないといけないよね? これがコントローラの処理。
モデルに専用の関数を作る場合、もっと簡単に使える関数にするね。
もちろんその場合、モデル内部でfind関数を使うことになるだろうし、
そのための条件の加工もモデルに書く。
ユーザーの入力した条件が、POSTでくる場合は、
$this->dataから条件を作り出す所までもうちょっと
コントローラでやる仕事が増えるだろう。
それでもコントローラの処理(モデルを呼び出すところまで)はこれだけ。
俺ならこのように作るよ。
あとモデルから戻ってきたデータを、ビューで使いやすいように
単純化するのもコントローラの仕事だね。
0546nobodyさん
2008/04/02(水) 17:59:00ID:???> モデル上で別のモデルのデータ取得できなくね?
モデル上で別のモデルのデータを使用したいと思ったとき、
その二つのモデル間には関連性がある。
つまりアソシエーションを定義している。
アソシエーションを定義しているのなら、
モデル内で、別のモデルを呼び出すことが出来る。
Model1の中から、$this->Model2->findAll(); 感じで呼び出せる。
0550nobodyさん
2008/04/02(水) 18:06:46ID:???それは見た目を変えるだけだからビューの仕事だろうね。
モデルから戻ってきたデータとは、汎用的なfind関数の場合、
$data => array(
モデル名 => array(
フィールド名1 => 値1,
フィールド名2 => 値2,
フィールド名3 => 値3,
)
)
こんな値が返ってくる。もちろん、これをそのまま
ビューに渡してもいいんだけど、これじゃあビューで使いにくい!
って言う場合加工する。
そんな場合あるのかって? 余り無いだろう。
そう、だからコントローラの仕事は少ない。
モデルから取得した値をビューに渡す$this->set(・・・) は
コントローラの仕事ね。
0554nobodyさん
2008/04/02(水) 18:21:49ID:???もちろん、直接関係が無いモデルは別々に
アクセスするよ。
モデルというか処理の内容から考えて
一つであるべきと思う場合は一つのモデルでやる。
あと、トランザクションの為のメソッドが
モデルにあることも興味深いよね。
一連関係ある処理は一つのモデル内で完結させるものと
考えると、なるほどと思わない?
0556nobodyさん
2008/04/02(水) 18:27:56ID:???その意見はわからないでもないが、
普通にRDBMSを正規化したとき
そういう関連(リレーション)は出来るもんなんだが・・・
RDMSを正規化すると複雑になってしまう。それがいやだから
それを解決する為に、O/Rがあるんだと思うぞ!
0557nobodyさん
2008/04/02(水) 18:28:26ID:???○RDBMSでテーブルを正規化したとき
0558nobodyさん
2008/04/02(水) 18:32:44ID:???ページ数が増えたとき、コントローラを増やすことができるけど
コントローラが増えた分モデルを増やすこと出来ないよ。
ひとつのモデルに書くコードが恐ろしく増えるね
0559nobodyさん
2008/04/02(水) 18:34:17ID:???0560nobodyさん
2008/04/02(水) 18:35:56ID:???言っている意味が、よくわからないんだが・・・
例えコントローラが無くてもモデルは作れるし、
一つのコントローラで複数モデルを扱うことも出来るんだが?
0561nobodyさん
2008/04/02(水) 18:43:36ID:???あれがアフォに勘違いを植え込む。
0562nobodyさん
2008/04/02(水) 18:49:12ID:???コントローラに処理を詰め込みすぎというか、モデルに処理が何も無いのが
いけないんじゃないかな?
あれじゃ、単にテーブルに直接アクセスするネイティブな関数の
代わりのクラスにしか見えない。
一番、プログラマがいろいろ書くべきなのはモデルなのに。
逆に言えば、いろいろ書かないといけないものだからこそ
自動生成ではモデルに何もないんだろうね。
でもサンプル程度はほしいかも。
0563nobodyさん
2008/04/02(水) 18:53:30ID:KzinrGTW<!-- 0.0012s -->
みたいに、生成時間?のコメントがつくんですけど
これを付けないようにするにはどうすれば良いんでしょうか?
debugは1にしておきたいです。
0564563
2008/04/02(水) 18:58:51ID:???0565nobodyさん
2008/04/02(水) 19:00:37ID:???モデルで書かれてる処理はバリデータ関係の関数しかないんだけど
http://code.google.com/p/openflp/
0567516,522
2008/04/02(水) 19:01:23ID:Ldo05SB7「複雑な一連の処理」とかビジネスロジックとかって、たとえば俺の場合は
・�@日足の株価を取得してRSIを計算する
・�A与えられた条件引数に該当する銘柄の証券コード配列を取得(スクリーニング)
・�B現在の株価を受け取り、あらかじめ計算しておいた目標価格の条件を満たすか判別
⇒・更に条件を満たしていれば、買い/売り注文をWEBサービスに投げる処理も「証券会社モデル」(仮称)というDBと連携しないモデルを作成して、HTTP(S)で注文するメソッドを書いてる。
・�C現在の株価を取得する(楽天証券のRSSをDDE接続経由で呼び出すモジュールを別途使用)
みたいなアプリが持つほとんどの主要処理を言ってて、これらをモデル(またはビヘイビア)に記述するべきと思うのです。
逆に言えばコントローラは、
・�Cの「現在の株価を取得する」メソッドからの返し値をそのまま�B「株価と目標を評価し、注文する」メソッドに引渡し仲介する
・ビューからリクエストがあった�@などの計算処理をモデルメソッド�@に引き渡す
・スクリーニング対象銘柄の証券コードリストを取得し、そのまま�Aのスクリーニングメソッドに引き渡す。
くらいのことしかしていない。人間の世界でいうと「仲介人」かと。
0569nobodyさん
2008/04/02(水) 19:08:08ID:???Rails 製のオープンソース版 Fastladder
モデル 382steps
コントローラー 910steps
コントローラーに処理書きまくってるんですが。。。
0570nobodyさん
2008/04/02(水) 19:09:00ID:???0571nobodyさん
2008/04/02(水) 19:11:13ID:???オープンソース見れば、すぐわかることだからな
0572nobodyさん
2008/04/02(水) 19:15:29ID:???> じゃあ本家railsのソースコードみせてやる
おいっ! railsはフレームワークだ。
もともとビジネスロジックは含まれてない!
0574516,522
2008/04/02(水) 19:46:05ID:Ldo05SB7あー、「全部コントローラで出来るし」って言ってる時点でプロフェッショなるじゃないことが確定www
議論しても理解できないんだろうな、「できる/できない」ということと「(プロとして)やるべき/べからず」
といった本質的な点をwww
コントローラでも全部やろうと思えばできることくらいわかっとるわいwww
0576nobodyさん
2008/04/02(水) 21:14:45ID:???議論としては面白い
俺もその辺気になってた
まあ俺はbakeしたコードの拡張から入ったクチだから全部controllerに書いちゃうけどなwww
0577nobodyさん
2008/04/02(水) 21:37:43ID:???俺もコントローラに書いてしまったけど、
作り続けていくうちに、なんか無理が出てくるんだよ。
なんでこんなに作りづらいんだ?って思っていたときに
このスレにあった、ケーキの絵。あれで悟りを開けた気がする。
あぁモデル中心でやればいいんだって。
0579nobodyさん
2008/04/02(水) 21:58:46ID:???モデルに書けって言うけど、何を書くの?
関数で書けばいいの?モデル内のメソッドとして?
>>565
の言うとおり、実例も無いし具体的なメリットが分からない。
今のところテストが楽って事はなんとなく分かった。
0580nobodyさん
2008/04/02(水) 22:16:06ID:???これの3ページ目
http://cakephp.org/files/OCPHP.pdf
0581nobodyさん
2008/04/02(水) 22:19:41ID:???モデル = ビジネスロジック用のクラス
なんだから、言うまでも無くメソッドだろ
0584nobodyさん
2008/04/02(水) 22:27:49ID:???どう幸せになるかではなく、
どう幸せになりたいか。
貴方はプログラミングする上で、どうなったら幸せだと感じる?
0585nobodyさん
2008/04/02(水) 22:57:59ID:???0588nobodyさん
2008/04/03(木) 00:17:09ID:???松本に話したら鼻で笑われたよ
0589nobodyさん
2008/04/03(木) 00:38:13ID:???0590nobodyさん
2008/04/03(木) 00:48:42ID:???0591nobodyさん
2008/04/03(木) 10:10:52ID:Z1Ohe4yI0592nobodyさん
2008/04/03(木) 11:26:08ID:???0593nobodyさん
2008/04/03(木) 12:10:16ID:???1.フォームから画像ファイルをアップロード
2.アップロード結果・画像ファイルの不正検知
3.2が成功時、元画像名をmd5したものをuploadsフォルダに保存
4.3のファイル名をimage_fileカラムに格納
という一連の処理があったばあい、
今現在はコントロールとコンポーネントに書いてますが、
モデルとビヘイビアに書くとしたら、
2->バリデータに記述
3->ビヘイビア
4->モデル
という感じなんでしょうか?
0594nobodyさん
2008/04/03(木) 12:26:23ID:???最初から無いってことは必要性が薄いてことだよな
0595nobodyさん
2008/04/03(木) 12:32:04ID:???モデルに書いて読みにくくなるなら、書かない方がいい
結局はソースを読みやすくするために分けてるだけの話
0596nobodyさん
2008/04/03(木) 12:32:23ID:???正確には画像を保存できるビヘイビアだけどね
http://bakery.cakephp.org/articles/view/actas-image-column-behavior
0597nobodyさん
2008/04/03(木) 12:50:28ID:???一番見やすいソースとは、なるべく何も書かないこと。
画像をアップロードして保存というのは、本質的には
テーブルに画像フィールドを作ってそこに格納することと変わらない。
だからフィールド追加作業以外は、一切処理を変更しないで
作れるというのが一番理想的。
ビヘイビアを使えば、>>596のようにActsAsにわずかなフィールド情報を
設定して終わりだけど、その他の方法でここまでスマートに作れるかな?
0599nobodyさん
2008/04/03(木) 13:49:15ID:Z1Ohe4yI>最初から無いってことは必要性が薄いてことだよな
正確には1.1の頃からビヘイビアのディレクトリは用意されてたんだよな。
おそらく必要性はあったのだけど、1.1.xのステイブル版までに実装できなかっただけなのでは?
0600nobodyさん
2008/04/03(木) 14:22:02ID:???0601nobodyさん
2008/04/03(木) 15:14:18ID:???0603nobodyさん
2008/04/03(木) 17:41:48ID:???http://book.cakephp.org/ja/view/67/introduction
> Model behaviors provide a way to mix in functionality
へぇ、behaviorsはmix-in的な機能を提供するものだったんだ。なるほど。
0606nobodyさん
2008/04/04(金) 20:03:22ID:GG6uDHIa0607nobodyさん
2008/04/05(土) 04:54:50ID:???個人的にはいい感じだと思いましたが、どうでしょう?
CakePHPを使ったMVC設計のベストプラクティス
ttp://www.sooey.com/journal/2008/03/26/717/
0608nobodyさん
2008/04/05(土) 05:21:49ID:???MVCモデル全般的な考えではない
0609nobodyさん
2008/04/05(土) 05:24:58ID:???MVCモデルでわけた場合はCが中心となる
0610nobodyさん
2008/04/05(土) 09:45:41ID:???0611nobodyさん
2008/04/05(土) 15:00:48ID:???0612nobodyさん
2008/04/05(土) 15:07:51ID:???最強のモデルとは思っていない。
最適なモデル構造というには、まだまだ完成度が低いとrails作者は言っている
0613nobodyさん
2008/04/05(土) 15:49:00ID:???面白いけど
これ通りに書いたら一覧性下がりそうだな
大規模なら修正には強くなりそうだね
まずは体に叩き込んでみるのがいいのか
0615nobodyさん
2008/04/07(月) 17:32:08ID:???今は勉強してる暇も無いからとりあえず平で書く
ってときに、最低限これだけ守ってコード書いとけば
あとでcakephpを使いたくなってもまあなんとかなるよ という
ポイントを教えて
0616nobodyさん
2008/04/07(月) 17:50:23ID:???無理じゃね
0617nobodyさん
2008/04/07(月) 18:06:48ID:???0618nobodyさん
2008/04/07(月) 18:28:13ID:???とにかく規約ぐらい把握しないと無理だよね
結局出来るのはDBの設計ぐらいじゃないかと
コードも処理部分は多少使いまわせるだろうけど
0619nobodyさん
2008/04/09(水) 22:36:27ID:0zi6cM/k考えています。
それで、実際に発行されているSQLと、可能であればアクセスパスを確認したいの
ですが、なにか方法がありますでしょうか。
0620nobodyさん
2008/04/09(水) 23:44:43ID:???0621619
2008/04/10(木) 00:04:23ID:ysAxvq3P確認できました! ありがとうございます。
0622nobodyさん
2008/04/10(木) 10:23:53ID:???$sql = <<<EOF
SELECT
`Foo`.`id`,
SUM(`Bar`.`hoge`)
FROM `bars` AS `Bar`
LEFT JOIN `foos` AS `Foo` ON (`Bar`.`foo_id` = `Foo`.`id`)
WHERE `Foo`.`id` IN (1, 2, 3, 4, 5)
GROUP BY `Foo`.`id`
EOF;
連想配列の添字がおかしくなるのですが、回避はできないのでしょうか
array(
'0' => array(
'Foo' => array('id' => ***)
'0' => array('SUM(`Bar`.`hoge`)' => ***) ←ここ
)
.
.
.
)
0623nobodyさん
2008/04/10(木) 10:42:01ID:???なんかqueryなんか使わないで、find()で出来そうな気がするんだが?
queryだとRDBMSごとの違いを吸収できないことがあるのでお勧めしない。
んで、試してないんで間違っている可能性が高いんだが
$sql = <<<EOF
SELECT
`Foo`.`id`,
SUM(`Bar`.`hoge`) as `Bar`.`hoge`
以下同じ
じゃだめかな?
内部的には帰ってくるデータのフィールド名がどうなっているかを判断して
連想配列に入れているようだから、SUM関数とか使うとフィールド名が
CakePHP的に想定外になる。それが原因じゃないかな?
ちなみに、この、 as `Bar`.`hoge`の文字列の部分がRDBMSによって違うので
考えなしに使ってしまうと、RDBMSごとの違いを吸収できなくなる。
(たしかPostgreSQLだとas Model__Field)
もちろん、MySQLにだけ対応していればいいのなら、問題ないけどね。
0624nobodyさん
2008/04/10(木) 11:29:33ID:???レスありがとうございます
alias噛ませる方法は私も試してみたのですが
FROM `bars` AS `Bar`の宣言と被っているためエラーが返ってきます。
hasManyで繋がっている集計先テーブルの条件指定なども追加したい場合
CakePHPの作法だとどのようにするべきなのでしょうか?
たとえば、PostのViewにユーザ名だけでなく、そのユーザが所属するグループ名を表示したい場合、どうすればいいんだろう?
Post.id
Post.user_id−参照→User.id
←取得−User.username
User.group_id−参照→Group.id
←取得−−−−−−−−−−− Group.groupname
User.usernameを表示する場合は、$post['User']['username']でいけるっぽいけど、
じゃあ、そのユーザのグループ名はどうやって取得すればいいんだろう?
他にも、グループ名のリンクをクリックしたときに、そのグループに所属するユーザ
(User.group_idの値がGroup.idの値と等しいユーザ)User.usernameの一覧を作成するときとか
どのように書けば良いんだろうか?
MVCにしろ、SQLにしろ始めたばっかで全然わからないや。
0626nobodyさん
2008/04/10(木) 15:04:31ID:???Post -> User -> Group という順番に適切なアソシエーションが設定されていれば、芋づる式にデータは取ってこれる。
やってるけど分からないなら>>620が書いているように、デバッグモードをonにしたほうがいい。
その質問の仕方だと、何をどこまでやって分からないのか分からない。
0627nobodyさん
2008/04/10(木) 22:22:07ID:???とりあえず、
SUM(`Bar`.`hoge`) as `sumhoge`
これだと、
Array([0] => Array([0] => Array([sumhoge] => 6)))
となるよ。
まとめて書くなら、
$query = array(
'conditions'=>array(
'Foo.id'=>array(1,2,3,4,5),
'1=1 GROUP BY Foo.id'
),
'fields'=>array('Foo.id','SUM(Bar.hoge) as sumhoge')
)
$this->Bar->find('all',$query);
って感じかな
0628nobodyさん
2008/04/10(木) 22:25:44ID:???どこのモデルのデータかという情報が消えてしまい、
0という名前のモデル名になるってだけで
おかしいわけじゃないんだけどな。
今回はBar.hogeのSUMだからモデル名はBarになるべきだと
思うかもしれないけど、SUM(`Foo`.`hoge` + `Bar`.`hoge`) という
書き方だって出来るわけだし。
0629nobodyさん
2008/04/11(金) 00:29:36ID:???しかし、扱いにくいのはたしかなんだよね
0630nobodyさん
2008/04/11(金) 01:18:44ID:???Scaffoldなんていう土建屋みたいなネーミングはいかがなものかねぇ。
いくらRoRのパクリとはいえ、違う名前でもよかったんじゃないかな。
なぁんて、チラシの裏w。
0631nobodyさん
2008/04/11(金) 01:32:12ID:???0632nobodyさん
2008/04/11(金) 01:40:16ID:???私も初心者ですが、私の場合はVIEWの最後に、
<?php print_r($post); ?>
というデバッグ出力を出して確認しながらやってます。
あ、確認は「ソースの表示」をした方が分かり易いかも。
秀丸など、UTF8等のキャラクタセットに対応するエディタが必要ですが。
0633nobodyさん
2008/04/11(金) 02:27:45ID:???NET Framework 3.0がWEBサイト最強のフレームワークになるな
PCのWEBサイトはC#じゃないと追いつけないわ
そしてPHPなどの下級言語は携帯サイトでしか使用されなくなる
0634nobodyさん
2008/04/11(金) 02:39:04ID:???asp.netの注目度がかなり上がってる
どう考えてもPHPから3Dにも強いasp.net(C#)に移行するだろうな
0635nobodyさん
2008/04/11(金) 02:40:09ID:???時代遅れ君たち
0636nobodyさん
2008/04/11(金) 04:43:59ID:???0637nobodyさん
2008/04/11(金) 04:57:27ID:OBoZ/5C8代わりに、なにがいま時代の最先端なの?
0638nobodyさん
2008/04/11(金) 13:47:57ID:???別に、すでにCakePHPで作ったものをC#に置き換える必要は
ないんだし。
0639nobodyさん
2008/04/11(金) 15:17:40ID:???0640nobodyさん
2008/04/11(金) 17:09:12ID:???mysql の max 関数を使うには cakephp ではどのようにすればよいでしょうか。
よろしくお願いします。
0641nobodyさん
2008/04/11(金) 22:44:28ID:???0642nobodyさん
2008/04/11(金) 23:41:35ID:???findといえ
0643nobodyさん
2008/04/12(土) 13:37:27ID:???自分も、するんだったらクエリ発行するしかないと思ってたんだけど、
使った事がないので書かなかった。
findでmax関数ってできるの?
0645nobodyさん
2008/04/12(土) 15:57:22ID:???$this->Model->find('all',array('fields'=>array('MAX(id)')));
>>644
<?php pr($post) ?>でいいよ
0646nobodyさん
2008/04/12(土) 16:42:32ID:???0647nobodyさん
2008/04/12(土) 19:44:31ID:???せっかく、CakePHPのデータベース用ドライバが、
RDBMS間の差を吸収しているのに
フレームワーク使っている意味半減するじゃん。
0648nobodyさん
2008/04/12(土) 21:28:23ID:???ある意味正解!だがまだ時代が追いついてきていない。
やっぱO/Rマッピングでは無理があるということだ
C#も3.0の言語仕様拡張で突き抜けた感があるしね
LINQとかラムダ式とかJavaの真似っこでない次元に到達した。
でも現状は糞言語PHPで本当に馬鹿みたいなコーディングするしかないけどな。
0650nobodyさん
2008/04/12(土) 21:53:16ID:???>> RDBMS間の差を吸収しているのに
一つのシステムに複数のRDBMSを跨ぐ様な事なんて殆どないけどな。
まぁ、極力queryを使わないほうがいいのは同意。
0651nobodyさん
2008/04/12(土) 21:55:24ID:???対応できるってことを言っているんだろ。馬鹿か。
0652nobodyさん
2008/04/12(土) 22:14:35ID:???0653nobodyさん
2008/04/12(土) 22:22:03ID:???0654nobodyさん
2008/04/12(土) 23:15:20ID:???割り切った設計で可能な限り使いやすさと速度の両立を目指すという
0655nobodyさん
2008/04/12(土) 23:24:15ID:???Zendに至ってはプレースホルダのSQL直発行がメイン
findごときで収まるクエリだけなら世話ねーの
0656nobodyさん
2008/04/13(日) 00:28:23ID:???Zendの場合、O/Rマッパーそのものがない。
あれはフレームワークというよりライブラリだから。
0657nobodyさん
2008/04/13(日) 11:48:16ID:???前々スレ744を参考に、$html->formTagでformタグを実装しようとしています。
ただ、検索文字列(this.search.valueの部分)に全角文字が入るため、エンコード(?)する必要が
あると思うのですが、その方法が分かりません。
やり方、もしくは、この単語でググればよい、というのを教えて下さい。
744 :nobodyさん:2007/09/15(土) 12:14:57 ID:???
> >>740
> こうですか?わかりません><
>
> $html->formTag('/post','get',array('onsubmit'=>'location.href=\'/post/\'+this.search.value;return false;'));
0658nobodyさん
2008/04/13(日) 13:07:44ID:???<input type="submit" value="検索">
入力欄は$html->inputなどを使う事
0659658
2008/04/13(日) 13:18:37ID:???だった。すいません
0660657
2008/04/13(日) 14:18:45ID:???ありがとうございます。
ただ、method=getなので、やりたかった事とはちょっと違うようで・・・。
いろいろ試したのですが、けっきょく、VIEW側は
<?php echo $html->formTag('/post/', 'get'); ?>
<input type="text" name="search" size="15">
<?php echo $html->submit('検索'); ?>
として、コントローラー側で
function search()
{
$keyword = $this->params['url']['search'];
(以下略)
として対処する事にしました。
0661nobodyさん
2008/04/13(日) 19:11:09ID:???同じコードで、いろんなデータベースに対応できるから極力queryを使わないほうがいいって言ってんだろ。馬鹿か。
0662nobodyさん
2008/04/14(月) 02:08:03ID:???それで、$formがまだよくわかっていないのですが、$form->radioで
1つ目にcheckedをつける場合、どのように指定すればいいのでしょうか?
<?php echo $form->radio('Bookmark.access',
array(1=>'公開','非公開'),
array('legend'=>false, 'separator'=>' ')); ?>
0663nobodyさん
2008/04/14(月) 11:45:13ID:???inputだとこんな感じ
<?php echo $form->input('Bookmark.access', array(
'options'=>array('1'=>'public','2'=>'private','3'=>'text'),
'type'=>'radio',
'legend'=>false,
'separator'=>' ',
'value'=>'3')); ?>
たぶん、radioでもvalueをつけるといけると思う。
0664nobodyさん
2008/04/14(月) 17:25:15ID:???入力エラーで戻ってきたときに、
また一つ目がチェックされるのよね。
0665nobodyさん
2008/04/15(火) 00:36:29ID:kB0aZEdAもし可能であれば、ACLのうまい活用の仕方もわかると嬉しいです
ペコリ
0666662
2008/04/15(火) 01:18:18ID:???inputの例を参考に、2つ目のarrayに'value'=>'1'を追加して、うまく行きました。
ありがとうございます。
0667nobodyさん
2008/04/16(水) 13:10:23ID:???0668nobodyさん
2008/04/16(水) 16:28:26ID:???そもそもshellsの中でコンポーネントを使うのが問題ではないのか?
コンポーネント = コントローラの汎用的処理、
つまり処理の内容はコントローラそのものなわけで、
シェルの中からコントローラを呼び出すというのがちょっと疑問な処理。
コントローラの処理にリダイレクトするという考えでrequestActionを
呼び出すという考えもありとは思うが、
そもそもそれはモデルにおくべき処理なのかも知れないぞ。
ちなみにシェルからモデルを扱うには、usesプロパティを使用するだけでOKだ!
0669nobodyさん
2008/04/17(木) 18:54:40ID:YR2rN8Sk俺の場合は、定期的にcronで叩いて、指定ディレクトリに生成された大量の一次データをDBに取り込む作業、とか。
0670nobodyさん
2008/04/17(木) 19:48:58ID:???オワタ
0671nobodyさん
2008/04/17(木) 21:32:22ID:???0672nobodyさん
2008/04/17(木) 21:35:44ID:???旧システム(フレームワーク未使用)から新システム(CakePHP)への
データコンバートに使った。
あとは簡易なツールかな。たとえば入力した単語の単数形⇔複数形 などをするツール。
0673nobodyさん
2008/04/17(木) 21:42:54ID:???これが釣りに見えるとは・・
おまえの知識がよくわかるわ
#sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
0674nobodyさん
2008/04/17(木) 22:03:43ID:???セキュリティを下げるというだけで、それ以外のまともな情報が何もない。
だから馬鹿にされるんだよ。
で、それのどこがセキュリティ下げてることになると思ってんの?w
互換性とセキュリティの違い、理解しようね。
0677nobodyさん
2008/04/18(金) 00:13:14ID:???これをコメントアウトすることによってセキュリティを甘くせざるを得ないわけよ
このモードをはずさないとcakeのコードからワーニングがでる。
cakeに潜んでるバグで作者は修正予定らしい
0678nobodyさん
2008/04/18(金) 00:16:50ID:???横レスですまんが、すっげぇ要するにMySQL5系の設定で
STRICT_TRANS_TABLESを指定していると、SQLの構文チェックを
厳密にするんだけど、このままだとCakePHPの吐くSQL自体でエラーが出るんよ。
んだから今の所は構文チェックを緩くしないとCakePHPが動作しないって事。
>>670の説明で分かった奴はエスパー。
0680nobodyさん
2008/04/18(金) 00:33:10ID:???0681nobodyさん
2008/04/18(金) 00:34:11ID:???2.リアルではおとなしいのにネット上では態度がでかい。
3.自分の意見で地球が動いてると思ってる。自分の意見はみんなの意見。
4.自分に非があってもスグ言い訳、逆切れ。他人を攻撃する。威嚇することで自分の弱さを隠している。
0684nobodyさん
2008/04/18(金) 01:18:11ID:???CakePHPのバグでもセキュリティの問題でもない。
0685nobodyさん
2008/04/18(金) 01:27:47ID:UgH30Z6mCakePHPとはスレ違いだし
0687nobodyさん
2008/04/18(金) 01:46:12ID:???Windows板でインストーラーを使ってインストールした場合のみ。
本当のデフォルトの値は厳密モードじゃありません。
いい加減Windowsは卒業しろよw
0688nobodyさん
2008/04/18(金) 02:46:06ID:???んーと、SQLインジェクションとか攻撃者が故意に行うものとは違うんだけど、
まぁ広義の意味でセキュリティの問題だとは思うよ。
つーのも、MySQL4系ってあれなのよ、予め決めたカラムの型よりデカいデータ食わせると
勝手に型に合わせてデータ削って無理やり挿入してくれちゃうのよ。
例えばvarchar(4)でカラム作ってそこに"unkotintin"ってデータ突っ込んでも、うんこしか保存されないわけ。
他にも''をNULLと解釈してくれたり、2008-02-31を許容してくれたりと
入力データに対して大変大らかな実装なんよね。
で、それってちょっとマズいだろ、入力データが型に合ってない=異常事態なんだから
強制保存すんな!ロールバックしろヴォケ!と思う人も当然いる訳で
そんな感じの背景があってMySQL5系から型チェックを厳しくするモードが実装されたと。
CakePHPの場合だと、INSERTする時にidの数字をauto_incrementに任せる訳だけど、
そこで発行されるSQLがid = ''って指定されてるから「そこ文字列入れる所じゃねーよ!」って怒られる。
んだからセキュリティホールよろしく第三者に直接叩かれるって心配はないよ。
余談だけど、STRICT_TRANS_TABLESはInnoDBとかトランザクションをサポートしてねーと使えねーべ。
MyISAMで構文チェックさせる時はSTRICT_ALL_TABLESなー。
0689nobodyさん
2008/04/18(金) 04:25:34ID:???0690nobodyさん
2008/04/18(金) 04:45:08ID:???今でもぼくは
.thtml 派。
0691nobodyさん
2008/04/18(金) 08:30:04ID:???1.1系から乗り換えた当初は.thtmlにこだわってたけど(てか気づかなかった…)
.ctpに切り替えたら1日で慣れた
やっぱり5文字の拡張子は長すぎるよね
0692nobodyさん
2008/04/18(金) 08:37:15ID:???だから広義の意味っつってんじゃん。日本語理解できてる?
Perlでコードの安全性を高めるためにuse strict;するのと一緒だよ
0696nobodyさん
2008/04/18(金) 15:39:38ID:???//入力画面
function form(){
}
//確認画面
function confirm(){
//バリデーションでエラーの場合、フォームに戻す
if(!$this->Form->validates($this->data)){
$this->set('data',$this->data);
$this->render('form');
}
}
//完了画面
function send(){
}
form.thtml
<?php echo $html->input('Form/name',array('value' => $data['Form']['name'])); ?>
の構成の場合、最初に form にアクセスすると $data['Form']['name'] がない!
とNoticeエラーが出てしまいます。
これって、 form() で初期化した $data を与えるしかないのでしょうか?
入力項目がいっぱいあるとめちゃくちゃ大変な気がするのですが…。
0697nobodyさん
2008/04/18(金) 16:19:29ID:???どのようにすればよいのでしょうか?
0698nobodyさん
2008/04/18(金) 18:21:08ID:???class Post extends AppModel {
protected $order = "Post.created DESC";
とかでfindしても駄目なんです。
0699698
2008/04/18(金) 18:21:29ID:???0700698
2008/04/18(金) 19:03:12ID:???0701nobodyさん
2008/04/18(金) 19:27:37ID:???0702nobodyさん
2008/04/18(金) 19:50:15ID:???function find_name_only($cond = "name like '%tarou%'"){
return $this->findAll($cond);
}
を書いてごまかしてみました。
ほかにいい方法があるのでしょうか?
0703nobodyさん
2008/04/18(金) 20:00:26ID:???まだ始めて2週間しかたってないけど。
form.thtml
<?php echo $html->input('Form/name'); ?>
で、どう?
あと、$this->set('data',$this->data); は、要らないとおも
0705697
2008/04/18(金) 21:22:22ID:???これは取り出した後で、PHPのcount関数で配列の要素数をカウント、ということでしょうか?
そうではなくて、
たとえばfindAllするときに取得順などにHasManyModelのカウント数を使いたいのですが。
質問の文章がわかりづらくて申し訳ありません;
よろしくお願いします。
0707697
2008/04/18(金) 21:47:07ID:???やはりそうですか;
せっかくフレームワークを使っているのでできればクエリは書きたくないですね・・・
UsersをPostsの多い順に並べ替える、など、結構よく登場すると思うのですが;
0708nobodyさん
2008/04/19(土) 01:00:18ID:???やってないけど、これは、findAllの条件にexistsなんたらって書いて
countだせばいいとだろうから、一応findAllは使えるな。
半分ぐらいしか意味ないけど。
0709nobodyさん
2008/04/19(土) 01:16:45ID:???それか、1回データを取り出した後で件数をキーにした連想配列に入れかえるのはどうでしょうか。
配列の添え字を、
$array[$count .' - ' .$id]
こんな感じにして配列をソートしたら出来そうですが。
0710nobodyさん
2008/04/19(土) 10:26:43ID:???> UsersをPostsの多い順に並べ替える、など、結構よく登場すると思うのですが;
ちょうど同じような事例を考えていた。
顧客とその顧客の取引データが一対多でつながっている場合に
取引が多い顧客を見たいと。
で、いろいろ考えたんだが、顧客数や取引が多くなると重くなりそうなので、
(だって内部的には顧客ごとにデータ数えて、その数でソートするんだろう!?)
非正規化することになるが、顧客データの中に取引数フィールドを作ることにした。
あとは取引データ保存時、つまりモデルのafterSave時に、
顧客テーブルの取引数フィールドをいじればいいと。
フレームワークを使っているとこういうトリガー的なことを
データベースに依存せずにやれるから良いね。
0711697
2008/04/19(土) 11:37:16ID:???奇遇です!
なるほど・・・あえて非正規化する、と。
手元にある参考書に
「処理効率を考えて、あえて非正規化することもある」
と書いてあった意味がわかりました。
たしかに、毎回自分でクエリ書くのに比べたら、
冗長なデータを持っておくくらい、なんてことないですね!
目からウロコでした!
0712nobodyさん
2008/04/19(土) 11:39:14ID:???0714nobodyさん
2008/04/19(土) 12:22:29ID:???0715nobodyさん
2008/04/19(土) 12:31:41ID:???function index() {
$data = "テスト";
$this->set('data', $data);
}
とやっただけで
Allowed memory size of xxx bytes exhausted ...
が出てしまいます;
CakePHP叩きではなく、本当に困っています。
対処法を教えてください。
0716nobodyさん
2008/04/19(土) 12:38:01ID:???その程度のコードで、そのエラーが出るときは、
基本的にバグだと思ったほうが良い。
まあ環境のせいもあるからとりあえず聞くけど、
OSとPHPのバージョンと、php.iniの設定(もしくはini_get('memory_limit'))の値)
function index() {
echo 'aaa';exit;
}
とやるとどうなるか。
index()以外のコードはどうなっているか。
0718715
2008/04/19(土) 12:47:34ID:???レスありがとうございます。
どうやらbakeで生成したビューをそのまま使っていたことが原因だったようです;
スレを汚してしまってすみません;;
0720nobodyさん
2008/04/19(土) 14:35:19ID:???依存PEARがうまく発見できないのですが、
どうすればよいのでしょうか?
php.iniのinclude_pathには
app/vendorsを追加してあります。
0721nobodyさん
2008/04/19(土) 17:44:54ID:???> じゃファイルベースでやりゃいいじゃん。やらない理由は?
フレームワークがファイルベースに対応していないから。
(読み書きできないということではなく、モデルが対応していないということ)
0722720
2008/04/19(土) 18:05:22ID:???事故解決しました。
0723nobodyさん
2008/04/19(土) 19:37:01ID:???ユーザが自由に選択することもできないってこと?
強制的にDB使用?
CakePHP糞FWすぎるwwwww
0724nobodyさん
2008/04/19(土) 20:20:16ID:???CakePHPで作られてるサイトで有名なところを見てみたいのですが、
教えていただけませんか?
たしかNiftyのなんかがCakeだと聞きましたが・・・
0725nobodyさん
2008/04/19(土) 21:00:48ID:???0726nobodyさん
2008/04/19(土) 23:46:04ID:???君頭大丈夫かね?
CakePHPは別にデータベースを使用する必要は無い。
ただデータベースを使ったほうが効率がいいだけだ。
それがファイルベースでやらない理由。
どうやら君は素人なのだろう。
0727nobodyさん
2008/04/20(日) 00:01:18ID:???非正規化は、一般的な業務システムでもよくやるな。
ただ、明らかに正規化をさぼってて、テーブルのカラム数が100個超えているのを
「性能を考えて非正規化している」と言い張る人はカンベンしてほしい。
あぁごめん。cakePHPの話から逸脱した。
>>723
どこか忘れたけど、コントローラあたりの設定で、DBを使わないようにもできたはず。
だれか補足頼むw
特殊な使い方でもしない限り、あんましメリットはなさそうだね。
0729nobodyさん
2008/04/20(日) 00:33:33ID:???0730nobodyさん
2008/04/20(日) 00:34:22ID:???CakePHPの方が実用的に見て優れているな。
0732nobodyさん
2008/04/20(日) 01:31:23ID:???だからDB使わない事もできるって。
デフォルト設定がDB使用になってるだけで、全然強制じゃない。
ttp://www.1x1.jp/blog/2007/08/cakephp_no_db.html
ファイルベースの設定方法は、わざわざ書かなくてもいいよね?
>730
CodeIgnitorを使いたい人は使えばいいし、CakePHPを使いたい人は
使えばいいし、それだけの事。
CodeIgnitorは機能が少ない分、実装がシンプルで軽いのが特徴なんだから、
機能的に足りていれば、そっちでもいいでしょ。
0733nobodyさん
2008/04/20(日) 01:35:00ID:???0734nobodyさん
2008/04/21(月) 16:11:05ID:Hc1e0Bqc俺のコードに問題がある可能性もあり。
1.2.0.6311-beta のデフォルトのセッション管理(ファイルベース?)
Configure::write('Session.save', 'cake');
のとき、同時に複数のアクセスがあるとロックされるかもしれない。
つまり、一つの目のアクセスで長い処理を行っていると
二つ目のアクセスがロックされ一つ目が終わるまで実行されない。
Session->read()で待たされる。
Configure::write('Session.save', 'database');にして
DBベースのセッションにするととりあえず回避できる。
関係ないとは思うがPostgreSQLの場合。
0735nobodyさん
2008/04/21(月) 16:34:17ID:???0736734
2008/04/21(月) 19:37:53ID:???アクセスしたユーザーはロックされるが
他の人(ようするにセッションファイルが違う人)は
ロックされないようだ
0737nobodyさん
2008/04/22(火) 13:08:38ID:???bakeで作ったコントローラをみると
$this->Session->setFlash(__('hogehoge.', true));
のようなコードがありますが
この__() や後ろのtrueは何を意味しているのでしょうか?
もしかするとcakePHPに限ったことではないかもしれませんが、
よろしくお願いします。
0738nobodyさん
2008/04/22(火) 15:52:58ID:???多言語化機能。
/app/locale/jpn/LC_MESSAGE とその周辺あたりに言語ファイル
.po や .mo を置くと、hogehogeが翻訳される。
多くはビューで使われるため、<?php __('hogehoge') ?> と簡便に書くことが出来るようになっている。
この場合、言語ファイルがあると、hogehogeが翻訳されて”出力”される。
第二引数にtrueを指定すると出力せずに戻り値として返すという意味。
これと似たやり方は、CakePHPだけでなく、PHP以外でも良く使われ
多くは _('hogehoge')という書き方をする。
PHPではgettext関数の別名として_()関数が使用できる。
http://jp.php.net/manual/ja/function.gettext.php
CakePHPではこのやり方を独自に拡張しており、
関数名がアンダーバー二つになっている。
0739nobodyさん
2008/04/22(火) 15:54:09ID:???1.ソースコードやビューの中の翻訳したい文字列を__('hogehoge')という書き方にする。
2.cake i18n extractツールを使うと、ソースコードの中から__()の部分を抽出、.potファイルを生成してくれる。
3.poeditなどのツールを使い、.potファイルを取り込み、.poを作る。
4..poを編集して翻訳リストを作っていく。
5.最後に.poを.moにコンパイルする。.moが最終的な翻訳ファイル。poeditの場合.poを保存したら.moも出来る。
6.新たに単語が増えたときは、2の手順で再度.potファイルを生成する。
7.poeditで今使っている.poに.potファイルを追加取り込みをする。ちゃんと差分だけが取り込まれる。削除された単語も.poファイルに残っている。
8.再度翻訳して保存。.moを作る。
ファイルの意味をまとめると、
.pot・・・単語のリスト(今現在使用している単語を抽出するテキストファイル)
.po・・・作業ファイル(過去に使用して、今は削除している単語の翻訳情報なども残っているテキストファイル)
.mo・・・翻訳ファイル(作業ファイルに残っているいろいろな無駄が取り除かれたバイナリファイル)
※ 実はCakePHPは .mo が無くても .po を直接翻訳ファイルとして使える。
0741737
2008/04/22(火) 18:43:22ID:???丁寧なレスをありがとうございます。
CakePHPにはまだまだ知らない機能があるんですね。
いろいろ楽しみです。
0742737
2008/04/22(火) 18:44:53ID:???マウスオーバーしないようにお願いします;;
0743739
2008/04/22(火) 18:56:32ID:???ドットで始まるファイルではなく、拡張子という意味で書いた。
デフォルトではdefault.poやdefault.mo になる。
それぞれのファイルのdefaultの部分を変更することも可能。
abc.mo の場合、その場合、__d('abc', 'hogehoge') という書き方で
出来ると思うがやったこと無いので/cake/basics.phpでもよんどくれ。
0744新参者
2008/04/23(水) 05:59:57ID:???メニューを選んで、表示し終わる前にサイト内検索する。(Specialofferとか)
http://www.islandcruises.com/
OS: WinXP sp2
Browser: IE7
CPU: Core2 6300
Memory: 2G
Service: xampp
CakePHP 1.2で開発中なので、こういうの見るとビビっちまう・・・
0745744
2008/04/23(水) 06:23:11ID:???キャッシュクリア後とかに、
zeroで検索するとハングしやすい。
firefoxだと大丈夫なので、IE7の仕業くさいな。
調べてくるか・・・
0746702
2008/04/24(木) 18:22:26ID:???の流れから結局、model内でfindAllをオーバライドしてみたがなんかアソシエーション組んでるほかのモデルまで影響しているような気がする・・。
function findAll($conditions=null, $fields=null, $order=null, $limit=null, $page=1, $recursive=null){
if(isset($conditions) && is_array($conditions)){
array_unshift($conditions,"name like '%" . USER_NAME . "%'");
}else{
$conditions = array("name like '%" . USER_NAME . "%'");
}
return parent::findAll($conditions, $fields, $order, $limit, $page, $recursive);
}
0749nobodyさん
2008/04/26(土) 13:26:12ID:???CakePHPの関数とか呼ぶ方法内ですかね?
具体的に言うと、もともとウェブサイトがCMSで構築されており、
新たにCakePHPを使ったウェブシステムを追加したわけですが、
そのCMSのページ上にCakePHPシステムの情報・・・会員ユーザー名などを
表示させたいのです。
0750nobodyさん
2008/04/26(土) 13:30:26ID:???0751nobodyさん
2008/04/26(土) 14:52:38ID:CCA4AGBq0752nobodyさん
2008/04/26(土) 21:38:26ID:Uwx0xpWGネットで検索すると、存在していないcssや画像ファイルがあると消え、
htaccessでの設定で回避できるということだった。
css、画像ファイルのパスと存在が正しいことを確認、
htaccessファイルの設定も修正してみたが、セッションはクリアされたまま。
たすけて。
0753nobodyさん
2008/04/26(土) 22:33:41ID:???CakePHPのバージョンはいくつ?
こんなのがあった。
ttp://cakephp.jp/modules/newbb/viewtopic.php?topic_id=817&forum=9
ちなみに、初めてセッションを使おうといろいろ調べてるんだけど、参考になる
サイトあったら情報きぼう。
とりあえずこのあたりを参照中。
ttp://cakephp.jp/doc/session.html
ttp://d.hatena.ne.jp/hetima/20070116/1168883397
ttp://d.hatena.ne.jp/hetima/20070201/1170313526
ttp://develop.ddo.jp/new-tech/php/framework/cakephp/memo/%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A7%E9%85%8D%E5%88%97%E3%81%AE%E5%88%A9%E7%94%A8%E6%96%B9%E6%B3%95
ttp://sand-man.blog.so-net.ne.jp/2007-06-26-1
0754753
2008/04/26(土) 22:35:08ID:???0755nobodyさん
2008/04/26(土) 22:37:46ID:???えーと、core.phpだっけ? セキュリティレベルを設定するところ。
あそこが一番高いと、接続するたびに、セッションIDが変更される。
だから途中でエラー?とかあると、サーバー側ではセッションIDの情報が変わっているのに
クライアントでは新しいセッションIDをもらきれておらず、セッションIDが切断=クリアされてしまう。
だから俺はセキュリティレベルを中にした。
0756755
2008/04/26(土) 22:41:33ID:???> slywalker 投稿日時: 2007-11-5 12:58
この人と同じこと。
0757nobodyさん
2008/04/26(土) 23:10:06ID:Uwx0xpWGセションをwriteした直後にreadしてみたら、ちゃんと設定されてるのは確認できたんですけどね。
次の画面でreadすると空になってる。ん〜困った。
0758nobodyさん
2008/04/26(土) 23:38:17ID:???セキュリティソフトとか。
0759nobodyさん
2008/04/26(土) 23:42:15ID:???確認するのはあまり意味無いよ。
なぜなら、情報が実際にセットされるのは
ブラウザにクッキー情報が返ってからだから。
ieHTTPHeadersやLive Http headers
ブラウザのクッキー情報を見るツールを使って
調べてみよう。
0760nobodyさん
2008/04/27(日) 00:07:57ID:???自分の使い方の問題もあるだろうけど、databaseがなんかうまくいかなかった。
0761nobodyさん
2008/04/27(日) 00:41:14ID:DD3/O3h6いま↓を見てるんだけど、aタグによるリンクで画面遷移させるので、
セッションIDを付加しないといけないことがわかった。
ttp://cakephp.jp/modules/newbb/viewtopic.php?topic_id=840&forum=3&post_id=1579
これからやってみます。
0762nobodyさん
2008/04/27(日) 02:40:18ID:???sqlのCASEはquery対処なんかなあ。$optionsでいけたりする?
0763761
2008/04/28(月) 00:00:23ID:???URLにセッションIDを付加する方法でやるしかない。
PCサイトの場合は、セッションハイジャックの危険性があるからURLへのセッションID付加は使えない。
結局、セッションを使わずcookieで運用する方法で実装しました。
本来の意味でのセッションではなく、単なるデータの引き継ぎ用途なので、cookieでよいかと。
0764nobodyさん
2008/04/28(月) 20:32:23ID:???ttp://pc11.2ch.net/test/read.cgi/php/1207863515/236-249
0765nobodyさん
2008/04/29(火) 00:30:20ID:???0766nobodyさん
2008/04/29(火) 00:50:53ID:???何かバグにぶち当たったのかもしれんけど、こんな風にいい逃げする
荒らしもいるしなぁ。
本当に困ってるのなら、具体的なバグ例を挙げてみるといいよ。
そしたら対処方法も出るかもしれないし。
話は変わるけど、前のレスでも出てたし、みんな知ってるのかもしれないけど、
このサイトいいね。参考になる。
テンプレに載せてもいいんじゃない?
ttp://bakery.cakephp.org
0767nobodyさん
2008/04/29(火) 02:39:08ID:???宣伝乙^^
0768nobodyさん
2008/05/01(木) 10:47:29ID:oWWm9vMD親のmodifiedを更新したいのですが、どのようにすればいいでしょうか?
子のデータ更新をするcontrollerでいっしょに更新しようとしたのですが、
上手くいきませんでした。
32 function edit($id = null)
33 {
34 $this->Response->id = $id;
35 $thread_id = $this->Response->field('thread_id');
36
37 if ($this->Response->saveField('cooking_name',$this->data['Response']['cooking_name']))
38 {
39 $this->Thread->saveField('modified',$this->data['Response']['modified']);
40 $this->redirect( '/responses/view/'. $thread_id . '#' . $id);
41 }
42 }
modelはこの通りです。
7 var $belongsTo = array('Thread' =>
8 array('className' => 'Thread',
9 'conditions' => '',
10 'order' => '',
11 'foreignKey' => 'thread_id'));
0771768
2008/05/02(金) 02:37:54ID:???39行の手前で、親の方にidを設定したところ、きちんと更新されました。
$this->Thread->id = $thread_id;
0773nobodyさん
2008/05/07(水) 00:15:31ID:ehDEto56展開したいのですが、どうすればいいでしょうか?
対応するコントローラもなさそうだし・・・。
0775773
2008/05/07(水) 00:29:55ID:???というと、複数のviewで使いたい場合は、各コントローラ、各アクションで
setするという事でしょうか?
あるいは、全てのコントローラの前に読み込まれる、共通コントローラみたいのが
あったりするのでしょうか。
0777nobodyさん
2008/05/07(水) 14:32:05ID:???0779773
2008/05/08(木) 01:09:40ID:???requestActionで取得する事にしました。
http://cakephp.jp/doc/ch07s02.html
/views/layouts/default.thtml
<?php echo $this->set('users', $this->requestAction('/users/getUserList'), array('return')); ?>
<p><?php $user_numbert = array_rand($this->viewVars['users']);
echo $this->viewVars['users'][$user_numbert]['User']['name']; ?></p>
0781nobodyさん
2008/05/08(木) 09:23:20ID:???function beforeRender() {
# ここに/users/getUserListの中身とかを
$this->set('user_numbert' , $user_numbert);
}
default.thtml
<?php e(h($user_numbert['User']['name'])) ?>
0782nobodyさん
2008/05/08(木) 09:34:15ID:???0783nobodyさん
2008/05/08(木) 19:24:13ID:???フォームの画面遷移のときのデータの持ち回り方について・・・
1.普通にhiddenで埋め込む
2.serializeしてbase64_encodeしたものをhiddenで埋め込む
3.serializeしてbase64_encodeしたものをセッションに書き込む
などが考えられますが、
CakePHP的には、どの方法がベターでしょうか?
0784773
2008/05/09(金) 01:55:42ID:???じゃないや、スマートな実装ができました。
どうもありがとうございました。
0787783
2008/05/09(金) 18:55:31ID:???すみません。よくわからないで書いてしまいました;;
シリアライズだけで十分ですか?
>>786
最終的にsaveするまえにしっかりバリデートすれば、それでも問題ないのかもしれませんね・・・
でもやっぱりソース見たときに、パスワードとかメールアドレスがもろに書いてあると、
このサイト大丈夫か??って気になりますが・・・
ちょっと気になったのですが、PEARのHTML_QuickForm_Controllerなんかは
どの方法なんでしょうか??
0788nobodyさん
2008/05/09(金) 20:19:38ID:???不満を言う余裕はあるくせに
戦争する暇もある
0789nobodyさん
2008/05/10(土) 00:11:55ID:???ソース見られたらっていうのは確かにある。
しかもそれを無理矢理改ざんして入力不可の文字を入力される可能性もある。
しかし、よほどのサイトじゃないとそこまでハッカーも暇じゃないから攻撃しないのでは?
と思います。
現に、ここ 5年ほど、何も問題ありませんでした。
0791nobodyさん
2008/05/10(土) 17:55:53ID:???セキュリティ目的ならbase64_encodeは用をなさないという認識。
>>789
データはhiddenで埋め込んでおいて、$this->dataをserialize後saltつけてハッシュ化したやつを別でhiddenに埋め込む
↑のふたつを比較して整合性チェックとか?
0792nobodyさん
2008/05/10(土) 18:59:59ID:???ばれてるぞ!
0793nobodyさん
2008/05/10(土) 19:29:59ID:???0794nobodyさん
2008/05/11(日) 11:28:50ID:qWqUPYxDと言いつつ、いつもこっちに書くのだけど・・・。
下の記事を参考に、携帯用ページを作っています。
ttp://www.1x1.jp/blog/2008/04/cakephp_12_routing_prefix.html
で、paginateでページングされているのですが、ひとつ問題が。
pagineateの結果、下のようにURLが生成されるのですが、
携帯エミュレータ(P1エミュレータを使用)で確認したところ、
どうやら「page:2」のセミコロンが、有効な値ではないとエラーになるっぽいです。
<a href="/~recipe/m/responses/view/page:2">2</a>
これって、どう対応すればいいのでしょう?
0795nobodyさん
2008/05/11(日) 12:01:33ID:???0796794
2008/05/11(日) 13:42:34ID:???Router::connectですね。
ふぉぉ、すぐに答えていただきありがとうございます!
PC側の方もちょっと調整が入りますが、おかげで解決しました!
0797nobodyさん
2008/05/12(月) 02:29:40ID:8yg2YXGeバリデーションルールが多様になったほかに、create時update時それぞれに有効無効に
できるなんてこと知ったのだけど、その他含めてちゃんとまとまった情報ってないかな
0798nobodyさん
2008/05/12(月) 18:22:39ID:???たとえば、
ログイン後にユーザーメニューからユーザ名の変更などを行った場合、
セッションには変更前のユーザ名が格納されているため、
ヘッダーなどに表示されている
「ようこそxxさん」のような表示が変わらない、ということになってしまいます。
いちおうの解決策としては、
セッションにはIDのみを格納しておいて、
app_controllerで
毎回、$this->User->findByIdしてセッションに記憶させるという方法をとっていますが、
あまりスマートではありません;
ユーザ名の変更処理の直後のみユーザ情報を取得しなおしたいのですが、
なにかよいアイデアはないでしょうか?
0800nobodyさん
2008/05/12(月) 22:27:51ID:???DBからデータをviewで表示するだけなら1.2でも大丈夫かな?
現在は1.1で運用中。
多言語対応が1.2でやりやすいのなら、1.2で作りかえるんだけど。
0801nobodyさん
2008/05/12(月) 22:35:05ID:???俺はやっちゃったw
半年ぐらいCakePHP使っていて、コアの中まで見てると
大丈夫なんじゃないかなぁと思う。
バグではないが、ベータ版だから仕様が変わるのが
ちょっとネック。
0802794
2008/05/13(火) 00:21:01ID:???いま、2ちゃんねるのレシピ集のサイトをCakePHP1.2で作ってます。
paginatorなどが使いたかったのと、バグっても差し支えないので。
で、ひとつバグらしきのに当たりました。
先に書いた通りのページを参考に、URLルーティングのprefixを使って
携帯用とPC用のページを作り分けしたのですが、この状態でpaginatorを使うと、
PC側のページで、$paginator->prev、nextで何故か携帯用のURL
(/m/:controller・・・)へ飛ばされる事象が。
prefixを設定する前は発生していませんでした。
原因は不明ですが、これまた何故か$paginator->optionsの設定次第で
事象が発生したりしなかったりするので、発生したPC用ぺージでは、
$paginator->options(array('url'=>array("test" => 'test')))
と、ダミーのURLオプションを追加してごまかしています。
0803nobodyさん
2008/05/13(火) 02:42:36ID:???乗り換えるべきかどうか迷う・・・
0804nobodyさん
2008/05/13(火) 13:48:12ID:???cakephp 1.1 も 1.2 も両方開発してアップしてますけど両方問題ないですよ。
ただ、モバイルサイトも作ろうと思えば 1.1 の wevservices が便利です。
0805nobodyさん
2008/05/13(火) 18:13:48ID:???0806nobodyさん
2008/05/13(火) 19:48:08ID:???最後にheaderでContent-typeなどを指定するわけですが、
controller.phpのheader(”location...とかぶってしまって、エラーが出てしまいます。
みなさんはどのように処理しているのでしょうか?
わかりずらくてすみません・・・;
0807nobodyさん
2008/05/13(火) 19:56:04ID:???わかるわかる。
<img src="hoge.php?=">
みたいなので読み出すやつでしょ?
僕はギブアップしましたね。
ttp://www.hideblog.net/thumbnails/
を使ってます。
0808806
2008/05/13(火) 20:02:52ID:???それです!
わかってもらえて安心しました。
リンク先のものは、キャッシュに保存してそれを表示する、というものでしょうか?
これはこれで便利ですが、やはりできればストレートに表示したいですね・・・
0809nobodyさん
2008/05/13(火) 22:25:09ID:Akbr9Dkjob_clean()はどうでしょう。
0810nobodyさん
2008/05/13(火) 22:27:45ID:???まったくもって意味がわかりませんが
たぶんこれで解決でしょう。
http://www.ideaxidea.com/archives/2008/01/cakephpcsv.html
0811nobodyさん
2008/05/14(水) 09:31:44ID:???たとえばタスクをステータス別に表示する場合
コントローラ側で、
$this->set('yet_tasks', $this->Task->findAllByStatus('yet'));
$this->set('done_tasks', $this->Task->findAllByStatus('done'));
のように二度取得するのと、
$this->set('tasks', $this->Task->findAll());
として、
ビューで
foreach ($tasks as $task) {
if ($task['Task']['status'] == 'yet') {
echo ....
とするのでは、
どちらのほうがパフォーマンスが優れているのでしょうか?
ご教授お願いします。
0812nobodyさん
2008/05/14(水) 09:48:17ID:???0813nobodyさん
2008/05/14(水) 09:49:25ID:XltYBCAy後者のほうは、、ビューにあまりそこまで複雑なロジックを記述することによるコードの効率の悪さ
という点でパフォーマンス難ありかも。
対象となるデータ量次第だけど、そこまでデータが多くなくてサーバのスペックが十分であれば前者の方が
コーディングは早いんじゃね?個人的な意見だけど。
0814nobodyさん
2008/05/14(水) 13:49:50ID:???>>809>>810
その方法は試してませんでした。
次回やってみようと思います。
ありがとうございます。
0815nobodyさん
2008/05/14(水) 14:46:18ID:???viewいじった方が早かったりするんで、
ついついやっちゃうんだよなぁ。
んで、気づいたらviewがえらいことにw
0816nobodyさん
2008/05/15(木) 00:40:28ID:???サーバー関連の知識が全くないのですが、
アプリ完成後の公開寸前で困らないためには、
CakePHPを選んでおいたほうが、すんなり公開できるでしょうか?
0817nobodyさん
2008/05/15(木) 00:57:18ID:???どっちも自分で試したほうがいいと思う。
俺は慣れてるからCake好きだけど。
最低限のアプリ作って鯖置くまで試してみる事をオススメする。
0818816
2008/05/15(木) 01:04:37ID:???レスありがとうございます。
Cakeならば格安のレンタルサーバで試してみることもできるのですが、
Rubyとなるとそこそこ値の張るところでないとダメみたいで、
それだけのお金を出して、設置できなかったとなると・・・
1.2の安定版ももうすぐみたいですし、
やっぱり初心者にはCakeなんですかねぇ・・・
0820nobodyさん
2008/05/15(木) 17:54:14ID:???むしろサーバーを管理できるかどうか。
http://www.fs-virtual.jp/spec/hikaku.html 945円/月〜
http://www.tsukaeru.net/plans/vps/ 2480円/月〜
http://www.ymc.ne.jp/service/managed/plan/index.html 4950円/月
0821nobodyさん
2008/05/15(木) 21:43:23ID:???☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・)< 1.2まだー?
\_/⊂ ⊂_)_ \_______
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
|  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :|
| .|/
0822nobodyさん
2008/05/19(月) 16:23:52ID:???http://dsi.vozibrale.com/articles/view/mediaview-is-a-bleeding-bastard
http://bin.cakephp.org/view/1026359650
を読む限り、特殊なファイルをダウンロードさせたいときとかに使うみたいだけど、
適当に読む限りファイルを出力するヘッダー情報の段階のことしか書かれていない。(あ、Viewの部分だから当然か)
おそらく、データーベースからグラフをGDとかでスクリプト側で作ったものを表示する場合なんかで
使うんだろうけど、このスクリプトで合成した画像のバイナリデーターはどのタイミングで、どこの関数に格納すればいいのやら?
0823877
2008/05/20(火) 09:40:48ID:xs/omlLeにアクセスするとhttp://IP/controller/indexが
デフォルトで実行されますけど、このアクションを変えるには
どうしたらいいですか?
0824nobodyさん
2008/05/20(火) 11:01:51ID:???http://cakephp.jp/doc/ch04s03.html
かな
0825nobodyさん
2008/05/20(火) 11:16:01ID:???絶対に手を入れるところ
推奨されているところ
とか
はまりポイント
とか
0826nobodyさん
2008/05/20(火) 11:38:08ID:???■絶対に手を入れるところ
・設定ファイルの変更(Warning出しながら動くけど)
# /app/config/core.php
define('DEBUG', 1);
→ Configure::Write('debug', 2);
→ Configure::write('Security.salt', 'your original string'); # add
・ヘルパー変更に伴い、view全般
非推奨または廃止されたもの
$html->input
$html->submit
$html->tagErrorMsg etc...
新たに強化・追加されたもの
FormHelper
PaginatorHelper
XMLHelper
■推奨されている
・validatesに引数を渡さない
$this->ModelName->validates($this->data);
→ $this->ModelName->data = $this->data['ModelName'];
→ $this->ModelName->validates();
・viewの拡張子
action_name.thtml
→ action_name.ctp
間違いあったら訂正よろしく
0827nobodyさん
2008/05/20(火) 13:22:09ID:???0828nobodyさん
2008/05/20(火) 19:13:39ID:???SELECT * from `Model` WHERE ( `Model`.`field_1` like '%xxx%' OR `Model`.`field_2` like '%xxx%' ) AND `field_3` = 'yyy';
みたいなSQLを発行したい場合の$conditionsの指定はどうしたら良いのでしょう?
また、
SELECT * from `Model` WHERE concat( `Model`.`field_1` , `Model`.`field_2` ) like '%xxx%';
というのも知りたいです。
0829nobodyさん
2008/05/20(火) 19:19:52ID:wZOYKZBI良い方法か参考ページがあったら教えて下さい。
0830nobodyさん
2008/05/21(水) 01:03:54ID:+T6Kz2/1その時点で候補から外れたね。
0832nobodyさん
2008/05/21(水) 01:57:45ID:???そんなに大変?
たしか、RoRでもあったと思うけど。
idとcreatedとmodifiedくらいしか意識した事ないけど、
他にもあるのかな?
0833nobodyさん
2008/05/21(水) 02:29:51ID:???0834nobodyさん
2008/05/21(水) 10:27:32ID:???name or title フィールドでgenarateListが自動的にidと配列を返す
あとは、xxx_id とか xxx_yyy とかのアソシエーション系かな?
いずれにせよCoCの理念に同調できない人はRoRをはじめとしたフレームワークは無理だわな。
RoRではなく、Cakeスレに書き込む>>830に乾杯
0835nobodyさん
2008/05/21(水) 12:50:06ID:???そういえばそんなものもあったね。1.2では
find('list')にかわるわけだけど。
ソース見たけど、1.2betaの段階では、フィールド名指定する方法
無かった気がする。なんでだろうね。
結局は、genarateListを1.2で動かしたときの警告の通り
find('all')の検索結果をSet::combine($results, $keyPath, $valuePath);
しているだけなんで、自分でやればいいんだけどね
> あとは、xxx_id とか xxx_yyy とかのアソシエーション系かな?
これはなぁ・・・みんな同じような名前のつけ方しない?
○○テーブルのIDなんだから○○_idって。
0836nobodyさん
2008/05/21(水) 18:07:50ID:???コントローラ名とかメソッドの名前とか考えるのホント嫌。かっこいい名前考えるセンス無くて。
0837nobodyさん
2008/05/21(水) 18:10:51ID:???0838nobodyさん
2008/05/21(水) 18:29:28ID:???非英語圏の俺涙目
0839nobodyさん
2008/05/21(水) 22:53:45ID:???あれ、こんなところに俺がいるぞ?w
最近、アルクで調べるようになって、ちょっと楽になった。
ttp://www.alc.co.jp/
カラム名は適当な英語でいいが、テーブル名はきちんとした英単語になってないと、
単複の変化がねぇ。。。
0840nobodyさん
2008/05/21(水) 22:58:34ID:???どうもウェブだと時間がかかる。
おれはMS Officeについていたbookshelfを使っている。
0841839
2008/05/21(水) 23:38:50ID:???Bookshelfか。懐かしいなぁ。
Bookshelfもいいんだけど、アルクは例文がいろいろ出てくるので、
そこがおすすめ。
たしかにローカルの方が速いけどね。
0843nobodyさん
2008/05/22(木) 09:57:07ID:???sqliteファイル(app/webroot/cake.sqlite)を用意してから
cake.phpを実行しているけどエラーメッセージが出て怒られる。
sqliteファイル(app/webroot/cake.sqlite)を
./cake.sqliteに移動してやると「Bake All complete」。
□エラーメッセージ
$ php cake/console/cake.php bake all Post
...
Error: Missing database table 'posts' for model 'Post'
□app/config/database.php
<?php
class DATABASE_CONFIG {
var $default = array(
'driver' => 'sqlite',
'persistent' => false,
'host' => 'localhost',
'port' => '',
'login' => '',
'password' => '',
'database' => 'cake.sqlite',
'schema' => '',
'prefix' => '',
'encoding' => ''
);
}
?>
0844nobodyさん
2008/05/22(木) 13:44:12ID:???Data : 複数形
Datum : Dataの単数形
CakePHPやるまで知らんかった。。。
0845始めるっす さん
2008/05/23(金) 16:47:14ID:b0nY9q6kCAKEを使う際、一番いい、IDEは?
http://www.asial.co.jp/vsphp/
↑は、どうですか? よろしくお願いしまっす(@^^)/~~~
0846nobodyさん
2008/05/23(金) 16:57:32ID:???0848nobodyさん
2008/05/23(金) 17:10:31ID:???ここは中2以下ばかりだったのか。
まあ、あおりはともかくとして、
この業界、Allow をアロー、Denyをデニーと発音する低脳が異常に多いよな。
ここまで自然言語の才能が乏しいと、プログラム言語をいくらがんばっても限界が低いだろうね。
0850始めるっす さん
2008/05/23(金) 17:35:52ID:b0nY9q6kいえ、業者の者ではありません(~_~;)
エクリプスのジャバーでしたが、CAKEを使うことになりました…
PDTとかも良いかなーと思いましたが、
ちと、芸が浅い(@_@。
何か良い、ツールを教えてくださいっす(^^)/~~~
0851nobodyさん
2008/05/23(金) 19:09:24ID:???セオはリスク管理できないから、
ダメーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー!!!!!!!!!
0852nobodyさん
2008/05/23(金) 22:56:00ID:???ハァハァ〜
0853nobodyさん
2008/05/24(土) 01:49:40ID:UmgGcxR0DBのトランザクション管理とかってどうやってる?
SpringとかのDI/AOPに代わる画期的な方法とかあるの?
0854nobodyさん
2008/05/24(土) 09:43:12ID:???0855nobodyさん
2008/05/24(土) 11:08:39ID:???※ちょっとスレ違いでゴメン。
DI/AOPを使えば、ロジック層の前後で自動的にトランザクションの
開始とコミットを行うように設定できる。
だからロジック層では特にトランザクションを意識しないで
純粋にロジックだけを記述できる。
もし、ロジック層で例外が発生した場合は自動でロールバックもしてくれる。
他にもログの記述とかオブジェクト指向では対応できない
横断的な処理はAOPの機能を使ってメソッドの呼び出しの前後で
自動的に挟み込んでくれたりできる。
ってな感じでやってるとDI/AOP無しのアプリはきついなーと
思うんだけど、そこら辺はうまいやり方があるのかね?
0856nobodyさん
2008/05/24(土) 21:23:01ID:???自然科学:Datum->Data
0857nobodyさん
2008/05/25(日) 00:56:50ID:???できるかどうかという話と、
実際にやるのかという話は別問題。
たしかにAOPを使えば、そういうことが言語レベルで出来るだろう。
だが、オブジェクト指向で作られていても
実際には、トランザクションやログなど、よく使われる場所で
処理を割り込ませることができるような設計になっているから問題ない。
0858nobodyさん
2008/05/25(日) 22:20:48ID:???そのcakephpってどうする?
1.プラグインとかコンポーネントとか残したまま再利用。
2.もっかい新しくcakephpをダウンロードして、プラグインとか入れ直す。
1だと、コードがどんどんぐちゃぐちゃになりそうだし、使わないコンポーネントとかも残る可能性がある。
2だとプラグインとか入れ直すのが面倒下さい。
僕的には1ですが、みなさんいかがでしょうか。
0860nobodyさん
2008/05/25(日) 23:45:46ID:???0861nobodyさん
2008/05/26(月) 09:21:10ID:???モデルは Post(記事) と Comment(コメント) です。
そして Post 一覧表示で Post 毎の Comment の数も同時に表示したいと思います。
この時、Comment の数はどのように算出するものなのでしょうか?
自分で思いつく範囲は次の通りでした。
1. Post 1つ毎に select count() from Comment where 〜 を発行する。
2. select * from Comment で全ての Comment を取得し、アプリ側で Post 毎に数をカウントする。
3. Post テーブルに count 列を用意し Comment 登録時にインクリメントする(非正規化)。
4. 3.の動作をトリガーで実現する。
このようなケースはよくあると思うのですが、一般的にはどのような方法が使われている
ものなのでしょうか?
0863nobodyさん
2008/05/26(月) 16:03:07ID:7/wrhW70ああ…突っ込んじゃったよ。ほっときゃいいのに。
0864nobodyさん
2008/05/26(月) 16:09:39ID:???自動的に任意の Comment が取得できるという、CakePHP 独自の仕様程度
にしか理解していませんでした。
もっと理解すれば上記の話はうまく解決できるという指摘でしょうか?できるだけ
データベースの負荷はかからないように設計したいと思っています。
もう少し調べてみます。ご指摘ありがとうございます。
0865nobodyさん
2008/05/26(月) 16:29:06ID:7/wrhW70>Post を1つ取得すると 自動的に任意の Comment が取得できるという、
ヒント:
$ret = $MyPost->find($id);
echo count($ret['Comment']);
0866nobodyさん
2008/05/26(月) 16:44:00ID:???ヒント、ありがとうございます!
>>862 で「ほっときゃいい」と言われるので、何か失礼なことを書いてしまったのか
と心配になっていました。
> $ret = $MyPost->find($id);
> echo count($ret['Comment']);
はい、上記で Comment の数が取得できるのは理解できます。ただ、この方法だと
総数だけを取得するのにその他のデータまで同時に取得してしまうため、データベース
への負荷が余計にかかるのではないかと心配だったのです。
また、1つの Post だけを取得するのなら上記の方法を採用するのですが、今回は
Post の一覧なのでその数が数百以上になることも考えられ、できるだけデータベースに
負荷のかからない方法を採用したいと思っています。
非正規系になってしまいますが、posts テーブルに count 列を持てば、たった一つの
SQL で実現できるなとは思ったのですが、これが一般的な方法なのかどうか判断が
つきませんでした。
これは CakePHP のお話ではなく SQL のスレの方が適切だったのでしょうか…。
0867nobodyさん
2008/05/26(月) 17:15:08ID:7/wrhW70つ echo $Count->findCount($hogehoge)
ただし、コードが多くて読みにくくなってもよいならば。
サーバのリソース次第だろうけど、>>865にしたところで速度的に雲泥の差があるとは思えないけどね。>>865の方が投げるSQLは一つで済んでるはずだし。
実際にコード書いてテストデータ突っ込んでみて、検証してみれば?
0868nobodyさん
2008/05/26(月) 17:45:04ID:???ありがとうございます。
そして了解しました。不慣れな初心者なもので時間はかかるかもしれませんが、
考えられうる全ての方法を実際に検証してみようと思います。
確かに Comment のような小さなデータの場合、find($id) で総数をアプリ側でカウント
するのと、findCount() でデータベースにカウントさせるのではそんなに変わらないかも
しれませんね。ただ、Comment がカラム数 100 もあるようなデータの場合で、常に Post
に対して数百も付属しているような場合だと結果は変わるような気がします。そのあたり
も含めて検証してみようと思います。
0869nobodyさん
2008/05/26(月) 18:37:58ID:???あるの?
0870nobodyさん
2008/05/26(月) 18:49:48ID:???https://trac.cakephp.org/ticket/4652
0871nobodyさん
2008/05/26(月) 19:38:42ID:???RORから使われているカウンターキャッシュという一般的な用語があったのですね。
ここをみて理解できました。
http://blog.matsimitsu.nl/code/163/cakephp-countercache
behaviorを使ってカウントをインクリメントするのですね。この方法が一般的な方法で
あるとわかっただけでも安心して使えそうです。色々とありがとうございました。
0872nobodyさん
2008/05/26(月) 20:20:41ID:???cakephp recursiveとかでググれ。変だから。
0873nobodyさん
2008/05/27(火) 01:20:24ID:Dti8RTlWクラス化してメソッドを細分化したときなんてとくに、recursiveのパターン数でメソッドを
さらに分解してしまうと大変なことになってしまう。
getPostWithComments() とかgetPostWithoutComments()とか。
0874nobodyさん
2008/05/27(火) 03:10:59ID:???0875nobodyさん
2008/05/27(火) 03:42:15ID:???適度で良いんだよそんなの。細分化うざい。Controllerでやれ。
それでもやっぱりビジネスロジックまとめたいというなら
modelとcontrollerの間にservice層入れる。
が、そんな規模のものはcakephpは想定してないんじゃないかね。
0876nobodyさん
2008/05/27(火) 13:21:52ID:???そういう問題じゃない。
getPostWithComments() とかgetPostWithoutComments()という
メソッドが出来てしまう問題はロジックを置く場所を変えても
どっちみち出来てしまうだろ。
これはrecursiveの違いでメソッドを作るか、
引数(プロパティ設定も含む)で指定するかの違いだよ。
関数作るのが嫌なら、getPost(withiCommentsを意味する引数);とするか
$this->プロパティ = withiCommentsを意味する値; getPost();
とするしかないんじゃね?
ビジネスロジックではなく、どこまでデータを拾ってビューに渡すかの処理と
考えれば、コントローラーで取得するデータの範囲を決めるのもまずくは無い。
0877nobodyさん
2008/05/27(火) 13:44:51ID:???CakeのModel拡張して、Withで同時に拾ってくるようなマジック関数入れると
もっと綺麗かなと思った。findBy的な。
0878nobodyさん
2008/05/27(火) 14:40:04ID:Dti8RTlW0879nobodyさん
2008/05/27(火) 18:20:37ID:???1.1しかいじってなかったのでピンとこなかったよ。
0880nobodyさん
2008/05/27(火) 23:04:56ID:???ビヘイビアですか・・・?
出来ないことは無いとは思うけど、
でもそれ、なんて名前のビヘイビアになるんだろう。
(名前がわかれば、ビヘイビアにするのが妥当か判断できる)
0881nobodyさん
2008/05/30(金) 15:00:54ID:xGH68yw0$model->create();
$model->save(data)
をしたとき、以下の二つのSQL文が発行される
1 INSERT INTO "models" (〜〜) VALUES (〜〜)
2 SELECT last_value AS max FROM "models_id_seq"
問題は、2行目、データをインサートしてから、シーケンスの最大値を取得している。
これは新たに作成された $model->id を取得する為だが、
この処理が二つのセッション(AとBとする)で同時に実行された場合、
A-1 INSERT INTO "models" (〜〜) VALUES (〜〜) //シーケンスの値が1になる
B-1 INSERT INTO "models" (〜〜) VALUES (〜〜) //シーケンスの値が2になる
A-2 SELECT last_value AS max FROM "models_id_seq" //本来は1であるはずが2を取得
B-2 SELECT last_value AS max FROM "models_id_seq" //2を取得
となる場合が発生し、A-2で取得される値が正しくない。
一日に数回しか注文が無いのに、たまたま同時刻の注文とその明細が一つずれたorz
(ベータ使っている俺が悪いんで、別に恨みませんけど。自社システムだし。)
これどうすればいいのかな? 単純にcurval()を使えばいいのかな?
MySQLに関しては、SELECT LAST_INSERT_ID() AS insertIDを使っているので
問題は無いはず。その他のデータベースまでは見ていない。
えーと、それからアカウント持っている人
だれか公式に英語で伝えてください。お願いします。
あと、説明これで間違って無いと思うけど自信は無い・・・
0882nobodyさん
2008/05/30(金) 15:33:24ID:???どういうこと? なんか別の問題でもある?
https://trac.cakephp.org/ticket/381 currval()になっている。
https://trac.cakephp.org/ticket/598 このパッチでmax()になった?
0883nobodyさん
2008/06/02(月) 22:09:13ID:???という夢を見たw
0884nobodyさん
2008/06/03(火) 15:08:24ID:s/VzyqcV取得できる値は、0と1である・・・という仕様なんでしょうかね?
データベースが、PostgreSQLの場合、't'が返ってきたり、
ソース見ると'TRUE'とかいう文字があったり、
ぜんぜん仕様がわからんのですが。
0885nobodyさん
2008/06/03(火) 17:13:31ID:???内部エンコーディングを sjis にしちゃうから文字化けするよね。
いつも新規作成 → 秀丸でutf-8変換 でやってんだけど。
で、現在、 あ とか 人文字だけ残したファイルをコピペしてんだけど。
なんかいい方法ない?
0886nobodyさん
2008/06/03(火) 17:44:40ID:???dreamweaverにデフォルトでUTF8と認識するってオプション無いの?
まあ、文字数が少なかったらどっちみち文字化けは
避けられないので、UTF8と認識するような文字をコメントで入れて
おくのが確実だと思うけど。
0887886
2008/06/03(火) 17:45:48ID:???0889nobodyさん
2008/06/03(火) 18:59:53ID:???ありがと!やっぱりそれしかなさそうだね。
>>888
仲間だ〜
で、教えてほしいんだけど、 eclipse と dw どっちが cakehp の開発効率あがりますか?
例えば、デザインは dw がいいけど、 PHPコーディングは eclips のが圧倒的にいいよ!
みたいな。
教えて頂ければ、幸いです。
0890nobodyさん
2008/06/03(火) 19:07:00ID:Mx/TsVoLそんなの人生いろいろ、人それぞれだろ。
0891884
2008/06/03(火) 19:11:03ID:???Boolean型を保存するときは、1やtrueなんかを適当に変換して保存。
呼び出すときは、データベースに入っているもの・・・というか
ネイティブなデータベースAPIで取得した値をそのまま返すってのが
今の動きなんだろうか?(PostgreSQLの場合、tとf)
正式版になったら、統一されるのかな?
データベースごとに戻ってくる値が違っていたりすると
ややこしいなぁ
0892nobodyさん
2008/06/03(火) 19:51:40ID:???0893nobodyさん
2008/06/03(火) 21:14:16ID:???ごめん、言っている意味がよくわからない。
とりあえず、findAllして戻ってきた値が、
MySQLとPostgreSQLで違うんだ。
そしてPostgreSQLの仕様では
http://itbtech.itboost.co.jp/man/postgres_man/datatype-boolean.html
> Example 3-1から見てお分かり頂けるように、
> boolean値の出力はtまたは fとなります。
PostgreSQLは頭悪いとしか思えない・・・
0894nobodyさん
2008/06/03(火) 21:45:23ID:7GPFTIgomodel内にbooleanで定義されてたらboolean入るもんじゃないのか?
http://grails.org/doc/1.0.x/ref/Domain%20Classes/findAllBy.html
0896nobodyさん
2008/06/03(火) 22:05:07ID:7GPFTIgo0897nobodyさん
2008/06/03(火) 22:08:23ID:???0898nobodyさん
2008/06/04(水) 07:01:51ID:???Java系スクリプト言語Groovy
http://pc11.2ch.net/test/read.cgi/tech/1080052050/
0899nobodyさん
2008/06/04(水) 18:11:13ID:???0900899
2008/06/04(水) 18:17:38ID:???ちなみにフォルダ切り替えっぽいのは発見しました。
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=309&forum=12
0901nobodyさん
2008/06/04(水) 18:36:13ID:???0903nobodyさん
2008/06/05(木) 10:53:07ID:???0904nobodyさん
2008/06/05(木) 11:16:40ID:???0905nobodyさん
2008/06/05(木) 12:19:28ID:???まとめサイトきぼん
0906nobodyさん
2008/06/05(木) 12:22:58ID:???0907nobodyさん
2008/06/05(木) 19:52:47ID:GvsgA2Ue良い、IDE、エディタは、何ですか?
0908nobodyさん
2008/06/05(木) 20:39:37ID:???0909nobodyさん
2008/06/06(金) 09:50:14ID:???とりあえずeclipse触っとけば?
0910nobodyさん
2008/06/06(金) 09:54:17ID:???0911nobodyさん
2008/06/06(金) 15:12:33ID:ejUDGIWKarray_intersect_key()が使えないとかいうエラーで動きません。
PHP4の環境なので確かにそんな関数は無いんですけど、PHP5にするしか無いんでしょうか?
0912nobodyさん
2008/06/06(金) 15:34:17ID:???cake/basics.phpに書いてあるようだけど。
CakePHPはPHP4でもPHP5の関数が使えるように独自で互換関数を実装している。
それがbasics.phpに書いてあるわけだけど。バグかな?
本来はCakePHPはPHP4で動くはずだと思うけど、こういうものもある。
CakePHPに限らず、PHP4でPHP5の関数を使いたいとき便利。
PHP 4.xでPHP 5.2/6.0の機能を実現する互換キット
http://phpspot.org/blog/archives/2007/08/php_4xphp_5260.html
http://upgradephp.berlios.de/
話変わるけど、1.2 RCは1.2.0.7119が出た後で1.2.0.7125がでているので注意ね。
詳細読んで無いけど。ちょっとミスっていたっぽい?
0913nobodyさん
2008/06/06(金) 16:29:33ID:???どうもです。なるほどそういう仕組みなんですね。バージョンは7125でした。
console/cake.phpからbasics.phpは呼ばれてはいるのでパスの設定とかは問題ないようです。
とりあえず、cake.phpの中にfunction array_intersect_key()をコピーしたら動きましたけど、
何なんだろ。
0914nobodyさん
2008/06/06(金) 20:44:57ID:???console\cake.php
156行:追加 require_once( CORE_PATH . 'cake' . DS . 'basics.php');
226行:変更 if (!require($inc)) { -> if (!require_once($inc)) {
でとりあえずbakeが起動した。
0915nobodyさん
2008/06/06(金) 23:24:32ID:???0916nobodyさん
2008/06/07(土) 18:20:03ID:???テストはtest_suite_付とかで二重にテーブル定義必要じゃん。
めんどくせー。あっcake schemaってのがあるじゃんって
cake schema使ってテーブル作ろうと思ったら、
PostgreSQLはまだちゃんと実装されてないのな・・・(´・ω・`)ショボーン
かろうじてテーブルの作成は出来るみたいだけど、
データベースからschema.phpの生成でプライマリキーの取得がおかしいわ
alter table系が動かないわ。
0917nobodyさん
2008/06/09(月) 09:35:03ID:???0918nobodyさん
2008/06/09(月) 11:50:00ID:???テーブルの作成を何度もやるのって面倒なんだよね。
prefixが変わるとテーブル名も変わる。
テストではprefixが変わるから違うテーブルで再作成。
DBMSが変わるとcreate文も微妙に変わる。
0919nobodyさん
2008/06/10(火) 16:59:11ID:???今は
<?php echo $html->link('カテゴリー2', array('controller' => 'posts', 'action' => 'index', 'category:2')); ?>
のように書いているのですが・・・
0920nobodyさん
2008/06/11(水) 01:07:33ID:???0921nobodyさん
2008/06/11(水) 23:19:17ID:Ox0RFxzt<?php echo $html->link('カテゴリー2', '/posts/index/category:2') ?>
じゃ、ダメなの?
0922nobodyさん
2008/06/12(木) 10:51:48ID:???<?php echo $html->link('カテゴリー2', array('controller' => 'posts', 'action' => 'index', 'category'=>'2')); ?>
じゃ、ダメなの?
0923nobodyさん
2008/06/12(木) 13:48:51ID:UzdM2zrv仕事でMySQL使って納品したのに、
MySQLのライセンス料払ってないだろ o9m
0924nobodyさん
2008/06/12(木) 13:58:17ID:???特定のときだけ、
validateの特定のルールをスルーさせたい場合、
どのように指定すれば良いのでしょうか?
0925nobodyさん
2008/06/12(木) 14:10:17ID:???validateの特定のルールをスルー
}
0929nobodyさん
2008/06/13(金) 00:03:46ID:VdaxJKXn0930nobodyさん
2008/06/13(金) 03:03:15ID:???ttp://dev.mysql.com/doc/refman/4.1/ja/using-the-mysql-software-for-free-under-gpl.html
>MySQL データベースソフトウェアを Web サーバとともに使用する場合(提供する製品でない限り)、商用ライセンスは不要である。MySQL サーバを使用する市販の Web サーバを実行する場合も、同様である。
つまり、Webサーバにインストールして使ってるMySQLに対して、CakePHPで作ったWebアプリ動作させるなら、MySQLはGPLでいいんじゃねぇの。
ttp://www-jp.mysql.com/about/legal/licensing/foss-exception.html
で、FLOSS。MySQLは、X11ライセンスで使えるのでCakePHPも問題なく使えるんじゃないのかね。
ついでに、Webサービスの場合、バイナリを配布しているわけじゃないので、サービスを利用する人間に対して
ソースコードの公開義務は発生しないんじゃない、なんてのは各所で書かれてる期がするけど。
0931nobodyさん
2008/06/13(金) 03:09:01ID:???0932nobodyさん
2008/06/13(金) 03:17:58ID:???納品するところにはソースコード渡すね。
まぁ、ソースコードだし、見て改変するのは自由だけど、
その改変されたプログラムを保守/サポートするかしないかは、契約書とかで別途記載することになるんじゃねーの。
0934nobodyさん
2008/06/13(金) 06:06:54ID:???0935nobodyさん
2008/06/13(金) 07:18:43ID:n3lmnd89たとえば、
PostとTagがhasAndBelongsToManyの関係にあるとして、
各々のTagが、それぞれ何回使用されているかを調べたいのですが、
どのような処理が考えられますでしょうか?
つまり、posts_tagsテーブルをtag_idでGROUP BYしてCOUNT(*)したような結果がほしいのですが・・・
(わかりづらくてすみません・・・)
よろしくお願いします。
0936nobodyさん
2008/06/13(金) 11:35:00ID:AIRweHgSGPLライセンスだったらソースコードは無償で提供しなければいけないんですが。
0937nobodyさん
2008/06/13(金) 11:59:03ID:???1.2への対応は大丈夫なんだろうか?
だいぶ仕様かわってるけど・・・
0938nobodyさん
2008/06/13(金) 13:50:59ID:???PHPで作ったアプリ納品するときに、ソースコードを提供しろって
自分言っていることの意味わかっているか?
PHPはバイナリというものが無く、ソースコードそのものが
実行ファイル繩稚で、そもそもソースコードで
提供することしか出来ませんからw
ウェブサービスのように、バイナリ(=ソースコード)を
利用者に提供していないのなら、ウェブサービスの利用者に
ソースコードを提供する義務が無いのは常識。
それがいやってんで、GPLv3が出来たんだよ。MySQLはGPLv2な。
ちなみにGPLに”無償”で提供するという決まりは無い。
0940nobodyさん
2008/06/13(金) 20:06:46ID:???各コントローラのbeforeFilterで
$this->components = array('hogehoge');
のようにしても、すでにコンポーネントの処理が終了しているらしく、
意味がありませんでした。
このような場合、どういう処理を書けばよいのでしょうか?
0942940
2008/06/13(金) 21:19:57ID:???レスありがとうございます。
それは各々のコントローラ(app_controllerでない)の__constructでいいのでしょうか?
ためしにPostControllerで
function __construct() {
parent::__construct();
$this->components = array();
}
として、
$this->componentsを見ると、ちゃんと空になっているのですが、
その後、
function beforeFilter() {
parent::beforeFilter();
pr($this);
}
とすると、
var $componentsで指定したコンポーネントのインスタンスが生成されてしまっています。
どうしてでしょうか・・・?
よろしくお願いします。
0943nobodyさん
2008/06/13(金) 21:35:55ID:???MAMP (10.4)でsql5.0、php5
以下のメッセージが出ます。
index.ctpはシェルからもOSからも該当の場所に存在することを確認しています。
document routesは/Users/hoge/Sites/です。
同じようなトラブルがあったことがあれば教えてください。
Missing View
Error: The view for ItemsController::index() was not found.
Error: Confirm you have created the file: /Users/hoge/Sites/gotcha/app/views/items/index.ctp
Notice: If you want to customize this error message, create app/views/errors/missing_view.ctp
0944nobodyさん
2008/06/13(金) 21:37:33ID:???Cake1.2です。
テーブルはitems(フィールドはid,contentのみ)
コントローラはItemsControllerのみ
モデルはItemのみ
チュートリアルに沿ってやっています。
0945nobodyさん
2008/06/13(金) 21:49:56ID:???0947nobodyさん
2008/06/13(金) 22:13:10ID:???MacOSX君の優秀な"拡張子を表示しない"オプションのおかげで
"index.ctp.html" -> "index.ctp"と表示されていただけでした。
お騒がせしました。
0948nobodyさん
2008/06/14(土) 00:19:58ID:???0949nobodyさん
2008/06/14(土) 00:30:13ID:???たしか、CakePHPはすばらしくも(おせっかい?)
AppControllerで指定したComponentsの値と
そのサブクラスで指定したComponents値を
マージしているのです。
普通はサブクラスのComponentsの値のみ
有効と考えるのが普通ですが、なんとCakePHPは
AppControllerのComponentsを取得してあわせるのです。
0950nobodyさん
2008/06/14(土) 03:51:42ID:???>
> 試さずにレスしますが、1.2RCからは比較演算子はカラム名の方に付けるようになったんじゃないかと。
>
> $conds = array('id =' => $user_id);
えー。cake_1.2.0.6311-beta では前のままだよねぇ?
理由はなんとなくわかるが、すごい変更だw
0951nobodyさん
2008/06/14(土) 13:39:47ID:???ちょっとお尋ねしますけど、
/cake/libs/model/model.phpのgetColumnTypeメソッド(881行目付近から)で、
if (strpos($column, '.')) {
list($model, $column) = explode('.', $column);
}
if ($model != $this->alias && isset($this->{$model})) {
return $this->{$model}->getColumnType($column);
}
という部分がありますが、これだと$columnに'.'がない場合、$modelはNullのままですよね?
で、$modelがNullのまま if ($model != $this->alias && isset($this->{$model})) { を通ると、
$this->Null ってことになるからエラーになりますよね?
Cannot access empty propertyて叱られます。
これって私がおかしなことをしているから、
$modelがNullになってしまうんでしょうか?
普通にやっていれば$modelはNullにならない?
もしNullがありえるならisset($this->{$model})は、
isset($model)とするべきだと思うんですが…。
どうか教えてください。エロい殿方。。
0952nobodyさん
2008/06/14(土) 16:08:54ID:???データベースを使わないモデルで
$form->createを実行すると
Fatal error: Call to a member function schema() on a non-object in
〜cake\libs\view\helpers\form.php on line 127
というエラーが発生してしまうのですが、
なにか対処法はないでしょうか?
0953nobodyさん
2008/06/15(日) 02:05:22ID:???sample?foo=1&bar=2
ではなくて、
sample/foo:1/bar:2
のようにしたいのですが、
何かよい方法はないでしょうか?
0954953
2008/06/15(日) 02:20:24ID:???できればredirect以外の方法がいいです。
よろしくお願いします。
0955nobodyさん
2008/06/15(日) 03:23:38ID:???リダイレクトするしかないんじゃね?
?〜&〜 で送られるのはブラウザの仕様だからどうしようもないし。
いや、?〜&〜 で送られてきたのを /〜/〜で送られたように
アクションの引数に入れる方法もあるのか?
ややこしくなりそうだけど。
自分は、GETで?〜=〜とかがあれば、/〜/〜に変換してリダイレクトする
コンポーネントを作ってAppControllerに入れている。
あと個人的な趣味だけど URL に : を入れたくなかったので、
:の代わりに=を使っている。sample/foo=1/bar=2
0956954
2008/06/15(日) 06:49:31ID:???なるほど、、あれは仕様だったんですね。
コンポーネント化するというのはいいアイデアですね。
それから、たしかに、パラメータの区切り文字に「コロン」って見かけませんね。
Cake標準のpaginateのページ送り用パラメータは「コロン」で区切られますが、
あの区切り文字を変更する方法はありますか?
0957nobodyさん
2008/06/15(日) 08:35:39ID:???0958nobodyさん
2008/06/15(日) 21:04:05ID:???queryを打つしかないのでしょうか。
0959nobodyさん
2008/06/15(日) 21:05:34ID:???0960nobodyさん
2008/06/16(月) 09:21:00ID:???引数なしでfindAllしたら、ちゃんとモデルCの内容は取れるかい?
0961nobodyさん
2008/06/16(月) 10:22:21ID:1xj3bjFoなこたわかってるよ。
システム開発の仕事って、そのソースコードを売って儲けてるんだろ?
0962nobodyさん
2008/06/16(月) 16:03:58ID:???>システム開発の仕事って、そのソースコードを売って儲けてるんだろ?
だから、どうだと言うのかと・・
自分でちょっとは調べて考える頭が無いんだったら帰ってくれ
あとMYSQLのライセンスについて議論したいんだったらMYSQLスレ行けばいいかと、皆さん簡潔に答えてくださりますよ。
http://pc11.2ch.net/test/read.cgi/db/1213319883/
0963nobodyさん
2008/06/16(月) 19:05:51ID:???> システム開発の仕事って、そのソースコードを売って儲けてるんだろ?
そうとは限りません。MySQLはどうやって儲けていると思う?w
0964nobodyさん
2008/06/16(月) 21:07:51ID:???取れます。
findAllすると、まずCをSELECTし、そのあとAをCとJOINしてSELECTしているようです
0965nobodyさん
2008/06/16(月) 23:13:47ID:???0966nobodyさん
2008/06/17(火) 03:18:46ID:???0967nobodyさん
2008/06/17(火) 09:03:45ID:???Cが取れるならアソシエーション設定はクリアできてると思うけど、
「まずCをSELECTし、そのあとAをCとJOINしてSELECT」するのが妙?
ウチだと
SELECT (略) FROM [Aのテーブル名] WHERE `A`.id`=1 (略)
SELECT (略) FROM [Cのテーブル名] JOIN [Bのテーブル名] ON ((略))
A→B→Cの順になる。
一応初心に戻ってjoinテーブルと外部キーの命名規則の確認を。
http://cakephp.jp/doc/ch06s04.html#id4803164
あとはfindAllの引数でrecursiveを明示してみるとか?
0968nobodyさん
2008/06/17(火) 12:29:54ID:???CakePHPは、設置が簡単過ぎてワロタ。
でも、いい本が無いね。
0969nobodyさん
2008/06/17(火) 12:42:49ID:???,、-──────-、
/ `ヽ、
/● .● \
/ ⌒ ▼ ⌒ \
/ 彡 ∵人∵ ミ \
/ ミ ミ ,r-ト-、
,' f /⌒ヽ!
,' i L、-、ヽ\
0970nobodyさん
2008/06/17(火) 15:00:09ID:???これから勉強しようと思うけど正式版で仕様変わったら萎える
0971nobodyさん
2008/06/17(火) 15:08:04ID:???0972nobodyさん
2008/06/17(火) 15:28:14ID:???0973nobodyさん
2008/06/17(火) 16:08:37ID:???$this->requestActionでadmin routingにできなくなったんだけど
こういう仕様になっちゃったのかな
困った
0975nobodyさん
2008/06/17(火) 16:48:38ID:???完全に時期がおかしいよね。
・・・まぁ、予約したけどw
0976nobodyさん
2008/06/17(火) 20:26:43ID:???Model内の$displayFieldに$belongsToで設定した別テーブルのカラムを
設定するにはどういう風に記述すれば良いでしょうか?
0978nobodyさん
2008/06/17(火) 22:25:25ID:???これから新しい安定版が出るって時に、
わざわざ古い方の解説書は買いたくない。
本棚にあるPHP4関連の本は、もはや軒並み時代遅れ。
0979nobodyさん
2008/06/17(火) 22:43:58ID:???フレームワークのコードは、varに::みたいなPHP4ばかりだろ。本当に意図不明だけどな。どこにPHP4の需要があるのか訊いてみたい。
0980nobodyさん
2008/06/17(火) 22:59:30ID:???ちょっと古めのサーバとかのサービスの追加更新とか?
レン鯖でPHP4まだ使ってるところもあるからそういうのにも対応できるとか?
まぁ、フレームワークも海外産のものばかりだし、海外の事情はどんななってんのか分からないから、
なんともいえないんじゃ。
開発開始もPHP4のサポート切れる話が出る前だったから、互換考えて作ったんじゃないの。
ある程度下位互換するし。
バージョンの違いすらも柔軟に対応できるってのもフレームワークとして、コンセプトが間違ってるとは思わないなぁ。
0981nobodyさん
2008/06/17(火) 23:00:00ID:???0982nobodyさん
2008/06/18(水) 00:56:10ID:???>バージョンの違いすらも柔軟に対応できる
いや、逆に、5に対応できてないからw
PHP5環境でPHP4の文法にトリッキーな小手先の技をちりばめたフレームワークを使うのがどれほど負担になってるか知らないだろw
0983nobodyさん
2008/06/18(水) 01:23:47ID:???0984nobodyさん
2008/06/18(水) 12:47:15ID:???別にぜんぜん負担になってないけどな。
自分で書く部分に関してはPHP5で書いて問題ないし。
さて、俺は、その「トリッキーな小手先の技」というものが
何を指しているのか知りたいわけだが。
0985nobodyさん
2008/06/18(水) 16:17:58ID:???0986nobodyさん
2008/06/19(木) 10:27:34ID:???0987nobodyさん
2008/06/19(木) 12:03:58ID:???ファイルのアップロードをするプログラムを書いているのだけれど、
アップロードされたファイルをDBではなくてストレージに(永続的に)保存する場合、
cakeのディレクトリ構造のどの中に入れるのが正しいのでしょうか?
それらのファイルはそのまま表示しないファイルなので、
外から見えないようにwebroot/files以外の場所で保管したいと考えています。
0988nobodyさん
2008/06/19(木) 12:55:35ID:???英語読めない・・・
0990nobodyさん
2008/06/19(木) 14:21:27ID:???0993nobodyさん
2008/06/19(木) 19:56:47ID:???まだ気が早いのでは
0994nobodyさん
2008/06/19(木) 21:48:59ID:???けっこういい感じ。
お〜こんな関数もあるか。って感じ。
少なくとも今まで出てきたcakephpの本よりは 1.2に対応している。
おすすめです。
0995nobodyさん
2008/06/19(木) 22:36:59ID:1PdTbWblおまいら教えて
0997nobodyさん
2008/06/20(金) 00:56:15ID:???本買って覚えるレベルの奴しかおらんからホッとした
どういう関数が使われてるかソース解析する方が
長い目で見れば早道だよ。
0998nobodyさん
2008/06/20(金) 00:57:58ID:???PHPにはよくある
0999nobodyさん
2008/06/20(金) 01:01:10ID:???過去の経験よりも、直近2年くらい死ぬほど努力してる奴が
はるかにレベルが上になる
1000nobodyさん
2008/06/20(金) 01:05:39ID:???それなら素人レベルからCakePHPを2年くらい
みっちり努力した方がはるかにレベルの高い技術者になる
なので、結局は毎日努力できる集中力だよな
今レベルが高くても、努力維持できなければ
2年後には金にならん技術者だ
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。