【PHP】フレームワーク CakePHP 3ホール目【本命】
1 :
nobodyさん :
2008/03/14(金) 15:16:00 ID:HF9x5ODX
>1 乙。
アソシエーションしたモデルをfindAllなどで持ってくると、 いろんな構造のデータになるけど、どんなパターンがあるのかな? ちょっと見にくいだろうけど、ありそうなのを組み合わせてみた。 この結果から、配列.Model.・・・、Model.Model.・・・、Model.field、Model.配列.field の パターンに大別できると思っている。 Model.配列.配列.field なんてのは無い。 そしてキーの先頭が大文字ならモデル名、数値なら配列、 先頭が小文字ならフィールド名と判別できると思っている。 Model::aliasとかあまり使ってないんだけど、これであってる? 何の為にこれを調べているかというと、アソシエーションでごっそり取ってきた 全データの中で、特定モデルの特定の型(たとえば日付)のフィールドだけ変換したいっていう場合に array_walk_recursiveみたいなのがあればやりやすくない?という話 その下調べ
4 :
3 :2008/03/14(金) 18:11:43 ID:???
array( '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', ) ), ), ) これに加えて一番上が配列で始まる事もある。
こういう学習コストを考慮しても、ありがたみがあるの?
学習コスト < 自分で考え設計し開発するコスト 長くやっている人は、すでに自分で考え設計し開発しているから、 学習コストのほうが高いように錯覚するかもしれないが 本来は、自分でやるほうがコストは大きい。
仕様書に機能追加や修正するだけの作業で1日が費やされた 最終的にこれをコードで処理してやらなければならないんだが どんだけ時間かかるんだろ怖いよ
貧乏暇無しや、この蟻地獄からなかなか抜け出せへん 気晴らしにコーラでも買いに行く
9 :
nobodyさん :2008/03/15(土) 08:17:47 ID:4Bb0W2wl
で、結局どれほどの負荷がかかるとメモリ食い潰す訳? アクセス数と処理内容は?
>>9 うるさいなぁ。
CakePHPはメモリ不足で落ちる。何をやっても落ちる。
それだけだよ。ソースはぐぐれ。
>>9 アクセス数とかじゃなくて、モデルのオブジェクトにしこたま
データを溜め込んだりする仕様になってるから、データ量が増えて
閾値をこえると落ちるって感じかなぁ。
初めはそんなこと考えなくてもいいと思うけど・・・
メモリの8Mリミットオーバーのエラーを見たのは ぶっちゃけCakePHPがはじめてw
こんな高負荷なものは自社で運営は間違ってもしない やるならCIを負荷を考慮して拡張していく
なんでこんな不完全なフレームワーク流行してんだよ。 流行て何でも肯定されちまうから怖いよな。 流行についていかねば、食えないから仕方ないけどな
で、結局、どういうコードを書けば落ちるんだよ。 その具体的がまったくないよね。 これじゃウソだと思われるのが当然だし、 仕方が無い話だよね。
>>15 > なんでこんな不完全なフレームワーク流行してんだよ。
世の中に完全なフレームワークは無い。
もしあったとしたら、そのフレームワークは
バージョンアップしない。
なんでメモリ不足で落ちるということを 信じてもらえないのだろう? 俺、何もしてないのに・・・
笑い殺すきかw 何もしていないから信じてもらえないんだろw メモリ不足で落ちるということを証明する義務があるのに、 それを証明しない、何もしないから信じてもらえない。
>>19 他人の作ったプログラム内でHello word書いて落ちるんだから
そう簡単には証明できねーよ、素人発言にも度が過ぎる
メモリオーバーのエラー文が出てるんだから 証明てエラー画面のキャプチャー画像とれってことか?w
20に同意 19はPHPのことあまり知らなさそうな感じが・・・
たしかにwの数と頭の悪さは比例するからな
自演ワロタw
>>20 そう簡単に証明できない?
なぜ? 簡単にメモリ不足になるんじゃなかったのか?
自分で言っていて矛盾に気づかない?
>>21 証明とは、他人がやっても再現できるだけの
コードや環境設定に決まっている。
Hello worldぐらいなら君でも掲示板にもかけるはずだが?
とりあえずphpinfo()と問題のコントローラだけ貼ってみ
「落ちる」を「俺は空を飛べる」に置き換えてみるとどうだろう。
>>25 証明とか言葉の使い方がおかしい
技術者の使う言葉じゃねーな
小学生がよく証明しろとか証拠みせろとかよくいうけど そのレベルだろうな
他人に作ってくれと言われるサイトだと、すんなりできあがるのに。 自分のサイトを作ろうと思うとこだわりすぎてなかなか開発が進まない。 大工さんは自分の家を建てようとするとこだわりすぎて会社がつぶれるってこともあるらしいけど。 わかりますかね?この気持ち。
遠まわし表現すぎてコミュニケーションレベルが激しく低いんですが
なんかめんどくさいから別の話して↓
インターバル2分以内わろた
PHP4でメモリ8MB(デフォルト)で作っているけど、 メモリ不足になったこと無いんだが? 作り方が悪いんじゃね?
すごいなこれw で、今は書き込みすぎですサルさん とか言うのが出て書き込めない? 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:???
そんな糞フレームワークなら、公開すらされなそうなもんだが、なんで世に出てるの? 開発元は認識してないバグなの?
セットアップして空のアクション実行してview(+layout)を表示する。 php 5.2.5 cake 467.5KB, symfony 674.6KB フレームワークとしてはデフォルトでこんなもんなんだから メモリ不足というのはアプリケーションの実装の問題だと思うのだが。 DB周りとか、大抵使われるアドオン・プラグインとかも含めないとなんとも言えないってのはあるけど。
フレームワークが糞なんじゃなくてメモリ不足云々言ってるやつが糞 メモリ不足とか言ってる香具師はどんな糞コード書いてるの?w
>>41 その数字はデバッグ出してんの?説明不足すぎやで
他人の書いたコード利用するくらいだから 42も含めて、みんな糞コードくレベルやろ CakePHPで糞コード書くとメモリ不足になる確率は高いわな
どう考えてもフレームワークが糞としか考えられん 相当に意識して糞コード書かないと8Mオーバーはむずいよ
メモリ不足ならんやつはレンタルサーバーでデフォでメモリ無制限なってんの気づけよw
そんなシビアに実装しないとメモリ不足になるんか ろくでもないフレームワークやな
初心者が無限ループ書きまくっても8M越えはむずいで
PHP5あたりからメモリ食うような仕様になってんか てことはPHP4つかってるやつだなメモリ不足おきんのは
PHP 5.2.1ではさらにリミットが128Mまで引き上げらたんだってよ! リミット8MのままPHP 5.2.1使えばメモリ不足になる可能性は高いわな
>>45 > 相当に意識して糞コード書かないと8Mオーバーはむずいよ
簡単だよ。
たとえば、8Mを超えるようなファイルを受信したり、
また出力すればいいだけ。
っていうか、もうすでに8Mにはならないという結論がでている
話なんかどうでもいいんだがね。
>>50 それが答えだろう。PHP5でメモリ使用量が大幅に増えて
それに伴って、デフォルトのリミット値も増えているのに、
PHP4からアップグレードしたとかでPHP4の設定のまま使っている奴が
メモリ不足と出ているだけ。
フレームワークではなく、PHPの問題。
> PHPの問題 ただしくは、PHPとそれを使っているユーザーの問題。
どうやら頭の中のメモリが不足してるヴォケが多いようだなw
43 :nobodyさん:2008/03/15(土) 21:06:39 ID:??? 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
あはは、どういうコードでメモリ不足と出るということを 記憶する脳のメモリもないということか。うまいなぁ。 メモリ不足にるというのなら、そのコードを覚えてここで書けよw
メモリ使用量で言えばsymfonyのほうが圧倒的に多い そしてsymfonyは処理速度も最悪
>>48 > 初心者が無限ループ書きまくっても8M越えはむずいで
お前はプログラミング素人だな。
そもそも無限ループじゃメモリ使用量は増えないだろ。
ループの中にメモリを消費していくコードが含まれていれば
メモリ使用量は増えるが、それだと難しいという話にはならない。
時間がたてばいずれ8Mを超える。
>>57 symfonyはCakePHPだと配列のデータが
オブジェクトになっているからね。
それは仕方が無い話。
アホしか書き込みせんから、時間の無駄じゃこのスレ
フレームワークが糞だから住人も糞が集まる これは仕方のないこと
CakePHPは使ってるやつは 脳内のメモリが不足してるという結論になりました
こんなメモリ食うフレームワークを採用してる有名サイトあるの?www どうでもいいクライアント用のフレームワークだろwww
>>65 CakePHPは使ってるやつは ×
CakePHPを使ってるやつは △
CakePHPを糞と言ってるやつは ○
脳内メモリが不足してくると日本語もおかしくなっているという法則
CakePHPて小規模フレームワークのくせに なんでsymfonyとメモリ不足量の競い合いしてんだよw
>>66 つ p://cakephp.seesaa.net/article/30805902.html
どうでもいいクライアントには丁度いいフレームワークだよ
すぐメモリ不足おこすのはCakePHPの問題だ どんな糞コード書いてても CakePHP以外でこんなこと今までおきなかった
脳内メモリが不足してる香具師は何でも他人の所為にする事しか出来ないようだな
>>71 じゃあそのCakePHPの場合だけ落ちるっていう糞コードをさっさと書けよボンクラ
どんだけ最低最悪な糞コード書いてても symfony,CI,mojaviは落ちなかったけど CakePHPだけはどんなコード書いてもすぐ落ちる 最悪なフレームワークです
>>73 脳内メモリが著しく枯渇してるモマエにはすぐ上に書いてある文章も読めないのか?(藁
CakePHPの採用サイトみたけど有名なとこはないな 信用の無いフレームワークですね
ひとりごとにやけにかみつくメモリ不足の方がおられますね
CakePHPだと小規模向けのサイトじゃないと無理か だったらCI使ってた方がいいやん 何なのCakePHPの存在意義て?
CI使ってみたいんだけどどんな感じ?
>>76 全世界の人間に見えるように書いてるもんに独り言も糞もあるかよw
さっさとCakePHPの場合だけ落ちるコードを書いてみろや
>>78 激しく糞。
つーか、ここでCIのことを語りだすやつは、
CakePHPがメモリ不足になりやすいとデマ流している奴だから。
CI厨、CakePHPに激しく嫉妬(笑)
CakePHPのメモリ不足をまだデマだと思ってるやつがいるなんて信じられん
デマという言葉がいやなら、 メモリ不足になるというコードがでていないのに、 メモリ不足になるというコードが存在すると主張している と言い換えてもいいけど? こっちなら間違ってないでしょ?
CI厨 必死(笑)
>>73 > どんだけ最低最悪な糞コード書いてても
> symfony,CI,mojaviは落ちなかったけど
常識で考えて、ありえない話。
メモリ制限8Mで10Mのデータをメモリに読み込むような
プログラムを書けば絶対落ちる。
マジレスしたらだめなのか?w
結論 Q : cakephp メモリ不足になるんですが ・他のフレームワークを使う ・フレームワークを使わずコーディングする ・ticket 投げてメモリを喰わないように cakephp を作ってもらう どれかを選らんで下さい。
ticketを投げようにも、再現コードがでていないから 投げようがないな。デマといわれて終わるだけだ。 悔しいなぁ。 なんで、なんでメモリ不足になるという 証拠がないんだよ! ありえない。 これじゃCakePHPを叩けない!
ticketだしますから、 メモリ不足になるという 再現コードお願いします。 それがないと信用してもらえません><
なんか必死に書き込んでるのがいるwww
再現コード厨きてんねw
はやく再現コードかきこんでねw
hello wordでもメモリ不足でおちる CakePHPはそういうフレームワーク
hello worldって何かしってるのかな? 知っていれば落ちるはずがないことがわかるはずなんだが。 それがわからないってことは馬鹿ということだよ。
大きすぎるうそは逆効果だと思うんだが(笑)
echo"92の必死ぶりがイタイデス"; これでメモリ不足で落ちます CakePHPはこんなフレームワークです 使うのはやめましょう。クライアントがかわいそうです
echo"92の必死ぶりがイタイデス"; ためしたけど落ちなかったよ。
だから何も書いてなくてもデバッグ出力すると落ちるんだよボケ!!
ためしたのかよw やる前から落ちないってわかるwww
レンタルサーバーで落ちるわけねーだろうがよ
何も書かないで、どうやってデバッグ出力なんかするの??? っていうかデバッグ出力するってどういうこと? 他のフレームワークと勘違いしてね? きっとそのフレームワークだよ。メモリ不足で落ちるというのは。
落ちないように業者が設定してくれてんの、わからんの?
103 :
nobodyさん :2008/03/16(日) 01:24:23 ID:EXDzIJ8M
あー。なんか面白いことになっているな。 メモリ不足で落ちるとはじめに言ったのは俺なんだが、 あれ勘違い。俺のバグだった。 で、それに便乗して落ちる落ちる言っている奴がいるのか?
だからCakePHPは使いものにならないんだよ
?
メモリ不足でよく落ちるから使いものにならんてこと
落ちないよ?
落ちなければこんなとこ書き込めねーよ
落ちてないけど、書き込めるよ?
おまえが落ちなくても俺は落ちてんだよ
お前も落ちてないよ
なんでこんなに糞なんだよ、メモリやけに使いやがって
糞じゃないよ。メモリも使わないよ。
hello word書いてメモリオーバーになったのは CakePHPがはじめてだよ
なんでこんなことになるん?
お前、メモリオーバーになってないよ。
>>115 CI厨のデマだからという結論らしいです。
CakePHP重いと思わんの?サクサクしてる?w
これで落ちなかったら俺の負けでいいよ。 class TestController extends AppController { var $name = 'Test'; function index() { echo 'Hello World'; } }
120 :
nobodyさん :2008/03/16(日) 01:33:58 ID:EXDzIJ8M
俺も落ちたね。
落ちなかった
墓穴?
103 名前:nobodyさん[] 投稿日:2008/03/16(日) 01:24:23 ID:EXDzIJ8M
あー。なんか面白いことになっているな。
メモリ不足で落ちるとはじめに言ったのは俺なんだが、
あれ勘違い。俺のバグだった。
で、それに便乗して落ちる落ちる言っている奴がいるのか?
120 名前:nobodyさん[] 投稿日:2008/03/16(日) 01:33:58 ID:EXDzIJ8M
>>119 マジ落ちたwwww
>>119 メモリ1GBのLinuxにPHP4.5を入れているが、落ちたよ。
とにかくhello wordだけでメモリ不足で落ちるのはホントだからな
絶対信じろよ
CakePHPはこんな糞フレームワークなんですよ! 結論がでたね
で、それにかわるフレームワークなんだが、 CodeIgnitor なんてどうかな?
CodeIgnitor。いいよね!
いいんだよ!!ね!ねって!
↓次の質問どうぞ
何この流れ。くだらねえ。
話し戻していいですか? アソシエーションしたモデルをfindAllなどで持ってくると、 いろんな構造のデータになるけど、どんなパターンがあるのかな? ちょっと見にくいだろうけど、ありそうなのを組み合わせてみた。 この結果から、配列.Model.・・・、Model.Model.・・・、Model.field、Model.配列.field の パターンに大別できると思っている。 Model.配列.配列.field なんてのは無い。 そしてキーの先頭が大文字ならモデル名、数値なら配列、 先頭が小文字ならフィールド名と判別できると思っている。 Model::aliasとかあまり使ってないんだけど、これであってる? 何の為にこれを調べているかというと、アソシエーションでごっそり取ってきた 全データの中で、特定モデルの特定の型(たとえば日付)のフィールドだけ変換したいっていう場合に array_walk_recursiveみたいなのがあればやりやすくない?という話 その下調べ
array( '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', ) ), ), ) これに加えて一番上が配列で始まる事もある。
落ちる落ちるってデマ情報流してるやつは何なの?
>>119-121 それで落ちるってphp.iniにどんな設定しとるんや?
まずは脳内メモリを増設したほうがいいんじゃね?(プ
>>135 脳内メモリ増設したいんやが、空きが無いんや
>>136 すでについとる容量の低いやつを全部外して
デュアルチャネル対応の容量大きいやつを増設したらええんや
そしたらCakeもサクサク、オマエの小汚い脳内もサックサク〜(* ^ー゚)
>>137 おまえはCPU変えた方がよさそうだなw
先輩方、マジ質問なんですが、自分はdreamweaver を使ってます。 ecripse って最近よく聞くんですが、 dreamweaver よりも開発効率いいんでしょうか。 よろしくお願いします。
Javaならエクリプス必須だけどPHPは秀丸で充分じゃね?関数少ないし。
>>119 私もこのコードを書いたら、彼女が出来ました!
ここいる住人は全員初心者ばっかりくせーw
146 :
nobodyさん :2008/03/17(月) 01:03:05 ID:BkHzbTOg
gzipの方のアーカイブって変なフォルダ入ってね?あれ何に使うの?
147 :
nobodyさん :2008/03/17(月) 01:06:46 ID:BkHzbTOg
>>119 落ちなくて困っているんだけど、どうすればいい?
結局CakePHPは糞フレームワークという結論でよろしいですね!
よろしいから、どっか行け、な。使わなくていいから。マジで。
このスレを見てたら大手が採用しない理由がわかってきたw
とりあえずCakePHPはよく落ちる糞フレームワークということを みんなで中小企業にアピールしようぜ。 そしてもう二度と同じ被害者を生まないためにも
嫉妬乙
いや、マジで駄目だから使わないほうがいい。 使うのは駄目な俺だけでいい。
この流れで落ちるとかいっても逆効果だろw 誰も信用してないよ。
モデルにバリデーションとアソシエーションをがっつり入れた 超みにくいよw
あぁ。だから俺はバリデーションをYAMLに書いて、 それを読み込むようにしている。
たった3日で150レスだと…?
>>158 その辺て自動でやってくれないんだっけ?
再編集のときの話だったら、データ構造を見て本来はDBから持ってくるデータを用意しておいてあげればいい
またはデータが無いと判断したときだけ、value入れればいいんじゃね
>>158 タイムリーだなw
俺も今同じようなことをやっていた。
最初はそのように、$form->inputに書いていたが、
同じようにダメだと気づいて、
コントローラで、(↓こんな感じ。適当に書く)
if(!empty($this->data)) {
if($this->Model->save($data)) {
・・・
} else {
・・・
}
} else {
$this->data['Model']['url'] = '
http:// ';
}
本当についさっき書いたコードなので、これで問題ないか深く考えていない。
コントローラでやることじゃないなー
165 :
nobodyさん :2008/03/17(月) 22:07:27 ID:6Wsl0FQ6
scaffoldでエラーが出るのですが、何が原因か教えてもらいたいです。 エラーの内容は 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のみのシンプルなものです。
>>162 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']));
168 :
nobodyさん :2008/03/17(月) 22:28:21 ID:6Wsl0FQ6
666:foreach ($objRegistryModel->_tableInfo->value as $tabl) { 801:foreach ($objRegistryModel->hasAndBelongsToMany as $relation => $relData) { でした。何なんでしょうか。アソシエーションでしょうか。
>>157 この辺りの辺、サンプルある?
もしあったら見せて欲しい。
昨日あたりからcakePHPを使い初めたのだけど、たしかにWebにあった
チュートリアルに沿って作ると、モデルがヴァリデーションだらけに
なりそうなので。
>>164 いちいちコード書かないとわからんのか
設計とかパターンとか学べ
>>164 一行レスとか煽りに一々反応すんなよ
荒れるだけだよ
つーかこんで良いんじゃねぇの?
controler
$url = ''
http://; $data = $this->Model->ほげほげ();
if (unko) {
$url = $data["url"]
}
$this->set('url',$url);
view
$form->input('TestUser.url', array('value'=>$url)
174 :
nobodyさん :2008/03/18(火) 09:45:05 ID:LdGu1qpa
>168のscaffoldの奴です。 bakeでいろんなテーブルを焼いてみると、まともに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の所は削除しても変わりませんでした。 心当たりのある方、助言お願いします。
ありえんとかいってないで、 自分のコードをかけよ。
初期値の設定は、前回入力値の設定と同じことなんだから コントローラで設定すべきだよな。 ビューはただ表示するだけ。
>>178 根拠の無い理由は自分の心の中でしまっとけな
>>177 167に書いたよ、この美しいコードに反論あるんか?
>>173 こんなコード書く奴がこのスレにいるとは
CakePHPの住人レベルて・・・
明らかにPHP初心者がCakePHPから始めましたみたいなのが多いな
>>173 を見て確信した
ああ。ガチだな。
最近10分以内に似たようなレスが連続で湧くな
じゃあアンケートとります。 フォームの初期値はどこで設定すべきでしょう。 1.コントローラ 2.ビュー 3.モデル 4.モデルに初期値情報が有り、それをコントローラが取得してビューに渡す 俺は4。面倒だとか、フォームによって初期値が違う場合は1
>>185 俺もビュー
管理するのが楽
コントローラーに書くとみにくくなる
ビューだと全くみにくくない、それどころか見通しがよくなる
>>185 モデルをこれ以上見にくくするのはよくないよ
バリデータ
アソシエーション
バリデータ関数
これだけでもずいぶん見にくいのに
コードの見渡しがよくなって 変更が楽な場所がベスト
>>185 初心者の多いここでアンケートとっても意味が無いけどなw
常識的に考えればビューだけど ここは初心者が多いからね
>>188 お前、まさか、それだけしかないんじゃないだろうな・・・
モデルは設定ファイルじゃないぞ。
ビジネスロジックを書く所がモデルだぞ。
ビューは基本的に表示のみを行う場所。 初期値をビューで設定するのは変。
194 :
173 :2008/03/18(火) 19:04:45 ID:???
確かにてきとーに書いた部分はあるが 何でダメなの?因みにcakeは1週間ぐらいしかやってない あとコントローラに初期値は ロジックとviewの分離等から考えると微妙だが めんどくさかったんだそこはごめんw
195 :
nobodyさん :2008/03/18(火) 19:29:58 ID:5PAxNly0
なんでここって初心者しかいないの?
なんでここって猿みたいに同じ事しか書けない人が多いの?
>>193 smartyだってテンプレート側で初期値いれらるようになってる
おまえの頭が変
>>193 携帯用サイト作るとわかると思うけどあんまりガンガン表示する内容まで
コントローラーで固めない方がいいよ。
携帯用サイト用の コントローラーまで作る羽目になるから。
セッションって $_SESSION[''][''] を直接使った方が早い感じがすんだけど、みんなどうしてます? やっぱり $this->Session->read を使った方がいいんですかね。
>>197 > smartyだってテンプレート側で初期値いれらるようになってる
入れられるようになっているからって、入れるべきということにはならないだろ?
モデルやコントローラ側で初期値入れられるようになっているんだしさ。
> 携帯用サイト用の コントローラーまで作る羽目になるから。
その理屈がよくわからん。初期値の話をしているのに
なんでもコントローラでやると拡大解釈してしてないか?
それにビューに書く場合、携帯用サイトとPC用サイトで分けるもんだから、
ビューに初期値を書いたら、コードが重複するじゃん。
だからビューだけはありえない。そう思わないか?
ちなみに、おれは初期値はモデルに書くもんだと思っているが。
>>199 オブジェクトで呼んだ方がオーバーライドもできるし
後から制御するのが楽
柔軟な制御をするためにデータはオブジェクト経由で呼ぶべき オブジェクトで呼ぶことに意味がある それは、オブジェクトにはいってるデータを 外から制御できるからだ
>>201 >>202 cakephp やってて
「意味あるのかな・・・」と思ってましたけど、やっぱり意味があったんですね。
勉強になります。ありがとうございます。
例えばCakePHPでブログシステムを作るとして、 ユーザ(usersテーブル)、投稿(commentsテーブル)が一対多の 関係にある時、あるviewで、 ユーザ1 コメント1-1 コメント1-2 コメント1-3 ユーザ2 コメント2-1 コメント2-2 コメント2-3 ・ ・ という表示をさせたいのですが、view、controllerをどう書いてよいか悩んでいます。 modelで、hasManyリレーションを貼るところ迄は合っていますか? どこか、参考になるページがあれば教えて下さい。
UserモデルにはhasManyプロパティを作ってcommentsを持っていることを示す。 CommentモデルにはbelongsToプロパティを作って、usersに依存していることを示す。 コントローラのアクションでUserモデルからデータを引っ張ってくる アソシエーションによりCommentもくっついてくる。 コントローラのアクションで、引っ張ってきたデータを ビューに詰め替える。 ビューは渡されたデータをぐるぐるして表示する。
表示するユーザ数+1のクエリが発行されるからアクセス数の多い中規模〜大規模なサービスでは使えない。 この辺言及する人が少ないのはcakeユーザのレベルが低いからだろうか。
> 表示するユーザ数+1のクエリが発行されるから 何を言っているんだ? 自分のレベルが低いと告白しているのか?
>>206 だって、表示するユーザ数+1のクエリが発行されないから。
誰も指摘しないのは当たり前。
209 :
nobodyさん :2008/03/19(水) 23:03:06 ID:XOo5uLlV
>>205 返信ありがとうございます。
> コントローラのアクションでUserモデルからデータを引っ張ってくる
> アソシエーションによりCommentもくっついてくる。
なるほど。
きちんとリレーションを設定すれば、コントローラ側ではUserモデル
からデータを引っ張るだけで、芋づる式にcommentsを取れるんですね。
> ビューは渡されたデータをぐるぐるして表示する。
今、$usersをforeachで回してる状態なんですが、これを$usersと
$commentsの二重ループにすればオッケーですかね。
ちょっとやってみます。
>>206 論点がずれてませんか?
そもそも、具体的なアクセス数、H/Wの規模を示さないと意味のない
指摘じゃないでしょうか。
この方法だと中規模以上に向かないから、この方法を使うといいよ、
と言うのならまだ分かるのですが。
>>207 >>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) ...
belongsToじゃなくてhasManyのこと言ってるんだけど。 参照の方向が違う。
といわれてもなぁ、 hasmanyとかconditionsにどういうSQLで JOINするかをSQLの断片で書いているしなぁ。 JOINしているとわかりそうなものだがなぁ。
子はJOINできないじゃん。 結局「表示するユーザ数+1のクエリが発行される」が間違ってることは示せないんでしょ。 実際やってみてクエリログ見ればすぐ分かるはずなんだが。
>>210 素人乙!
観点がずれてるよPHPの基礎からやりなおしてね
1回のクエリで全てが補えることに超したことはない その代わり複雑なSQL文を書かないといけないから CakePHPの負荷よりも生産性というスタイルに合わないがな ループの中でクエリをぐるぐる発行しまくると負荷が高くなる
>>215 結局こういうのが出てくるのか・・・
ほんとバカばっかだなー
それじゃ論点がどうずれてるか説明もらってもいい?
210での発言にphpの基礎は全く関係ないから、それのほうが論点ずれてると思うのだが。
んで、実際お前のcakeではこの処理でどういうクエリが発行されんの?
>>209 よほどのことがない限り
ループの中にループは入れない方がいいよ
負荷がかかるからね。
CakePHPのおかげで とてつもなく負荷の高いシステムがたくさん世に出そうだな こりゃサーバー会社が儲かるな sakuraインターネット株でも買うか!
1.2のpaginate機能はつかえねーな 柔軟な制御ができん、 ページリンクに検索項目のパラメーター付加できない、というか できるけど、面倒なことしないとダメくさい ソート項目のパラメータは標準で付加できるようだが
221 :
209 :2008/03/20(木) 10:56:59 ID:mwRuCB98
>>218 私の技術力だと、二重ループ以外に実現する方法が思いつかないのですが、
他によい方法があったら教えてもらえますか?
ユーザ毎のコメントを表示する機能はパスするにしても、
同様にmasManyリレーションのテーブルを親子両方とも表示したい
機会はあると思うので。
負荷という意味では、masManyの定義でlimit=>10とする事で大量の子を
取得しないように、というのは心がけています。
>>219 もっと負荷の高いsymfonyもありますぜw
というか、プライマリーキーで データを取得することが 負荷が高いと思っているのかな? JOINの方がよっぽど負荷高いですぜ。
DB周りじゃないだろ多分
>>210 > お前らのcakeはこの時どういったクエリが発行されんの?
こういうクエリが発行されますがなにか?
select ... from users ... (id 1,3,5のユーザがヒットする)
select ... from comments where user_id in (1, 3, 5 ) ...
CakePHPのどんどん負荷をかけて生産性を上げなさいというスタイルが 自分の性格に合わない気がしてきた
まだ、例のアンチが常駐しているのかw CakePHPはメモリも食わないし、負荷も高くない。 生産性は高い。
アンケート 1.ページ送りの絞り込み条件パラメータをセッションで持たせている 2.ページ送りの絞り込み条件パラメータをURLの後ろに繋げてる(CakePHP1.1 paginate) 3.ページ送りの絞り込み条件パラメータをURLの後ろに繋げてる(CakePHP1.2 pagination)
>>228 4. 基本は3と同じだが、場合によってpagination等をオーバーライドして独自の条件を追加している。
>>227 矛盾してるな。それらは反比例の関係にあるからな
>>226 たしかに、
●自分の用途に合わせて、全てのコードとHTMLを一から作成したシステム
●作り込み部分は最小限にして、大半のコードはcakePHP任せにしたシステム
を比べると、負荷は、一から作成したシステムの方が、余分なものがない分、
軽くできるかもね。
まあそこはトレードオフの部分だから、自分に向いてないと思ったら、
cakePHP以外のやり方を模索すればいいと思うよ。
>>230 よくわからんが、いまどき生産性の悪いほうを
選びたいのか?
負荷が高いシステムを作っているところは どこでもフレームワークを使っている。
>>234 いまソースが手元に無くて忘れたが、CakePHP1.2でかなり改善された。
そういえば、そういうパラメータを”コントローラ”側で追加していたきもする。
コントローラーのpagination変数だったっけ?
pagination[モデル名]だっけ?
まあわすれた。
>>233 どちらかと言うと、「負荷が高いシステム」と言うより、
「大規模なシステム」はフレームワークを使ってるという感じじゃない?
そうしないと、コーディングや保守が大変だもんなあ。
結局は、昔からある速度重視でアセンブラ(生PHP)で書くか、 生産性重視で高級言語(フレームワーク)で書くかの話でしかないな
小規模フレームワークはCIが一番だと思うんだよね CakePHPは小規模フレームワークのクセにsymfonyと同レベルくらい負荷かかりすぎ
>>238 宿題。
それをデータで示してください。
つーか、何をもって小規模といっているのかわからん。
機能が少ないほうが早い。 機能と速度どっちをとるかだ。
>>239 10万stepまで 小規模
データは「CakePHP CodeIgniter ベンチマーク」でググれ
だめだな。CodeIgniter は小規模でしか使えない。
一番重要なモデルが貧弱すぎる。中規模以上ならCakePHPだな。
http://blogs.atanaka.biz/tanaka/index.php?itemid=691 ・フレームワークにありがちな、あまり使わない機能が削がれている
・フレームワークにありがちな、よく使う機能もけっこう削がれている。
・だから、ステップ数が他のPHPフレームワークと比べて格段に少ない。
・だから、実行速度が速い。(ベンチマークはこちら)
・フレームワーク自体が複雑なことをしようとしていないので、潜在バグの深刻さも小さい。(たぶん)
・マニュアルがかなり読みやすく、取っつきやすい。
・cakePHPには名前のインパクトには負ける。
・ZendFramework には格式の高さで負ける。
・MVCというよりは、VCだ。モデルはあくまでもおまけ的。
・PHPがそもそもテンプレート的なんだからテンプレートエンジンいらない、と考えているふしあり。(だから速い、と)
・でも、簡単な変数置き換えの簡易テンプレートはデフォルトでついてるし、Smartyとの連携もできる。
>>243 モデルはCIベースでオレオレ的に拡張した方がいい。
CakePHPの既存モデルにしっくり来ないから
まずコードが凄く見難い状態になる
結局バリデートにYAML使ったりと拡張しないいけない
小規模 CodeIgniter 中規模 CakePHP 大規模 Symfony これでいいじゃん
小規模 CI 中規模 CI 大規模 ここまできたらCIでいいや
CIのサクサク感を味わうと他のFWは使えない
viewの先頭でoptions()を使って追加文字列をセットしておけば、prev()やsort()等で追加の指定する必要なくなる $paginator->options(array('url'=>'hogehoge')) controllerでpaginate(モデル)した後のoptionsにセットしてもurlに展開される $this->params['paging'][モデル]['options']['hogeoge_key']='hogeoge_value' *この方法は裏技的な気がするけど、、、
痛いCI厨は自分のスレを盛り上げてこいよw わざわざCakePHPスレを盛り上げて乙
経験から言うと、どんなものでも「軽い!」という触れ込みでデビューしたものは、 最初は機能が少なくて、バージョンがあがるにつれて機能が追加され最終的には重くなるんだよな。 で、ほかと同等の機能を備えたときには、ほかと同等の重さになっている。
akelosスレなんてもっと(ry
>>251 hasManyアソシエーションでlimitを指定しないと確かに225のクエリになる。
ソース読んだらそのためのif文があった。これは知らなかった。サンクス
limit指定しないのが普通なのか・・・あと、なんでそういう実装にしてるんだろう。
limitでUserの件数絞るとしてもwhere user_id (1,3,5)はできると思うのだが。
間違えた。 > limitでUserの件数絞るとしても limitでCommentの件数絞るとしても
んー、Commentに対するlimitがある場合はそう実装するしかないのか。 バカじゃん俺。この振る舞いについてのドキュメントはどっかにあったのかな。 連投スマソ。
Cakeとは関係ないんですが、複数のモデルの処理(全部更新)を1個のトランザクションにするときってどう書いたらいいですか? コントローラーにこんな感じで書こうと思うのですがどうでしょうか。 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
confirmぺルパー作成完了
ぺルパーについてkwsk
バリデートのyaml化作業開始
265 :
nobodyさん :2008/03/22(土) 02:17:57 ID:rTbTxKR5
コンポーネントの中でモデルって使えるよね、$this->モデル名とかで。 コントローラにはあまり詳細な処理は書きたくない(つまり、大まかな流れだけ)ので、 具体的な処理はコンポーネントをこさえて、そちらで処理したいんだけど考え方あってるかな? たとえば、会員登録処理をするアプリを例にすると、UserRegisterComponentみたいなのを作って identify()やregister()、update()といったモデルを扱う処理を記述して、 コントローラーからはフォームの値の受け取りとコンポーネントをコネコネ使うこと、結果によって ビューを表示しわけるようなイメージです。 ソース書いて晒した方が早い?
>>265 > コントローラにはあまり詳細な処理は書きたくない
> 具体的な処理はコンポーネントをこさえて、そちらで処理したい
大事なのはこれらの明確な理由が何なのかってことだと思う。
その会員登録処理がシステムの他の部分からも必要になるならコンポーネントにした方がいいと思うよ。
もしくは他のアプリでも(ほぼ)そのまま使用できるなら。
あとはコントローラとモデル(DAO層)を分離することでテスタビリティを向上させたいとかかなぁ
例えばテストの時はモックコンポーネント使うようにすればデータベースがなくてもコントローラのテストができる。
267 :
265 :2008/03/22(土) 05:08:43 ID:rTbTxKR5
>>266 なるほど。コンポーネントで会員登録処理と思いついた理由は指摘のとおり他のアプリで
いつも同様のことを実装してるのでコンポーネント化してしまおうというのが一番の理由。
それにコントローラ内に細かい条件分岐や処理を書き始めるとものすごくコードが肥大して
メンテナンスがし難いし、もし今後会員登録のフローを同アプリケーションの別箇所でも使い
たいって仕様変更があっても対応しやすいかと。
でも、「会員登録(管理)コンポーネント」なんて作っちゃうとモデルやDBテーブルの構造が
かなり固定化&依存してしまうのがいやだなだ、と…(AuthComponentみたいにね)
それならばpluginにしちゃえば?って考えることもあるけど、pluginってあんまり使われてないし。
うーむ。
>>267 そんな恐ろしいほどにコードが肥大する。かつそれら共通利用する機会が多いなら
コンポーネント化しちゃいなよ
>>267 DBテーブルの構造がかなり固定化&依存
これ内容が会員登録だったらテーブル構造に依存しちゃうのやばいだろ?
会員認証なら固定依存しても、それほど問題ないけど
コンポーネントてそもそもDBテーブルの構造がかなり固定化&依存してしまうものなんだね
>>267 コンポーネント設計のポイントは、Plug-and-Playを可能にすることであり、独立性を高めることにある
重要となる設計要素は、インターフェースであり、注目すべきは設計要素間の依存関係だと思う
内部実装に依存しない形でコラボレーションをモデル化できるインターフェースが重要じゃないかな
コンポーネント化するということは、結局クラスをグループ化することだからね
クラス間の関連(集合-部分、汎化-特化)と依存関係を意識して設計しないと
物理的にはコンポーネント化したが、論理的にはひとつのシステム全体
ひとつの再利用単位として使わざるを得ないという状況が現れるから
この点で、依存関係の設計はかなり重要
>>266 モックコンポーネント
あまり聞かない、組み合わせだけどw
モックとコンポーネント入れ替えするものじゃないの?
モックンがどうかしたって?
273 :
nobodyさん :2008/03/22(土) 19:56:20 ID:rTbTxKR5
ちなみにCakePHPのプラグインを配布してるサイトをご存知ですか? 「配布できる」と書いてあるくせに、プラグイン配布サイトって見たことないやと思って。 「会員登録プラグイン」とかあるといいのになー 会員登録コンポーネントの件、結局ユーザーテーブルを分けて(users:ログインIDとパスワードだけ、user_profiles:その他のプロフィール項目) コンポーネントで固定化するのはusersテーブルを主にして、user_profilesの方はアプリケーション毎に 自由に定義できるような仕様でコンポーネントを書いてみようかと思っています。
>>271 そういうこと。テストの時はモックを使うようにする。
「コンポーネントのモック」って意味でモックコンポーネントって言った。
>>273 会員登録プラグイン
何度も使うような処理でも無いし面倒な処理でもないからなあ
個人的には確認画面やらページ送りやら何度も使う場面のあるプラグインもしくは
コンポーネントが欲しい
バリデートのyaml化作業完了 yamlの空白に少しはまった
>>278 ファンクションて何ですか?素人は書き込まないで下さい
280 :
278 :2008/03/23(日) 13:46:28 ID:9wMqWTzf
>>279 先に挙げたURLで、「Public Member Functions」と記述されていたので、
ファンクションと書かせてもらいました。
methodと言えばいいですか?
既存のものでいうと、findAllやsaveなどの事です。
ご存じでしたらお教え下さい。
>>280 こんなとこで聞くよりも自分でソース見た方が早くね?
282 :
nobodyさん :2008/03/23(日) 21:00:13 ID:xiSCrZA7
>>275 会員登録プラグイン、完成したら俺にくれ
>>282 いらねー。たぶん需要ない
会員登録なんてすぐ作れるやんwww
>>278 カラム単位の更新でいいなら、saveField。
$this->Post->id = $id;
$this->Post->saveField('Address', 'Hokkaido');
いらなきゃ使わなきゃいいじゃん。 小さい車輪だろうが再開発をしなくて済むなら助かる。
再開発する機会が少ない。激しく無駄 そうじゃなければ、すでに作ってる人たくさんいるよ
ほんとにいらなければ何もコメントしないので、たぶん荒らし。 スルー推奨。 しばらく前、本やWebを参考にRoRを使っていたが、cakePHPの方が 使いやすい。 ひょっとしたら、RoRでActiveRecordとかに若干慣れたので、 馴染みやすかっただけかもしんないけど。
288 :
nobodyさん :2008/03/24(月) 00:22:17 ID:gAnd/HKb
Cakeのプラグインって、なにか有名なのってあったっけ なんのためにプラ銀機能なんて実装されてんの?
都道府県データどこにいれてる?
コントローラ全体じゃなくてメソッド単位でヘルパー、コンポーネント呼び出すにはどうすればいい? 会員登録ページのメソッドにアクセスしてるにもかかわらず コントローラでPaginationコンポーネントを定義していれば ページ処理の関わるクラスがnewされるんでしょ
ヘルパーは細かく考えずにコントローラ単位で呼び出すのがCake流 コンポーネントやモデルはヘルパーに比べればメソッド単位で呼び出しやすいけど こっちも深く考えずにコントローラ単位で呼び出すんだ 多分
例えばググレカスアクションでほげヘルパーを呼び出す場合 function gugurekasu() { App::import('Helper', 'Hoge'); $ajax = new HogeHelper(); }
まあ、そんなに特定のアクションでだけ ヘルパーとか呼び出したいのなら、 そういうコンポーネントを作ればいいんじゃないのかな? コンストラクタあたりで、url見てごにゃごちゃすれば出来るでしょう?
>>292 ネーミングが中途半端だな
HogeHelperだけ普通やん
>>294 むしろ$ajaxに突っ込んで欲しかったな
296 :
nobodyさん :2008/03/25(火) 10:30:40 ID:Qe2AafnS
モデルってあんまりごちゃごちゃ書きたくないよな、dbdesigner2cakeとか使ってるとメンテナンスの面からとく。 だからといってコントローラにごちゃごちゃとロジックを書き並べたくないので コンポーネントにすべてモデルを操作するカスタムメソッドを記述してます。 これって俺だけ?
>>297 ケーキがどうのこうのいおうが
自分の見やすい書き方が一番
たとえば1万step以下のコードなら
全部コントローラに書いた方がいい、みたいなね!
299 :
nobodyさん :2008/03/25(火) 10:55:58 ID:Qe2AafnS
>>297 3ページ目? こんなにモデルに書くもんかね…
俺だったらcとmの間のコンポーネントをずっしり書くな。別のプロジェクトにも使いまわしできるし。
コントローラだとほぼ、使いまわせないしな。
1万ステップコントローラにべた書きとかすごいね
>>296 コントローラに関する再利用性の高いメソッドはコンポーネント
モデルに関する再利用性の高いメソッドはビヘイビア
再利用性が高いロジックじゃないとダメ
そのロジックがコントローラ側かモデル側かどっちに属するかを間違えるとダメ
>>300 再利用性が無いなら
10万stepsでもコントローラにベタ書きするしかないよ
>>299 コンポーネントはコントローラとモデルの仲介役じゃねーよwww
>>299 みたいに再利用性の低いものまでコンポーネントはダメだろな
305 :
nobodyさん :2008/03/25(火) 11:13:20 ID:Qe2AafnS
ビヘイビヤって1.2からのやつだよね?
>>296 コンポーネントにすべてモデルを操作するカスタムメソッドを記述してます
これダメだろ?再利用性の高さとか無視してるやん
1.1てバリデーションのyaml化できないんでしょ それだけでもオワッテルw
都道府県データとか 男性・女性・オカマとか こういうセレクトに必要な初期データはどこへ入れるの?
>>307 spyc重くね?
>>308 とりあえずモデル作ってfind('list')呼んでセレクトボックスへ流す。
都道府県データなんてほぼ100%変更出ないからデータの中身は定数でもいいし
郵便番号検索とか使うアテがあるならデータベース使う。
中で何やってるかは置いといて、ともかくモデルから呼べる事が大事。
>>309 モデルのメソッドの中に都道府県データをいれて
呼び出してもOK?
もしくはDBからひっぱる、それ以外に方法はわからない
データ量の多い定数なら、別ファイルにして 呼び出すときにモデル経由でincludeして呼び出すのがいいのかな
>>309 > spyc重くね?
書くのはYAMLでもキャッシュとしてPHPのシリアライズデータに
変換してそれを読み込むから重くない。
>>298 ケーキを使っている以上ケーキ様の言うことは絶対です。
コンポーネントにいろいろ書くとどれだけテストが大変になるか。
>>308 > 男性・女性・オカマとか
これじゃ足りないな。
現在の肉体的性別 男・女
生まれたときの肉体的性別 男・女
現在の精神的性別 男・女
生まれたときの精神的性別 男・女
好きな性別 男・女・両方・肉体が男・肉体が女
まだ足りないかもな!
>>313 再利用できないものは
コントローラーにいろいろ書くしかない
ケーク様が何も用意してくれてないから
コンストラクタでぐにょぐにょしたいときは
コンストラクタ内で先に
parent::__construct();
を呼ばないとダメだよ
なぜ?て
それは
>>318 が答えてくれるはず
うんこちんちん
こんなに、解釈によって作り方が変わって来ちゃうなら、フレームワークの「良い意味での縛り」のメリットが無いね。 それぞれが間違いとも正解とも言えないから余計めんどくさい。 もっと縛りがキツければ良いのに。
321 :
nobodyさん :2008/03/25(火) 18:24:02 ID:Qe2AafnS
ビヘイビアのうまい使い分けがわかんないー Emailコンポーネントと連携して"emailable=1"を判別してメールするビヘイビアだとか、 ソフトデリート(=削除フラグ=1を削除)を実装したビヘイビアとかのサンプルは目にした んだけど、もっと実践に役立つ使い道ってどんな風なの??
俺が作っているやつでは、「自動入力フィールド」をビヘイビアでやっている。 ユーザーが入力した情報を加工したものを別フィールドに自動的に保存する。 データベースのセオリーからいえば計算で求められる物なのでビューやトリガーを使うところだが、 パフォーマンスを重視&汎用性を高めるためにこうしている。 あとどこかでぐぐって見つけた画像を保存するビヘイビア。 あるテーブルに保存したら、自動的にほかのテーブルにメタ情報を保存するビヘイビア つまりトリガーの代わりだね。 文字コード変換ビヘイビア 仕様が変わって使っていないが、一つのフィールドに複数の値を入れられる配列型フィールドを作るビヘイビア。 (一対多のテーブルを作れというなよ?そんなJOINが発生する重い処理を作りたくないこともあるんだ。 SQL99 で標準規格化されたしね。)それの応用でオブジェクト(シリアライズ)型 それともうひとつあるのだが、これはちょっとアイデア賞物だと思うので自分のブログで書きたいw 結構いろいろ使っているなw 総論としてデータベースの機能を拡張したいときに使っている。
>>322 日本語でおk
あいかわらず文章下手糞やなw
単純なことをわかりにくい表現するの好きやな
前スレから全く変わってねーな
>>322 結局cakeライブラリのモデルで実装されてる機能を少し拡張したいときに
ビヘイビアにいれてるんでしょ?
>>322 ユーザーが入力した情報を加工したものを別フィールドに自動的に保存する。
この自動的て具体的にどういう意味?
>>322 ユーザーが入力した情報を加工したものを別フィールドに自動的に保存する。
これは前スレで自作ヘルパーでやってなかったか?
パフォーマンスを重視&汎用性を高めるというのに具体的内容が欲しい
>>322 一つのフィールドに複数の値を入れられる配列型フィールド
SNSのような大規模サイトでもこれ使う機会なんて滅多にないんだが、何作ってんの?
>>322 配列型フィールドて
mysqlでも検索や集計はできるの?
>>322 配列型フィールドを使わない人にとっては
激しく必要のないビヘイビアじゃね?
>>322 それともうひとつあるのだが、これはちょっとアイデア賞物だと思うので自分のブログで書きたいw
恒例自慢きたこれw
なんだこの過剰反応ぶりw みるからに同一人物のようだが、 ただの使用例に必死すぎだろw
○○○を使わない人にとっては 激しく必要のない○○○じゃね? なんにでも当てはまるなw 無理やり反論しようとして滑ってる。
確かに同一人物だが、それが何か?
336 :
nobodyさん :2008/03/26(水) 04:38:16 ID:pkIggipT
CakePHPで開発するアプリを設計する際にUMLで書いてる人いる? シーケンス図やクラス図なんかどんな風に記述してるかとか見せてもらえると 参考になります。
>>336 UMLを使うと従来の方法より効率が落ちる時もある。
なぜなら、従来なら手書きで適当に書いてきた図をUMLでどうやって書けばいいのか調べなければならないから。
書き方が全部頭の中に入った後でなら従来よりスムーズに開発ができるようになるかもしれない
が、しかし、それまでは相当の苦労が必要w
オブジェクト指向開発とUMLとはまた別の話でUMLはオブジェクト指向開発の道具にすぎない
>>336 UML?時間の無駄だろ。そんなん書いてたら
工数オーバーするしで誰も喜ぶもんおらんで
C#やJAVAならわかるけどPHPでUMLて そんなクラスが複雑じゃないやん
そういう問題じゃねーだろw
>>339 確かにphpでUMLてぐぐったけどあまり無いな
そりゃぐぐったことが無いという人もいるだろう。 だがそれは個人の話であって統計的な意味は無い。 検索結果のほうがまだ意味があるな PHP UML の検索結果 約 957,000 件中 1 - 10 件目 (0.03 秒) Java UML の検索結果 約 593,000 件中 1 - 10 件目 (0.04 秒) C# UML の検索結果 約 404,000 件中 1 - 10 件目 (0.04 秒)
Cakephpと関係ない話すんなやボケどもが
なんでCakePHPにUMLの話が出るのかわからんw
俺はJavaをメインでやってるけどUMLは
複雑になってくるクラス間の関連性の構造の手助けとしてUMLを活用することが多い
だから
>>339 のいってるように複雑なクラスで無ければ必ずしもUMLが必要とは思わない
ユースケースは必ず書くけど、シーケンスみたいな実装よりの奴は 実装者が未熟な場合か、処理が複雑なときだけかな。 クラスダイアグラムはモデル限定でこれもテーブル構成が複雑なときだけ。 ユースケースは文書に起こして仕様書にするので必須。 PHPのクラスを自動生成してくれる奴なかったっけ? あれでCakeのモデルを自動的に管理してくれると楽かも...楽じゃないかw
UMLのクラス図ってようするに継承関係と関数定義(実装コード無し)を 書いているだけでしかないからなぁ。 それならコードで書いてコードからクラス図を自動生成したほうが楽。
Javaだとクラスが複雑になってしまうんだよね。 正確にはEJBを使った場合だが、同じものを作るにしても 無意味に複雑になりすぎる。 あれじゃあ、UMLが必要になるのもわかる。
350 :
nobodyさん :2008/03/26(水) 13:44:26 ID:ktIW9Uv7
ちょwww おまえら設計書も書かずに開発しちゃってるのかよ、涙がでるな。 それだから「できました」とかいいながらテストしたらバグ出まくりのプログラムなんか量産しちゃうんだよwwww UMLじゃなくてもいいが、実装前に詳細なロジックを書き起こしてからコードつくるのは常識だろ。 時間がかかる、めんどくさい、頭の中にもう仕様書書いてあるから、という奴に限ってたいした技術力じゃないんだよな。 設計書ってのはコーディング作業が楽になるだけでなく、チーム関係者との意識共有や、リリース後しばらくたってメンテが必要になった時に効果がでるもんだぜ。 プロとして仕事でやってるならば当たり前だと思ってるが、ここにはプロはいないのか?
楽譜の読めないミュージシャンもいるしな。
>>350 実装前に詳細なロジックを書き起こしてからコードつくるのは常識だろ
それお前だけの常識乙w
CakePHPのような小規模案件に無理があるぞお前w
>>350 どこの大手で働いてんだよCakePHPさわってる分際でw
>>350 CakePHPでいくらも稼げてねーくせにw
短納期で回転させるのがCakePHPのメリットなのに わざわざUMLとか工数伸びるだけやんけ そんなんで、ほんまに黒字になってんのかw
>>350 スレ違いながら言わせてもらうと・・
実際、開発しながら見えてくる事って多いよね。
キチンと設計や仕様固めが出来ないまま、見切りスタートを切ってしまうことも多々。
問題は、その仕様の追加、変更に対応出来るように設計する事だよ。
そうなんだーUMLって書かないんだ。 俺は書き方すら知らないけど。 作る前に一応メモに何をどうするかを書き出して、その通りに作ってくね。 あまりに自分の頭の中だけで作ると変数とか何を使ったかわからなくなったり。 イラレで仕様書とか作るのが激しくめんどい。 よって手書きで自分はやってます。
>ここにはプロはいないのか? w
え…設計フェーズ飛ばしていきなりコーディングに入るの?ギャグだろ?
最低限、要求定義書とユースケースとビジネスロジック(=モデル)の関係図とそれを基にしたスキーマ設計位は必要じゃねーの
打ち合わせ段階で作りまくるじゃん、そんなの
どやってクライアントのイチャモンに対応してるの?
>>357 イラレで仕様書とか正気?
パワポが激しくめんどくさい。 よって俺もexcel&イラレだな。
まあ、コーディング前の設計は 概要みたいなもんだからね。 たとえば関数をすべてコーディング前に列挙できるかといったらまず不可能 プロのプログラマはコードで設計するんだよ。 鉛筆で図を書くか、キーボードでコードで書くかの違い。
プロはソースにたくさんコメントを残す。
×プロはソースにたくさんコメントを残す。 ○プロはソースに意味のあるコメントを残す。
>>359 もっとプログラマと交流深めた方がいいよ
10分以内( ´,_ゝ`)
>>364 この人、確実に嫌われてるだろうな、プログラマに。
368 :
336 :2008/03/27(木) 00:00:03 ID:d9lPRB8S
370 :
336 :2008/03/27(木) 02:53:28 ID:d9lPRB8S
たとえばフォームにある省略可能な数値型の項目に
値を省略して(空文字で)データベースに保存した場合空文字でINSERTされる。
このときのどう保存されるか動作はデータベース依存であり
MySQLは0になり、PostgreSQLはエラーになる。
https://trac.cakephp.org/ticket/4233 チケットが出ていたみたいだが、修正無しでクローズ?
これ直る見込みないんかいな。確かに空文字とNULLは違うものだが
「データベースの省略可能な数値フィールド」ってのは
数値とNULLしか入れられないんだよね。
どうせNULLが入ったフィールドをModelから読み込むと
空文字になるんだし(あってるよね?)
NULLに変換して保存したほうが実用的だと思うんだけどなぁ。
データベース間の違いも吸収したほうがいいし。
beforeSaveあたりで書き換えるか・・・
>>371 それはCakePHPに限ったことでは無いから死んでこい
>>371 そんなどうでもいい作業するくらいなら
コンビニでバイトするよ
CakePHPのアソシエーションでBelongsToやhasOneを渡り歩いて 広範囲のテーブルから値を持ってくるにはどうすればいいんでしょうか SQLならLEFTJOINを繋げて行けば済むのですが 単純にrecursiveを増やしていくとクエリの量が異常に増えて困っています
最近低レベルの煽りしか返さない奴がいるなウザイ。 どうせ同一人物だろうからトリップつけてくれ。削除すっからさ。
>>375 低レベルの質問しかないから仕方ないこと
>>374 リファレンスみろよ
こんなとこで聞くなカス
>>377 アソシエーションが直接繋がっている関係なら資料は山ほどあるのですが
例えば4テーブル先まで繋がっているデータを手繰り寄せてくる場合、デバッグ情報を見ると
一旦findで取得してきた配列をforeachで回して一つ一つまたfindを使っているように見えます
結果、データ自体は取ってこれるもののSQLの発行数が異常な量になってしまいとても使う気になれません
SQLの発行を抑えつつもアソシエーションを柔軟に広げるためには、自前でqueryを使うしかないのでしょうか?
ユニットテストでfixturesの機能使っている人いる? var $fixtures = array(〜〜〜); こんな感じでfixturesをしているわけだけどさ、 なんかテーブルの生成のタイミングとか変じゃない? テストを単体で実行すると問題なく動くんだけど、 すべて実行するとテーブルが無いとか言われることがある。
>>370 adobe社のイラレだと思うけど。
>>375 わかる。人をバカにしてばっかだよな。あおってるやつ。
見てて気分悪い。
>>376 >>377 リファレンス見てわかるならそのURL教えてあげようよ。
しかも、聞いてる 374 はある程度知識あると思うよ。
もうちょっと人を思いやる気持ちを持とうよ。
>>379 質問の内容があまりにも素人すぎ
CakePHPばかにしてんのか?
誰も馬鹿にしてないから答えろよw
人をバカにすることで自分が上に立ったような感覚を味わいたいんだろうな
残念なやつが多い
>>379 その4テーブルはどんなリレーションなの?
で、今はどんなアソシエーションを記述してんの?
もしかしたらDB設計が悪いという可能性もある。
>>385 各フレームワークの評価目的でプロトタイプを作っていますので
特定のテーブルの再設計で問題を解決するアプローチでは応用範囲が非常に限られてしまいます
申し訳ありませんがCakePHP側での解決を求めています
例えばごく単純にモデルが
A→B→C→D
とbelongsToで数珠繋ぎにアソシエーションが設定されている場合
AのリストにB〜Dのデータを動的に付加して取得したいとすると
どのような指定をすればよいのでしょうか
SQLならJOINをただ書き連ねていけばいいのですが
>>386 CakePHPさわってどれくらい?
あまりにも初心者的な質問やめてくれる
スレ分けて欲しいな。CakePHP初心者スレ作ってよ
>>386 初心者が他人の力借りて簡単にCakePHP評価しようなんて
CakePHPなめすぎだろ?
自分で死ぬ思いでググれボケ
>>390 CakePHPの知識全くないくせに英語力を自慢がしたいの?
>>390 >>371 ここにいる馬鹿どもが、みんな英語わかると思ってんのか?w
さりげなくバカにしてるだろ
>>390 今調べて出来そうにないって。こういうケースはじめてなの?
経験浅すぎじゃね。1つのサイトをCakePHPで完成させたことないやろ
>>391 いや、これに関しての日本語の情報がなかなか見つからなかったから英語の記事を探さざるを得なかっただけ。
で、CakePHPの知識がある人はこれをどうやって解決してるんでしょうか?
>>390 どうして、できそうにないか具体的に日本語で説明しろ。わかったな命令だ
このスレ、なんか冗談だと思えるくらい殺伐としてんな w
>>396 何でだかアンチが混じっている。
で、cakePHPは重いとか、質問者を叩いたり。
無視推奨。
つか、アンチしてる人、cakePHPを無視すればいいのにね。
英語のサイト貼りつけて叩かれるのは初めて見たw 日本のサイトで分からなければ、海外サイトくらい見るだろ。 分からなければWeb翻訳すればいいんだしな
粘着気質で知性もないとか救いようがないな。 トリップの付け方も知らないらしいし、ほんと終わってんな。w
なんだこの流れ とてつもないバカが何人かいるな
>>390 まさしくそのtickets通りです
CakePHPは隣り合ったアソシエーション間ではJOINを繋いでSQLワンコールに最適化してくれますが
それ以上のテーブルをまたいだ関係を持とうとすると途端にクエリ量が増えてしまいます
個人的にrecursiveでアソシエーションの深度を指定する考え方は
好感が持てるのですが、負荷の高さを考えると使用をためらわざるを得ません
サブクエリをインテリジェントに挿入しろとは言いませんが
今回の様な使用頻度の高いと思われる(かつ、割と実装の想像しやすい)処理ならば
既に解決された方がいらっしゃるのかと質問に至りました
--
先ほどContainableBehaviorを試してみましたがクエリ量は変わりませんでした
やはりコアに直接手を加えないといけないようですね(´・ω・`)
A→Bのクエリ発行したときに モデルにB→Aのアソシエーションも記述してあると B→Aのクエリも発行される だから A→B→C→D のようなのをそのままやっちゃうと えらいことになる だから、いらいないアソシエーションはunbindModelでぶった切る あと、1.2だと発行クエリが1.1より最適化されている (つまり、少なくなってるってこと)
>>397 明らかにアンチじゃない奴のほうがたち悪いぞ。質問者叩いてるのもそう。
>>402 >>401 の問題解決にはならないんじゃない。B->Aのアソシエーションがなくても起こるから。
>>401 DBにview作れば早いと思うよ。
質問があまりにもバカすぎて・・・ レベル低いよな。 ここでアフォみたいな質問してるやつは CakePHPでサイト構築したことあるのかと聞きたいよ
あまりにもバカみたいな質問にバカみたいな回答が多すぎ もっと常識レベルでの会話して欲しいな 駄文ばっかで何の役にも立たないよ
もっと常識的な質問たのむ
かわいそうに
バッチ処理で長くかかる処理をやるのなら話は別だけど ウェブアプリなんて画面に表示する少ないデータを 表示するだけなんだからJOINしなくてもいいと思うんだけどね。 どうせ複雑なJOINならJOINするのにも負荷かかるわけだし。 ま、パフォーマンスと開発効率のトレードオフ。 どうしても必要なら、モデルに専用の検索メソッドでも作って 自分でクエリー書けばいいんじゃない?
もっと常識的な質問たのむ
411 :
nobodyさん :2008/03/28(金) 11:03:37 ID:q/btZ3WH
アンチがしつこくネガティブキャンペーンするのも CakePHPが人気になって普及してきた証拠かなぁw アンチじゃない人はIDだすようにするか? そうすればID出していない人はアンチってわかるし。 出したら出したで削除できるしw
アンチを勘違いしてると思うが いい質問には、マナーをもって接するが ろくでもないレスばっかりだからな
>>411 自治厨乙。
だいたいにして、IDなんていつでも変えれるんだから意味ないじゃん。
ろくでもないレスは無視するかマナーをもって 訂正を促すのが良い返答の仕方だよ。
415 :
nobodyさん :2008/03/28(金) 11:14:44 ID:q/btZ3WH
417 :
nobodyさん :2008/03/28(金) 11:57:59 ID:anJTbKap
>>409 もちろん速度を重視しなくてはならない場面ならば専用メソッド内でSQLを書きます
しかし、上記の様にシンプルなアソシエーションすら動作が怪しいとなると
フレームワーク自体に手を出して最適化させた方がコスト的にベターかなと思います
>>403 複雑なアソシエーションのパターンが出来上がってる時はView使った方がいいですね
今ふと考え付いたのですが、結合済みの仮想テーブルを作って、それを元に
CakePHP側のモデルを構築するアプローチは面白いかもしれません
#仮想テーブルへの更新作業はDB依存のため怪しい臭いはしますが
>>417 負荷を考えるならフレームワークやめろ
CakePHPなんてのは、どうでもいいクライアントに高速納品するための道具てことに気づけよバカ
>>417 今頃フレームワークの評価とか手を出すとか、どんだけ遅れてんだよ
この業界は進歩が早いの知ってる?
>>417 > 結合済みの仮想テーブルを作って、それを元にCakePHP側のモデルを構築する
view作ればって言ったのはそういうこと。
面白いかどうかはおいといて、現状の打開策としてはアリかなと思うわけです。
> 仮想テーブルへの更新作業はDB依存のため怪しい臭いはしますが
このDB依存は仕方ないと割り切ればいいんじゃないかな。割り切れるところだと思うし。
>>417 やる前にあれこれ聞かずにやってみろよ
こんなとこで解決できれば苦労しねーよクソが
評価なんてソース解析して自分で実際にサイト構築しないとわからねーよ やってくうちに想像しない難点が沢山でてくるよ
>>417 速度重視とか柔軟性考えるならCIにしろや
CakePHPを最適化させにくいフレームワーク 最適化したいならCIスレにいって、このスレからでていけや
っていうかJOINにならないというのは どのフレームワークでも同じこと。 CIでもSymfonyでもRubyOnRailsでも同じだよ。 特にCIは最悪だね。いろんな意味で。 ここではすれ違いだから言わないけど。
>>426 どのフレームワークも同じなら軽量でサクサク動作するCIの方がマシ
>>417 > しかし、上記の様にシンプルなアソシエーションすら動作が怪しいとなると
シンプルではないよ。
CakePHPでもその他でもそうだけどO/Rマッピングというのは
従来の表形式の使いづらいリレーショナルデータベースを
高レベルに扱いやすく使えるようにするもの。
リレーショナルデータベースを基本に設計されたものではなく
より理想的なオブジェクト指向風なデータ構造をもとに設計されたもの。
だからいろんな取り出し方ができる出来る柔軟性がある。
たとえば、behaviorでデータ挿入・取り出し時に色んな処理をかませられる。
そういう柔軟性を持たせながらシンプルなSQLに置き換えるのは容易ではない。
不可能な場合すらある。
なんでもかんでもパフォーマンスを気にして無駄なものを作るのは
初心者のやること。一日働いて3万円人件費をかけるのなら、
その3万円でスペックをあげたほうが総合的に考えてメリットが
高いという時代だから、今は。
CIはデータベースを使わない。使う頻度が少ない場合にはいいけど、 データベースを使う場合、貧弱だよな。 あれならSQL直書きした方がいいってほどメソッドがアホらしいしw なによりビヘイビアが無いのが一番痛い。
>>428 なんでもかんでもパフォーマンスを気にして無駄なものを作るのは
初心者のやること
サイトリニューアルなど
既存ユーザーが多数いる自社製品ならパフォーマンスを意識する
> 既存ユーザーが多数いる自社製品ならパフォーマンスを意識する マシンスペックを上げろ
>>429 複雑なアソシエーションはSQL直書きになるんならCIが理にかなってる
複雑なものじゃなくてシンプルにしようと考えような。
>>426 symfony(というかpropel)はJOINになる
>>431 ユーザーが増えるたびに、どんだけマシンが必要になるんだよ
JOIN使わないで一回一回よんでも パフォーマンスはたいして変わんないんだけどなw
>>435 ユーザーが増えると重くなるのはどれでも一緒ですが?
働いていない人は、人件費というコストを計算に入れないからなぁw
まあ、がんばれやw
SQL直書きになる機会が多いならCIがいい
O/Rというのはリレーショナルデータベースからの 脱却に意味があるというのに、今時SQLなんて低レベルなことやるかよw
>>437 ずっと開発してるわけじゃねーからw
人件費とか1回ぽっきりやん
複雑なSQLならO/Rマッピング使えないじゃん 今のCakePHPなら だったらCIでSQL直書きが最高よ
>>437 重くなりかたが異なってくるんですが?
1回で済む処理を2回のクエリで行ってるとアクセス数が増えたときにクエリ発行数が大きく変わることがわかんない?
ほんとにプログラマなのか?まぁ、がんばれや
>>442 使えていますが? JOINが使われないってだけでしょうが。
パフォーマンスに問題が無い場所で、
複雑なSQLを、SQLを書かずに作れる(買いても作れる)CakePHPと、
SQLを書くのと同等の手間をかけなければならないCIでは
どちらが優れているかは言うまでも無く、CakePHPですね。
>>441 マシンスペックを上げるのも一回ぽっきりですが?
ビヘイビアがない時点でCIは糞w
>>445 複雑なSQLを、SQLを書かずに作れる(買いても作れる)CakePHP
group byとかどうやんの?
>>445 複雑なSQLを、SQLを書かずに作れる(買いても作れる)CakePHP
この発言無理がありすぎやろw
>>444 あのさ、読解力なさすぎ。
「高負荷に耐えるためにJOINを使っていない」とは書いてない。
結局アンチはいつものCI厨だったなw
>>450 ではJOINを使わない理由になんて書いていますか?言ってみてください。
>>452 スケールするためにデータベースを分割し、JOINが使用できなくなったから。
スケールとはパフォーマンスをあげるということです。
うん。だから?
>>456 あからさまにバカだな。論理的に考えられないんだな。
高負荷に耐えられるパフォーマンスを作り出す為に、 データベースを分割してJOINが使用できなくなった。 負荷を考えるのなら、JOINなんかするより、 マシンに投資してデータベースを分割(当然マシンも増えているはず)して アプリケーションで行ったほうがいいということです。
>>457 さっきまでパフォーマンスの話してたやろうが
論理的な会話してないのお前だろw
結局CIが最強てことじゃんか
CIはフレームワークを使っているとは思えないほど開発工数がかかる。 データベース部分は、SQLの単語(selectやfromやwhere)を それぞれメソッドに置き換えて実行しないといけない。 なんとビックリw だから糞。
わろたw $this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20); $query = $this->db->get();
>>459 ただ、「マシンに投資してデータベースを分割(当然マシンも増えているはず)して」が始めからできるわけじゃないんだよね。
だからSQL発行数も含め、パフォーマンスには常に気を遣うわけで。
mixiが今はソフトウェア側でパフォーマンスを気にしてないかっていったらそんなことはないし。
>>460 パフォーマンスの話してるよ。何言ってんの?
もう面倒だからお前いいよ。
だからパフォーマンスを重視するところだけ 最適化して、あとは楽で速いコーディングをすればいいじゃんか。 パフォーマンスの基礎だよ?
>>463 これいいね。わかりやすい構文だ
CakePHPの
find(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,)
これに比べれば天と地に差
>>466 引数の数を勝手に増やすなw
最後の引数の意味言ってみろよ。
いえなければ赤っ恥だなw
>>464 おまえ誰だよ?トリップでも番号でもいいから付けろよw
>>463 はPHP4だと
$this->db->select('title');
$this->db->from('mytable');
$this->db->where('id', $id)
$this->db->limit(10, 20);
こうなります。
>>464 名無しで必死にレスしてるようだが
名前に番号でもつけてくれないと
今までどんな発言してんかわかんないんだがw
>>468 どうせトリップつけさせて削除しようって魂胆だろ。
そんな手に引っかかるか。ばーかw
>>469 わかりやすくていいね、さすがCI
ヌルヌルフレームワークとは大違い
473 :
sage :2008/03/28(金) 14:50:37 ID:JUQ1v1x2
$this->flash で出てくるはずのページがIE6だと表示されん。ソースは吐かれてる。 ってことはUTF関係か。
アンチレス繰り返してたら、えらい盛り上がってきた
475 :
425 :2008/03/28(金) 14:54:55 ID:???
すみません、途中投稿しました
>>420 その通りですね。同一アプリケーション内でDBをスイッチする事はありえないので
リスクとしては小さいため十分検討できます(一応、PostgreSQL使ってる方は注意です)
>>424 CodeIgniterもとてもいいフレームワークだと思います
ぜひその情熱で当該スレッドを活性化させて盛り上げて欲しいですね
>>428 確かにアソシエーションの自動判別が面倒(無理)という事情は分かります
面倒なSQLを叩かずオブジェクティブにデータセットを取得できる機能が
すでに実装されていているのですからそれを使うに越した事はありません
この辺りの実装はアプリケーション全体のパフォーマンスに影響するため
サーバ増設前の改良を十分に検討できる部分だと思います
実はアンチを煽って盛り上げさせているというのはナイショだw 見ろ他フレームワーク(特にCI)の静けさを!
>>469 みたいなコードを書くぐらいなら
SQLをそのまま書いたほうがいいな。
Cakeは糞
aki(ryが本出してるから糞
あの本は確かに糞だったな
あれは本当に酷かった
文句だけは達者だな
達者?
このスレはいつも無駄に盛り上がるよな
489 :
nobodyさん :2008/03/29(土) 22:04:16 ID:t2qvxoud
CakePHPっていいフレームワークだよな
ソース汚いけどな
最高のフレームワークだね 完璧すぎる
おまいらマインドマップ使ってる?
30才過ぎるとマインドマップ使わないと トイレ行った後とか今まで何考えてたかさえ忘れる
494 :
nobodyさん :2008/03/29(土) 23:43:43 ID:VJRoSuRr
なんでマインドマップの話になったか分からないけど、自宅と会社のPCに FreeMindインストール済み。 自宅ではCakePHPのシステム設計に使ってる。 ひとつずつやる事片付けて、終わったブランチに「レ」のアイコン付けるのが 楽しい。
UMLはルール化した図解表現 マインドマップは自由な図解表現
マインドマップで設計し形になったものをUML化する
497 :
nobodyさん :2008/03/30(日) 02:17:48 ID:xhO/sY7i
んで、UMLで書いた仕様書を投げ捨ててウンコする
CakePHP使ってればUMLもマインドマップも必要ない
作業途中に仕様的にやばい匂いがしたらマインドマップ使ってる
問題を解決しやすい方法として 思ったことを、どんどん言葉として書き出す わかってるからと頭の中でしまいこむと、全体的な解決図を結び付きにくくする
難しい状況を言語化する能力がコミュニケーション能力での重要ポイントだと思う。 もっと言語化するクセつければ、コミュニケーション能力向上になるんじゃないかな
render呼んだ後 すぐexit(); してる?
503 :
nobodyさん :2008/03/30(日) 20:27:27 ID:3z+xm+ln
>>473 遅レスだが、ソースの頭にBOMを付けたら表示されるようになた。
が、viewのファイルは8Nで保存しておかないと、たまに悪さをするようだ。
>>505 コンポーネントでrenderを呼んだときは
exitしないとデフォルトのrenderが最後に読み込まれるよ
cakePHPのテスト環境だけど SeleniumとSimpleTestの組み合わせが最強?
508 :
nobodyさん :2008/04/01(火) 01:26:52 ID:j0Vrw1hD
>>507 そっちのテストなら、セレニウムだろうと手作業だろうとなんだって良くね?
ユニットテストをするのなら1.2から正式対応したSimpleTestって言うだろうけど。
ていうか、テスト駆動開発って面倒ですよね、時間がかかるけど出来上がり安定するのは確かだけど。
正確にはテスト駆動じゃないけど、 ある程度の規模になったら、ユニットテストをやらないなんて 考えられないよ。 修正があるたびに同じテストなんてやってられない。 それこそ時間がかかる。
Selenium IDE これいいね。これだけでも同じテストする必要がないし なんといってもテストが楽
Yahooが占いコンテンツ制作にCakePHPを採用
なにこの寂びれぶり
513 :
nobodyさん :2008/04/02(水) 00:32:30 ID:Ldo05SB7
んじゃ、おれがこのスレを潤わせてやるぜ ビヘイビアって使ってる?
>>512 荒らしが去ったので落ち着いただけ。
CakePHPを使って、ようやくサイトを公開できた。
思ったより使いやすいね、CakePHP。
コンポーネント、ビヘイビア、ヘルパーの中では ビヘイビアを一番使うな。 よくよく考えると、ソフトウェアの中心はモデル。 その中心の共通処理なんだからよく使うのは当たり前か。
>>515 ソフトウェアの中心はコントローラー
なぜならコントローラーはモデルとビューにも指令を出すが
モデルは、たいていコントローラを介してのやりとりになるから
そういう考えで行けば、よく使うのはコンポーネントじゃないとおかしい
517 :
nobodyさん :2008/04/02(水) 11:18:11 ID:Ldo05SB7
518 :
nobodyさん :2008/04/02(水) 11:57:50 ID:KzinrGTW
findCount()で count(distinct hoge) を指定したいのですが それは、findAll() でやるべきなのでしょうか?
うん。アフォだ。ワロタw コントローラなんて所詮インターフェースに過ぎんよ。 実際の処理じゃなくて、ブラウザから引数を受け取って それを少々加工してモデルに渡す。 またモデルから受け取ったデータを少々加工してビューに渡す。 流れとしてはこんな感じだね。 「ブラウザ」→「コントローラ(加工)」→「モデル(実際の処理)」→「コントローラ(加工)」→「ビュー(HTML出力)」 っていうか、このように作らないとテストがしづらいったらありゃしない。 SeleniumやCakeWebTestCaseがあるとはいえ、 コントローラを操作してのテストでは範囲が大きすぎる。 もっと小さな範囲でテストできるようにしないといけない。 一番重要な処理を最小限の大きさ(なるべく他に依存しない)で テストすること考えれば、自然とこうなるはず。
ガソリン安いな〜 これほど自民党の一党独裁の問題点が分かりやすい現象は無いなw
>>519 そうなんだ。だから本にもモデルのテストの方法しか書いてなかったんだ。
モデルよりコントローラーをテストしたいんだけど・・・ってずっと思ってた。
ということは、僕のプログラムの組み方がよくないんでしょうか。
522 :
516 :2008/04/02(水) 16:33:04 ID:Ldo05SB7
>>515 ,
>>121 さきほどはアフォと一言で片付けてしまって申し訳ない、2ch流の愛情表現だと思ってくれ
で、
>>519 のいうとおりアプリケーションの中心となるビジネスロジックについてはコントローラなどでは
なくモデル内で実装するべき。一番大切なテストはビジネスロジックであるわけだし、モデルに集約して
(かつコントローラとのインタフェースも疎結合にして)コアロジックを実装することでコアロジックを別システムに
再利用しやすくなるというメリットも受けられる。
なので、コントローラはある意味、テストをしなくても問題ないくらい「薄い」実装にするべきだし、コントローラ
内で繰り返しよく使う処理についてはコンポーネント化してあげたほうが、ユニットテストで品質を保証できるので
良いかと。
こんな感じで考えていますが、どうでしょう?
>>519 Seleniumこれだけあれば、全く十分なんだが
これ以外でテストしようとすればコストかかるだけやろ
どんくさい作業してんな、赤字やろ?
>>522 だから何ってかんじだが、それがどうしたんだよ
リファレンスに書いてあるようなこと、なんで必死に訴えてるのwww
自演厨きたー。うぜえええ
Seleniumなんかでテストしたら時間(=コスト)がかかるよ。 ブラウザを起動する為、そもそも動作が遅いってのもあるが、 Seleniumだといくつものモジュールが組み合わさった状態で テストするしかないから、どこのバグがあるのか見つけにくい。 またデータの初期化などが出来ない。 途中で内部のデータを調べることも出来ない。 CakePHPにはSimpleTestでブラウザをエミュレートした状態の テストもできるので基本はそれを使ったほうが良い。 Seleniumを使うとしたら、SimpleTestではできない JavaScriptが絡んだ処理のテストぐらいだな。
リファレンスに書いてあるようなことなのだから、 間違いではないということだなw
>>522 アプリケーションの中心となるビジネスロジックて何?
どんなロジック?
一番大切なテストてどんなテスト?
>>モデルに集約して
(かつコントローラとのインタフェースも疎結合にして)コアロジックを実装
プラグインと違うの?
>>なので、コントローラはある意味、テストをしなくても問題ないくらい「薄い」実装にするべき
モデルとビューに命令出すのに薄い実装なんて物理的に無理
モデルはカラッポでOK
>>526 ブラウザ上でテストするだけなのにモジュールとか関係ないしwww
JavaScriptテストやるなら加工しないと出来ないだろwww
>>526 Selenium使ったことないやろ?正直にいえ
SimpleTestの方が時間かかるよ
内部のデータを調べるようなテスト時間かかるに決まってるやろ
また、例の嵐だな。
とりあえず言っておくけど、CIは糞だから、 糞スレでやってねw
なんか、CI普及の為(?)にわざとアフォなことを言っている気がする。 いや、まて、わざと悪い例を出しているのか? まあ、訂正している俺は考えをまとめられていいけどな。 (そして訂正している文を見て学習する人もいるだろう) > モデルとビューに命令出すのに薄い実装なんて物理的に無理 > モデルはカラッポでOK コントローラが出す命令はすごく小さなものだよ。 モデルに対して、「データ取って来い!」「書き込め!」「削除しろ!」 そして、「複雑な一連の処理をしろ!」 前三つは、CakePHPの自動生成コードでも書いてあるから 簡単にわかると思うけど最後の「複雑な一連の処理をしろ!」を モデルに書くべきってことをわかってない人が多いんだよね。 複雑な一連の処理をコントローラに書いてしまう。悪い例だ。
>>537 テストのことを考えていってんの?俺はテストはブラウザでしかしないからw
テスト中心に設計するならモデルに詰め込めるだけ詰め込めばいいんじゃね
>>537 複雑な一連の処理を具体的に述べよ
はなしはそれからだ
where が入るような条件文はモデルに書けばいいの?
>>537 モデルにもっていっていいのは
どこからどこまで?
>>537 いくら給料もらってんだよ
俺はPHPプログラマで36万円
モデル上で別のモデルのデータ取得できなくね?
>>542 どこまでをモデルでやるかは結局設計しだいだけど、
>>541 ユーザーがフォームからの条件入力。URL形式での条件入力
、つまりコントローラのアクション関数の引数に入る場合。
その引数をもとにモデルを呼び出すわけだけど、
このときのモデルの関数は汎用的なfind関数でもいいし、
もっと簡単に扱いたければ、モデルに専用の関数を作って呼び出す。
汎用的なfind関数を使う場合には、array('key' => '= ' . $value)なんて
条件データに加工しないといけないよね? これがコントローラの処理。
モデルに専用の関数を作る場合、もっと簡単に使える関数にするね。
もちろんその場合、モデル内部でfind関数を使うことになるだろうし、
そのための条件の加工もモデルに書く。
ユーザーの入力した条件が、POSTでくる場合は、
$this->dataから条件を作り出す所までもうちょっと
コントローラでやる仕事が増えるだろう。
それでもコントローラの処理(モデルを呼び出すところまで)はこれだけ。
俺ならこのように作るよ。
あとモデルから戻ってきたデータを、ビューで使いやすいように
単純化するのもコントローラの仕事だね。
>>544 > モデル上で別のモデルのデータ取得できなくね?
モデル上で別のモデルのデータを使用したいと思ったとき、
その二つのモデル間には関連性がある。
つまりアソシエーションを定義している。
アソシエーションを定義しているのなら、
モデル内で、別のモデルを呼び出すことが出来る。
Model1の中から、$this->Model2->findAll(); 感じで呼び出せる。
>>545 モデルから戻ってきたデータを、ビューで使いやすいように単純化
数字にコンマ付けたりとか?
>>546 そのやり方はCakePHPで推奨されてる方法なの?
>>546 わざわざアソシエーションするの?
いつも結合されて重くなるじゃん
>>547 それは見た目を変えるだけだからビューの仕事だろうね。
モデルから戻ってきたデータとは、汎用的なfind関数の場合、
$data => array(
モデル名 => array(
フィールド名1 => 値1,
フィールド名2 => 値2,
フィールド名3 => 値3,
)
)
こんな値が返ってくる。もちろん、これをそのまま
ビューに渡してもいいんだけど、これじゃあビューで使いにくい!
って言う場合加工する。
そんな場合あるのかって? 余り無いだろう。
そう、だからコントローラの仕事は少ない。
モデルから取得した値をビューに渡す$this->set(・・・) は
コントローラの仕事ね。
>>549 必要なときにつけたりはずしたりする方法は、何度も既出
>>546 なんでモデルでやるの?そのメリットは?
>>553 もちろん、直接関係が無いモデルは別々に
アクセスするよ。
モデルというか処理の内容から考えて
一つであるべきと思う場合は一つのモデルでやる。
あと、トランザクションの為のメソッドが
モデルにあることも興味深いよね。
一連関係ある処理は一つのモデル内で完結させるものと
考えると、なるほどと思わない?
>>546 モデルは複雑にすべきじゃないよ。な中規模設計したとき
アソシエーションで必ず問題起きそう
>>555 その意見はわからないでもないが、
普通にRDBMSを正規化したとき
そういう関連(リレーション)は出来るもんなんだが・・・
RDMSを正規化すると複雑になってしまう。それがいやだから
それを解決する為に、O/Rがあるんだと思うぞ!
×RDBMSを正規化したとき ○RDBMSでテーブルを正規化したとき
>>546 ページ数が増えたとき、コントローラを増やすことができるけど
コントローラが増えた分モデルを増やすこと出来ないよ。
ひとつのモデルに書くコードが恐ろしく増えるね
また例の馬鹿か?
> コントローラが増えた分モデルを増やすこと出来ないよ。 言っている意味が、よくわからないんだが・・・ 例えコントローラが無くてもモデルは作れるし、 一つのコントローラで複数モデルを扱うことも出来るんだが?
全てはコントローラに処理を詰め込み過ぎたscaffoldが悪い。 あれがアフォに勘違いを植え込む。
うーん、自動生成のコードとしては、これしかやりようがない所もあるのだろうけど、 コントローラに処理を詰め込みすぎというか、モデルに処理が何も無いのが いけないんじゃないかな? あれじゃ、単にテーブルに直接アクセスするネイティブな関数の 代わりのクラスにしか見えない。 一番、プログラマがいろいろ書くべきなのはモデルなのに。 逆に言えば、いろいろ書かないといけないものだからこそ 自動生成ではモデルに何もないんだろうね。 でもサンプル程度はほしいかも。
563 :
nobodyさん :2008/04/02(水) 18:53:30 ID:KzinrGTW
debugを1以上にするとHTMLの一番最後に <!-- 0.0012s --> みたいに、生成時間?のコメントがつくんですけど これを付けないようにするにはどうすれば良いんでしょうか? debugは1にしておきたいです。
564 :
563 :2008/04/02(水) 18:58:51 ID:???
あ、webroot/index.php にありました。
>>564 Do not changeって書いてあるけどねw
567 :
516,522 :2008/04/02(水) 19:01:23 ID:Ldo05SB7
ん?なんかいろいろゴチャゴチャしてきたけど、結局俺が主張してたことは正しかったのか・ 「複雑な一連の処理」とかビジネスロジックとかって、たとえば俺の場合は ・@日足の株価を取得してRSIを計算する ・A与えられた条件引数に該当する銘柄の証券コード配列を取得(スクリーニング) ・B現在の株価を受け取り、あらかじめ計算しておいた目標価格の条件を満たすか判別 ⇒・更に条件を満たしていれば、買い/売り注文をWEBサービスに投げる処理も「証券会社モデル」(仮称)というDBと連携しないモデルを作成して、HTTP(S)で注文するメソッドを書いてる。 ・C現在の株価を取得する(楽天証券のRSSをDDE接続経由で呼び出すモジュールを別途使用) みたいなアプリが持つほとんどの主要処理を言ってて、これらをモデル(またはビヘイビア)に記述するべきと思うのです。 逆に言えばコントローラは、 ・Cの「現在の株価を取得する」メソッドからの返し値をそのままB「株価と目標を評価し、注文する」メソッドに引渡し仲介する ・ビューからリクエストがあった@などの計算処理をモデルメソッド@に引き渡す ・スクリーニング対象銘柄の証券コードリストを取得し、そのままAのスクリーニングメソッドに引き渡す。 くらいのことしかしていない。人間の世界でいうと「仲介人」かと。
>>565 お前の目は節穴か・・・
ってかこのソースあまりいいとは思えないな
OpenFLP Rails 製のオープンソース版 Fastladder モデル 382steps コントローラー 910steps コントローラーに処理書きまくってるんですが。。。
じゃあ本家railsのソースコードみせてやる
コントローラに処理を詰め込みが正論か非か オープンソース見れば、すぐわかることだからな
オープンソースといってもその質はピンキリだから > じゃあ本家railsのソースコードみせてやる おいっ! railsはフレームワークだ。 もともとビジネスロジックは含まれてない!
>>567 全部コントローラで出来るし
それをCakePHPでやる意味がわからんw
574 :
516,522 :2008/04/02(水) 19:46:05 ID:Ldo05SB7
>>573 あー、「全部コントローラで出来るし」って言ってる時点でプロフェッショなるじゃないことが確定www
議論しても理解できないんだろうな、「できる/できない」ということと「(プロとして)やるべき/べからず」
といった本質的な点をwww
コントローラでも全部やろうと思えばできることくらいわかっとるわいwww
>>574 CakePHPでやることじゃないことは確かwww
ビジネスロジックはモデルに集約すべき 議論としては面白い 俺もその辺気になってた まあ俺はbakeしたコードの拡張から入ったクチだから全部controllerに書いちゃうけどなwww
>>576 俺もコントローラに書いてしまったけど、
作り続けていくうちに、なんか無理が出てくるんだよ。
なんでこんなに作りづらいんだ?って思っていたときに
このスレにあった、ケーキの絵。あれで悟りを開けた気がする。
あぁモデル中心でやればいいんだって。
>>562 モデルに書けって言うけど、何を書くの?
関数で書けばいいの?モデル内のメソッドとして?
>>565 の言うとおり、実例も無いし具体的なメリットが分からない。
今のところテストが楽って事はなんとなく分かった。
> 関数で書けばいいの?モデル内のメソッドとして? モデル = ビジネスロジック用のクラス なんだから、言うまでも無くメソッドだろ
>>580 ありがとう,でもコントローラーよりモデルに重点おけよという一言で済む話かw
>>583 どう幸せになるかではなく、
どう幸せになりたいか。
貴方はプログラミングする上で、どうなったら幸せだと感じる?
railsはコントローラーに重点を置くようになってるのではなぜ?
>>574 自分の安価間違ってね?516と522で筋が通ってない
>>585 railsでもモデルが一番重要なものですよ。
モデルが一番重要なんてCakePHPだけの話 松本に話したら鼻で笑われたよ
松本といっても鼻の長いゾウをキャラクターにしている会社の松本だけどなw
でもキリンさんも好きなんだろ?
591 :
nobodyさん :2008/04/03(木) 10:10:52 ID:Z1Ohe4yI
ビヘイバ話はおわったのか?
Model は特定の環境に依存しない処理を行う部分である。
たとえばの話なんですが、 1.フォームから画像ファイルをアップロード 2.アップロード結果・画像ファイルの不正検知 3.2が成功時、元画像名をmd5したものをuploadsフォルダに保存 4.3のファイル名をimage_fileカラムに格納 という一連の処理があったばあい、 今現在はコントロールとコンポーネントに書いてますが、 モデルとビヘイビアに書くとしたら、 2->バリデータに記述 3->ビヘイビア 4->モデル という感じなんでしょうか?
ビヘイビアて1.2からだろ、 最初から無いってことは必要性が薄いてことだよな
ソースが読みやすければコントローラーで全部書いてもいいし モデルに書いて読みにくくなるなら、書かない方がいい 結局はソースを読みやすくするために分けてるだけの話
結局はソースを見やすくする為にある。
一番見やすいソースとは、なるべく何も書かないこと。
画像をアップロードして保存というのは、本質的には
テーブルに画像フィールドを作ってそこに格納することと変わらない。
だからフィールド追加作業以外は、一切処理を変更しないで
作れるというのが一番理想的。
ビヘイビアを使えば、
>>596 のようにActsAsにわずかなフィールド情報を
設定して終わりだけど、その他の方法でここまでスマートに作れるかな?
598 :
593 :2008/04/03(木) 13:32:44 ID:???
599 :
nobodyさん :2008/04/03(木) 13:49:15 ID:Z1Ohe4yI
>ビヘイビアて1.2からだろ、 >最初から無いってことは必要性が薄いてことだよな 正確には1.1の頃からビヘイビアのディレクトリは用意されてたんだよな。 おそらく必要性はあったのだけど、1.1.xのステイブル版までに実装できなかっただけなのでは?
railsにはビヘイビア相当になるものが無いんだが、どうして
ビヘイビアてベネズエラにいる俺の愛人と同じ名前だ
>>600 Rubyではmixinという言語機能でビヘイビア相当のことが出来るから。
>>603 きちんとした日本語訳サイトあるのに。。。
606 :
nobodyさん :2008/04/04(金) 20:03:22 ID:GG6uDHIa
わっふるわっふる
MVCモデルのMが重要なのはデータ加工の多いWEBだけのはなしであって MVCモデル全般的な考えではない
データをあまり使う必要のないWINアプリを MVCモデルでわけた場合はCが中心となる
Web用のフレームワークのスレで何言ってんだこいつw
MVCのVが重点となるソフトをあげてみよ
rails発のMVCモデルはMがDBと密接な関係であるが 最強のモデルとは思っていない。 最適なモデル構造というには、まだまだ完成度が低いとrails作者は言っている
>>607 面白いけど
これ通りに書いたら一覧性下がりそうだな
大規模なら修正には強くなりそうだね
まずは体に叩き込んでみるのがいいのか
>>611 > MVCのVが重点となるソフトをあげてみよ
静的なウェブページ
ゆくゆくはcake使いたいけどあと8時間くらいしか時間ないし 今は勉強してる暇も無いからとりあえず平で書く ってときに、最低限これだけ守ってコード書いとけば あとでcakephpを使いたくなってもまあなんとかなるよ という ポイントを教えて
Cake同様のライブラリが揃ってるってなら、そんな事も可能だと思うが・・。 無理じゃね
データベースの主キーはIDだけにしておく
それはコードなんだろうか とにかく規約ぐらい把握しないと無理だよね 結局出来るのはDBの設計ぐらいじゃないかと コードも処理部分は多少使いまわせるだろうけど
619 :
nobodyさん :2008/04/09(水) 22:36:27 ID:0zi6cM/k
CakePHP内でfindAll、findAllByを使っていますが、重いのでチューニングできないかと 考えています。 それで、実際に発行されているSQLと、可能であればアクセスパスを確認したいの ですが、なにか方法がありますでしょうか。
デバッグモードを2に変更。実行したsqlが見れます
621 :
619 :2008/04/10(木) 00:04:23 ID:ysAxvq3P
>>620 確認できました! ありがとうございます。
Model->query()で以下のようなSQLを発行すると $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`)' => ***) ←ここ ) . . . )
>>622 なんか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にだけ対応していればいいのなら、問題ないけどね。
>>623 レスありがとうございます
alias噛ませる方法は私も試してみたのですが
FROM `bars` AS `Bar`の宣言と被っているためエラーが返ってきます。
hasManyで繋がっている集計先テーブルの条件指定なども追加したい場合
CakePHPの作法だとどのようにするべきなのでしょうか?
625 :
nobodyさん :2008/04/10(木) 11:53:32 ID:??? BE:39571564-2BP(2)
参照の参照がうまくいかない。 たとえば、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にしろ始めたばっかで全然わからないや。
>>625 Post -> User -> Group という順番に適切なアソシエーションが設定されていれば、芋づる式にデータは取ってこれる。
やってるけど分からないなら
>>620 が書いているように、デバッグモードをonにしたほうがいい。
その質問の仕方だと、何をどこまでやって分からないのか分からない。
>>624 とりあえず、
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);
って感じかな
まあ、SUMつかったせいで、 どこのモデルのデータかという情報が消えてしまい、 0という名前のモデル名になるってだけで おかしいわけじゃないんだけどな。 今回はBar.hogeのSUMだからモデル名はBarになるべきだと 思うかもしれないけど、SUM(`Foo`.`hoge` + `Bar`.`hoge`) という 書き方だって出来るわけだし。
なるほどなんで0になるんだとか悩んでた しかし、扱いにくいのはたしかなんだよね
BakeとかBakeryとかCheeseCakeなんていう、楽しげな製菓製パン用語の中にあって、 Scaffoldなんていう土建屋みたいなネーミングはいかがなものかねぇ。 いくらRoRのパクリとはいえ、違う名前でもよかったんじゃないかな。 なぁんて、チラシの裏w。
じゃあスポンジケーキ?
>>625 私も初心者ですが、私の場合はVIEWの最後に、
<?php print_r($post); ?>
というデバッグ出力を出して確認しながらやってます。
あ、確認は「ソースの表示」をした方が分かり易いかも。
秀丸など、UTF8等のキャラクタセットに対応するエディタが必要ですが。
Vista以降はもう NET Framework 3.0がWEBサイト最強のフレームワークになるな PCのWEBサイトはC#じゃないと追いつけないわ そしてPHPなどの下級言語は携帯サイトでしか使用されなくなる
Windows Server 2008の発売で asp.netの注目度がかなり上がってる どう考えてもPHPから3Dにも強いasp.net(C#)に移行するだろうな
CakePHPなんてやってる場合じゃないぞ 時代遅れ君たち
なんだ? いきなりこいつは? 話ズレまくりで滑ってるな。
637 :
nobodyさん :2008/04/11(金) 04:57:27 ID:OBoZ/5C8
>>635 代わりに、なにがいま時代の最先端なの?
世間で何が流行ろうと、CakePHPはCakePHPでいいじゃん。 別に、すでにCakePHPで作ったものをC#に置き換える必要は ないんだし。
C#で作ったって動かないサーバーが多いしな。
先輩がた教えて下さい。 mysql の max 関数を使うには cakephp ではどのようにすればよいでしょうか。 よろしくお願いします。
$this->モデル名->クエリ(SQL文、false);
queryは普通使わないだろw findといえ
>>642 自分も、するんだったらクエリ発行するしかないと思ってたんだけど、
使った事がないので書かなかった。
findでmax関数ってできるの?
>>632 <?php echo pr($post) ?> がおすすめ
>>643 $this->Model->find('all',array('fields'=>array('MAX(id)')));
>>644 <?php pr($post) ?>でいいよ
cakeって、queryを使ったら死刑!くらいの気持ちが無いと駄目なの?
だってqueryってSQL直で発行だよ? せっかく、CakePHPのデータベース用ドライバが、 RDBMS間の差を吸収しているのに フレームワーク使っている意味半減するじゃん。
>>635 ある意味正解!だがまだ時代が追いついてきていない。
やっぱO/Rマッピングでは無理があるということだ
C#も3.0の言語仕様拡張で突き抜けた感があるしね
LINQとかラムダ式とかJavaの真似っこでない次元に到達した。
でも現状は糞言語PHPで本当に馬鹿みたいなコーディングするしかないけどな。
>>648 中身がまったくない。知っている用語を羅列しただけ
自作自演の可能盛大。0点。出直しましょう。
>>647 >> RDBMS間の差を吸収しているのに
一つのシステムに複数のRDBMSを跨ぐ様な事なんて殆どないけどな。
まぁ、極力queryを使わないほうがいいのは同意。
同じコードで、いろんなデータベースに 対応できるってことを言っているんだろ。馬鹿か。
素直にRailsつかったらいいのに
railsかぁ。二年ぐらい前なら、それだけの価値はあったかもしれないが。
DBにべったりガッツリ依存しまくってるフレームワークってないのかな 割り切った設計で可能な限り使いやすさと速度の両立を目指すという
そのRailsだって難しい事はSQL直発行しろってスタンスだろ Zendに至ってはプレースホルダのSQL直発行がメイン findごときで収まるクエリだけなら世話ねーの
だからむずかしいことだけSQL発行すればいいんだよ。 Zendの場合、O/Rマッパーそのものがない。 あれはフレームワークというよりライブラリだから。
なんかCakePHP以前の事をお聞きするのですが・・・。
前々スレ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;'));
<form action="/コントロール名/アクション名/" method="POST"> <input type="submit" value="検索"> 入力欄は$html->inputなどを使う事
659 :
658 :2008/04/13(日) 13:18:37 ID:???
action="<?= $html->url('/コントローラ名/コントローラメソッド名')" だった。すいません
660 :
657 :2008/04/13(日) 14:18:45 ID:???
>>659 ありがとうございます。
ただ、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'];
(以下略)
として対処する事にしました。
>>651 同じコードで、いろんなデータベースに対応できるから極力queryを使わないほうがいいって言ってんだろ。馬鹿か。
CakePHP1.2を昨日から使い始めました。 それで、$formがまだよくわかっていないのですが、$form->radioで 1つ目にcheckedをつける場合、どのように指定すればいいのでしょうか? <?php echo $form->radio('Bookmark.access', array(1=>'公開','非公開'), array('legend'=>false, 'separator'=>' ')); ?>
>>662 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をつけるといけると思う。
radioでvalueつけると、二つ目にチェック入れて 入力エラーで戻ってきたときに、 また一つ目がチェックされるのよね。
665 :
nobodyさん :2008/04/15(火) 00:36:29 ID:kB0aZEdA
Cake1.2でのAuthComponentの使い方などで、なにか良いチュートリアルがあれば教えていただけませんかー? もし可能であれば、ACLのうまい活用の仕方もわかると嬉しいです ペコリ
666 :
662 :2008/04/15(火) 01:18:18 ID:???
>>663 inputの例を参考に、2つ目のarrayに'value'=>'1'を追加して、うまく行きました。
ありがとうございます。
Ver1.2でshellsの中でコンポーネント使うにはどすればいいの?
App::importでなんでもござれだが、 そもそもshellsの中でコンポーネントを使うのが問題ではないのか? コンポーネント = コントローラの汎用的処理、 つまり処理の内容はコントローラそのものなわけで、 シェルの中からコントローラを呼び出すというのがちょっと疑問な処理。 コントローラの処理にリダイレクトするという考えでrequestActionを 呼び出すという考えもありとは思うが、 そもそもそれはモデルにおくべき処理なのかも知れないぞ。 ちなみにシェルからモデルを扱うには、usesプロパティを使用するだけでOKだ!
669 :
nobodyさん :2008/04/17(木) 18:54:40 ID:YR2rN8Sk
ところでみんなはShellsはどんな使い方してるの? 俺の場合は、定期的にcronで叩いて、指定ディレクトリに生成された大量の一次データをDBに取り込む作業、とか。
今日はじめてcakeつかったけどさ、mysqlのセキュリティを下げないとつかえないじゃん オワタ
釣りに嘲笑レスだが、セキュリティを下げるって何したの?w
>>669 旧システム(フレームワーク未使用)から新システム(CakePHP)への
データコンバートに使った。
あとは簡易なツールかな。たとえば入力した単語の単数形⇔複数形 などをするツール。
>>671 これが釣りに見えるとは・・
おまえの知識がよくわかるわ
#sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
知識うんぬん以前に、お前何も言ってないじゃん。 セキュリティを下げるというだけで、それ以外のまともな情報が何もない。 だから馬鹿にされるんだよ。 で、それのどこがセキュリティ下げてることになると思ってんの?w 互換性とセキュリティの違い、理解しようね。
>>673 どういう意味?
sql-modeをこれに設定したって事?
>>676 に書いてあることがコメントされずに初期設定されている
これをコメントアウトすることによってセキュリティを甘くせざるを得ないわけよ
このモードをはずさないとcakeのコードからワーニングがでる。
cakeに潜んでるバグで作者は修正予定らしい
>>676 横レスですまんが、すっげぇ要するにMySQL5系の設定で
STRICT_TRANS_TABLESを指定していると、SQLの構文チェックを
厳密にするんだけど、このままだとCakePHPの吐くSQL自体でエラーが出るんよ。
んだから今の所は構文チェックを緩くしないとCakePHPが動作しないって事。
>>670 の説明で分かった奴はエスパー。
679 :
676 :2008/04/18(金) 00:24:11 ID:???
名無しのままでいいからもっといじったほうがいいよ676さんは
1.挨拶を自分からしない・できない・やろうと思わない 2.リアルではおとなしいのにネット上では態度がでかい。 3.自分の意見で地球が動いてると思ってる。自分の意見はみんなの意見。 4.自分に非があってもスグ言い訳、逆切れ。他人を攻撃する。威嚇することで自分の弱さを隠している。
>>678 つまり、セキュリティの問題じゃないってこと?
っていうか、MySQLの仕様変更だし。 CakePHPのバグでもセキュリティの問題でもない。
685 :
nobodyさん :2008/04/18(金) 01:27:47 ID:UgH30Z6m
アホが大量発生しとりますな。 CakePHPとはスレ違いだし
>>673 のsql-modeの値がデフォルトになっているのは、
Windows板でインストーラーを使ってインストールした場合のみ。
本当のデフォルトの値は厳密モードじゃありません。
いい加減Windowsは卒業しろよw
>>682 んーと、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なー。
それってセキュリティとは言わないと思う
.thtml 派? .ctp派? 今でもぼくは .thtml 派。
>>690 1.1系から乗り換えた当初は.thtmlにこだわってたけど(てか気づかなかった…)
.ctpに切り替えたら1日で慣れた
やっぱり5文字の拡張子は長すぎるよね
>>689 だから広義の意味っつってんじゃん。日本語理解できてる?
Perlでコードの安全性を高めるためにuse strict;するのと一緒だよ
>>691 レスまんくす!
では、僕も次のサイト作りから ctp 派 になります♪
>>692 広義の意味でもセキュリティの問題じゃない。
俺俺定義すんなw
>>692 広義といえばどんな主張でも通ると思ってる厨房発見。
メールフォームとかで //入力画面 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 を与えるしかないのでしょうか? 入力項目がいっぱいあるとめちゃくちゃ大変な気がするのですが…。
findByなどで、hasManyでくっついてきたレコード数をカウントしたい場合、 どのようにすればよいのでしょうか?
1.1系でmode内でorderとかconditionを設定できないの? class Post extends AppModel { protected $order = "Post.created DESC"; とかでfindしても駄目なんです。
699 :
698 :2008/04/18(金) 18:21:29 ID:???
すいませんmodel内でです
700 :
698 :2008/04/18(金) 19:03:12 ID:???
もう少し分かりやすく言うと、モデル内でSQLの検索条件(where句)に縛りを入れたいです。
うっ・・・だめ。もう・・もう・・・もうでる。 モデル
モデル内に function find_name_only($cond = "name like '%tarou%'"){ return $this->findAll($cond); } を書いてごまかしてみました。 ほかにいい方法があるのでしょうか?
>>696 まだ始めて2週間しかたってないけど。
form.thtml
<?php echo $html->input('Form/name'); ?>
で、どう?
あと、$this->set('data',$this->data); は、要らないとおも
>>697 count( $model['Model']['HasManyModel'] )
かな?
705 :
697 :2008/04/18(金) 21:22:22 ID:???
>>704 これは取り出した後で、PHPのcount関数で配列の要素数をカウント、ということでしょうか?
そうではなくて、
たとえばfindAllするときに取得順などにHasManyModelのカウント数を使いたいのですが。
質問の文章がわかりづらくて申し訳ありません;
よろしくお願いします。
>>705 おそらく、自分でクエリを書かないといけないでしょうね。
707 :
697 :2008/04/18(金) 21:47:07 ID:???
>>705 やはりそうですか;
せっかくフレームワークを使っているのでできればクエリは書きたくないですね・・・
UsersをPostsの多い順に並べ替える、など、結構よく登場すると思うのですが;
> UsersをPostsの多い順に並べ替える、 やってないけど、これは、findAllの条件にexistsなんたらって書いて countだせばいいとだろうから、一応findAllは使えるな。 半分ぐらいしか意味ないけど。
>>707 それか、1回データを取り出した後で件数をキーにした連想配列に入れかえるのはどうでしょうか。
配列の添え字を、
$array[$count .' - ' .$id]
こんな感じにして配列をソートしたら出来そうですが。
>>707 > UsersをPostsの多い順に並べ替える、など、結構よく登場すると思うのですが;
ちょうど同じような事例を考えていた。
顧客とその顧客の取引データが一対多でつながっている場合に
取引が多い顧客を見たいと。
で、いろいろ考えたんだが、顧客数や取引が多くなると重くなりそうなので、
(だって内部的には顧客ごとにデータ数えて、その数でソートするんだろう!?)
非正規化することになるが、顧客データの中に取引数フィールドを作ることにした。
あとは取引データ保存時、つまりモデルのafterSave時に、
顧客テーブルの取引数フィールドをいじればいいと。
フレームワークを使っているとこういうトリガー的なことを
データベースに依存せずにやれるから良いね。
711 :
697 :2008/04/19(土) 11:37:16 ID:???
>>ちょうど同じような事例を考えていた。 奇遇です! なるほど・・・あえて非正規化する、と。 手元にある参考書に 「処理効率を考えて、あえて非正規化することもある」 と書いてあった意味がわかりました。 たしかに、毎回自分でクエリ書くのに比べたら、 冗長なデータを持っておくくらい、なんてことないですね! 目からウロコでした!
DB使ってる意味ねぇw
713 :
697 :2008/04/19(土) 11:50:08 ID:???
>>712 では、他に何かいいアイデアがあるのですか?
俺は自分でクエリを書いたほうが断然面白い。
1.2を入れてみたのですが、 function index() { $data = "テスト"; $this->set('data', $data); } とやっただけで Allowed memory size of xxx bytes exhausted ... が出てしまいます; CakePHP叩きではなく、本当に困っています。 対処法を教えてください。
>>715 その程度のコードで、そのエラーが出るときは、
基本的にバグだと思ったほうが良い。
まあ環境のせいもあるからとりあえず聞くけど、
OSとPHPのバージョンと、php.iniの設定(もしくはini_get('memory_limit'))の値)
function index() {
echo 'aaa';exit;
}
とやるとどうなるか。
index()以外のコードはどうなっているか。
>>712 > DB使ってる意味ねぇw
DB使うことが目的じゃないからね。
DBは所詮データの保存先に過ぎないし。
718 :
715 :2008/04/19(土) 12:47:34 ID:???
>>716 レスありがとうございます。
どうやらbakeで生成したビューをそのまま使っていたことが原因だったようです;
スレを汚してしまってすみません;;
>>717 じゃファイルベースでやりゃいいじゃん。やらない理由は?
CakePHP でPEARを使うとき 依存PEARがうまく発見できないのですが、 どうすればよいのでしょうか? php.iniのinclude_pathには app/vendorsを追加してあります。
>>719 > じゃファイルベースでやりゃいいじゃん。やらない理由は?
フレームワークがファイルベースに対応していないから。
(読み書きできないということではなく、モデルが対応していないということ)
722 :
720 :2008/04/19(土) 18:05:22 ID:???
すんません; 事故解決しました。
>フレームワークがファイルベースに対応していないから。 ユーザが自由に選択することもできないってこと? 強制的にDB使用? CakePHP糞FWすぎるwwwww
流れ読まずにすみません。 CakePHPで作られてるサイトで有名なところを見てみたいのですが、 教えていただけませんか? たしかNiftyのなんかがCakeだと聞きましたが・・・
mozillaのサイトとか
>>723 君頭大丈夫かね?
CakePHPは別にデータベースを使用する必要は無い。
ただデータベースを使ったほうが効率がいいだけだ。
それがファイルベースでやらない理由。
どうやら君は素人なのだろう。
>>711 非正規化は、一般的な業務システムでもよくやるな。
ただ、明らかに正規化をさぼってて、テーブルのカラム数が100個超えているのを
「性能を考えて非正規化している」と言い張る人はカンベンしてほしい。
あぁごめん。cakePHPの話から逸脱した。
>>723 どこか忘れたけど、コントローラあたりの設定で、DBを使わないようにもできたはず。
だれか補足頼むw
特殊な使い方でもしない限り、あんましメリットはなさそうだね。
>>726 相手を見下さないと精神を保てない糞FWユーザ涙目www
図星だったのか? その反応は。
モデルが貧弱なCodeIgnitorよりは CakePHPの方が実用的に見て優れているな。
>>728 フレームワークに問題が無い話をしているのに
糞FWとか言っているようじゃ
説得力皆無だゾ
ちいたん最強
734 :
nobodyさん :2008/04/21(月) 16:11:05 ID:Hc1e0Bqc
追加の検証が必要な不確実な情報 俺のコードに問題がある可能性もあり。 1.2.0.6311-beta のデフォルトのセッション管理(ファイルベース?) Configure::write('Session.save', 'cake'); のとき、同時に複数のアクセスがあるとロックされるかもしれない。 つまり、一つの目のアクセスで長い処理を行っていると 二つ目のアクセスがロックされ一つ目が終わるまで実行されない。 Session->read()で待たされる。 Configure::write('Session.save', 'database');にして DBベースのセッションにするととりあえず回避できる。 関係ないとは思うがPostgreSQLの場合。
PhpNutいなくなっちゃったの?
736 :
734 :2008/04/21(月) 19:37:53 ID:???
よく考えたら、ロックされるほうが正しいのか。 アクセスしたユーザーはロックされるが 他の人(ようするにセッションファイルが違う人)は ロックされないようだ
初歩的な質問で申し訳ありません。 bakeで作ったコントローラをみると $this->Session->setFlash(__('hogehoge.', true)); のようなコードがありますが この__() や後ろのtrueは何を意味しているのでしょうか? もしかするとcakePHPに限ったことではないかもしれませんが、 よろしくお願いします。
>>737 多言語化機能。
/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ではこのやり方を独自に拡張しており、
関数名がアンダーバー二つになっている。
おまけ。翻訳手順。poeditを使った場合。 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 を直接翻訳ファイルとして使える。
741 :
737 :2008/04/22(火) 18:43:22 ID:???
>>738-9 丁寧なレスをありがとうございます。
CakePHPにはまだまだ知らない機能があるんですね。
いろいろ楽しみです。
742 :
737 :2008/04/22(火) 18:44:53 ID:???
アンカーの付け方間違えました・・・ マウスオーバーしないようにお願いします;;
743 :
739 :2008/04/22(火) 18:56:32 ID:???
一つ言い忘れた。.pot .po .mo とかの .で始まるやつは ドットで始まるファイルではなく、拡張子という意味で書いた。 デフォルトではdefault.poやdefault.mo になる。 それぞれのファイルのdefaultの部分を変更することも可能。 abc.mo の場合、その場合、__d('abc', 'hogehoge') という書き方で 出来ると思うがやったこと無いので/cake/basics.phpでもよんどくれ。
744 :
新参者 :2008/04/23(水) 05:59:57 ID:???
ブラクラするんだけど、俺だけ?
メニューを選んで、表示し終わる前にサイト内検索する。(Specialofferとか)
http://www.islandcruises.com/ OS: WinXP sp2
Browser: IE7
CPU: Core2 6300
Memory: 2G
Service: xampp
CakePHP 1.2で開発中なので、こういうの見るとビビっちまう・・・
745 :
744 :2008/04/23(水) 06:23:11 ID:???
追記: キャッシュクリア後とかに、 zeroで検索するとハングしやすい。 firefoxだと大丈夫なので、IE7の仕業くさいな。 調べてくるか・・・
746 :
702 :2008/04/24(木) 18:22:26 ID:???
>>698-702 の流れから結局、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);
}
>>746 1.1ってbeforeFindなかったっけ?
748 :
702 :2008/04/25(金) 12:38:51 ID:???
URLを読み込む以外に、CakePHP外部から CakePHPの関数とか呼ぶ方法内ですかね? 具体的に言うと、もともとウェブサイトがCMSで構築されており、 新たにCakePHPを使ったウェブシステムを追加したわけですが、 そのCMSのページ上にCakePHPシステムの情報・・・会員ユーザー名などを 表示させたいのです。
好きなようにDB叩けばいいんじゃまいか?
751 :
nobodyさん :2008/04/26(土) 14:52:38 ID:CCA4AGBq
Shellsでしょう
752 :
nobodyさん :2008/04/26(土) 21:38:26 ID:Uwx0xpWG
セッションがクリアされてしまってハマった。 ネットで検索すると、存在していないcssや画像ファイルがあると消え、 htaccessでの設定で回避できるということだった。 css、画像ファイルのパスと存在が正しいことを確認、 htaccessファイルの設定も修正してみたが、セッションはクリアされたまま。 たすけて。
754 :
753 :2008/04/26(土) 22:35:08 ID:???
ごめん。よくみると全然関係なさそうだね。
>>753 は読まずに答えてみる。的外れかも。
えーと、core.phpだっけ? セキュリティレベルを設定するところ。
あそこが一番高いと、接続するたびに、セッションIDが変更される。
だから途中でエラー?とかあると、サーバー側ではセッションIDの情報が変わっているのに
クライアントでは新しいセッションIDをもらきれておらず、セッションIDが切断=クリアされてしまう。
だから俺はセキュリティレベルを中にした。
756 :
755 :2008/04/26(土) 22:41:33 ID:???
757 :
nobodyさん :2008/04/26(土) 23:10:06 ID:Uwx0xpWG
CAKE_SECURITYを、'medium'にしてやってみたけどダメでした。 セションをwriteした直後にreadしてみたら、ちゃんと設定されてるのは確認できたんですけどね。 次の画面でreadすると空になってる。ん〜困った。
まさかブラウザ側の問題ってことは・・・ セキュリティソフトとか。
writeした直後にreadしてちゃんと設定されていると 確認するのはあまり意味無いよ。 なぜなら、情報が実際にセットされるのは ブラウザにクッキー情報が返ってからだから。 ieHTTPHeadersやLive Http headers ブラウザのクッキー情報を見るツールを使って 調べてみよう。
あっそうだ。セッションの方式にはどれを使っている? cakephp、php、database? 自分の使い方の問題もあるだろうけど、databaseがなんかうまくいかなかった。
761 :
nobodyさん :2008/04/27(日) 00:41:14 ID:DD3/O3h6
cake1.2.0.6311使ってますが、 sqlのCASEはquery対処なんかなあ。$optionsでいけたりする?
763 :
761 :2008/04/28(月) 00:00:23 ID:???
自己レスだけど、携帯サイトの場合、Cookieが使えない携帯端末があるから URLにセッションIDを付加する方法でやるしかない。 PCサイトの場合は、セッションハイジャックの危険性があるからURLへのセッションID付加は使えない。 結局、セッションを使わずcookieで運用する方法で実装しました。 本来の意味でのセッションではなく、単なるデータの引き継ぎ用途なので、cookieでよいかと。
一週間いじってみたがこんな致命的バグの潜んだFWは使う気になれん
>>765 何かバグにぶち当たったのかもしれんけど、こんな風にいい逃げする
荒らしもいるしなぁ。
本当に困ってるのなら、具体的なバグ例を挙げてみるといいよ。
そしたら対処方法も出るかもしれないし。
話は変わるけど、前のレスでも出てたし、みんな知ってるのかもしれないけど、
このサイトいいね。参考になる。
テンプレに載せてもいいんじゃない?
ttp://bakery.cakephp.org
お決まりですので・・・ 宣伝乙^^
768 :
nobodyさん :2008/05/01(木) 10:47:29 ID:oWWm9vMD
hasMany定義しているModelで、子のデータが更新されたら、そのmodifiedで 親の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'));
>>768 39行目はupdateじゃなくて、insertされてない?
771 :
768 :2008/05/02(金) 02:37:54 ID:???
すみません自己解決しました。 39行の手前で、親の方にidを設定したところ、きちんと更新されました。 $this->Thread->id = $thread_id;
773 :
nobodyさん :2008/05/07(水) 00:15:31 ID:ehDEto56
app/views/layouts/default.thtml にて、あるModelのデータを 展開したいのですが、どうすればいいでしょうか? 対応するコントローラもなさそうだし・・・。
>>773 モデルからコントローラに値を渡してsetしてviewで使えばいいだけですよ。
775 :
773 :2008/05/07(水) 00:29:55 ID:???
>>774 というと、複数のviewで使いたい場合は、各コントローラ、各アクションで
setするという事でしょうか?
あるいは、全てのコントローラの前に読み込まれる、共通コントローラみたいのが
あったりするのでしょうか。
そうあるよ
779 :
773 :2008/05/08(木) 01:09:40 ID:???
結局レスの内容はよく分かりませんでしたが、下記ページを参考に、
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>
app_controller.php function beforeRender() { # ここに/users/getUserListの中身とかを $this->set('user_numbert' , $user_numbert); } default.thtml <?php e(h($user_numbert['User']['name'])) ?>
ちょwwwww志村上上下下右左右左BA
以前にもこんな話題があったような気がするのですが、 フォームの画面遷移のときのデータの持ち回り方について・・・ 1.普通にhiddenで埋め込む 2.serializeしてbase64_encodeしたものをhiddenで埋め込む 3.serializeしてbase64_encodeしたものをセッションに書き込む などが考えられますが、 CakePHP的には、どの方法がベターでしょうか?
784 :
773 :2008/05/09(金) 01:55:42 ID:???
サンプルコードまでご提示下さり、ありがとうございます。おかげでフル装備 じゃないや、スマートな実装ができました。 どうもありがとうございました。
>>783 質問だけど。
3でbase64_encodeする意味合いって何があるの?
>>783 自分は 1。
セキュリティがどうこうっていうプログラマーさんがいるでしょうけど・・・。
787 :
783 :2008/05/09(金) 18:55:31 ID:???
>>785 すみません。よくわからないで書いてしまいました;;
シリアライズだけで十分ですか?
>>786 最終的にsaveするまえにしっかりバリデートすれば、それでも問題ないのかもしれませんね・・・
でもやっぱりソース見たときに、パスワードとかメールアドレスがもろに書いてあると、
このサイト大丈夫か??って気になりますが・・・
ちょっと気になったのですが、PEARのHTML_QuickForm_Controllerなんかは
どの方法なんでしょうか??
貧乏人は贅沢だ 不満を言う余裕はあるくせに 戦争する暇もある
>>787 ソース見られたらっていうのは確かにある。
しかもそれを無理矢理改ざんして入力不可の文字を入力される可能性もある。
しかし、よほどのサイトじゃないとそこまでハッカーも暇じゃないから攻撃しないのでは?
と思います。
現に、ここ 5年ほど、何も問題ありませんでした。
>>789 問題があってからじゃ遅いんだぞ!
と思いつつも、もりもりhiddenに入れ込んでしまう。。
>>787 セキュリティ目的ならbase64_encodeは用をなさないという認識。
>>789 データはhiddenで埋め込んでおいて、$this->dataをserialize後saltつけてハッシュ化したやつを別でhiddenに埋め込む
↑のふたつを比較して整合性チェックとか?
今、ここを覗いている筑波大学へ ばれてるぞ!
別に半角文字列板とかじゃないんだからバレたっていいだろうに。
794 :
nobodyさん :2008/05/11(日) 11:28:50 ID:qWqUPYxD
日本語フォーラムと2ちゃん、どっちの方がコメントもらえるのかな?
と言いつつ、いつもこっちに書くのだけど・・・。
下の記事を参考に、携帯用ページを作っています。
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>
これって、どう対応すればいいのでしょう?
app/config/routes.phpにRoute::connectNamed(array(),array('argSeparator'=>'=')); を追加
796 :
794 :2008/05/11(日) 13:42:34 ID:???
>>795 Router::connectですね。
ふぉぉ、すぐに答えていただきありがとうございます!
PC側の方もちょっと調整が入りますが、おかげで解決しました!
797 :
nobodyさん :2008/05/12(月) 02:29:40 ID:8yg2YXGe
CakePHP1.2のバリデーションについてよく整理されたマニュアルとかってないかな バリデーションルールが多様になったほかに、create時update時それぞれに有効無効に できるなんてこと知ったのだけど、その他含めてちゃんとまとまった情報ってないかな
AuthComponentsで、ユーザー情報を取得し直したいとき、どのようにすればよいでしょうか? たとえば、 ログイン後にユーザーメニューからユーザ名の変更などを行った場合、 セッションには変更前のユーザ名が格納されているため、 ヘッダーなどに表示されている 「ようこそxxさん」のような表示が変わらない、ということになってしまいます。 いちおうの解決策としては、 セッションにはIDのみを格納しておいて、 app_controllerで 毎回、$this->User->findByIdしてセッションに記憶させるという方法をとっていますが、 あまりスマートではありません; ユーザ名の変更処理の直後のみユーザ情報を取得しなおしたいのですが、 なにかよいアイデアはないでしょうか?
>>798 なんとなくでレスしてるが変更と同時にセッション内容も書き換えればいいんじゃないの?
公開用Webサイトに1.2系使ってる人っている? DBからデータをviewで表示するだけなら1.2でも大丈夫かな? 現在は1.1で運用中。 多言語対応が1.2でやりやすいのなら、1.2で作りかえるんだけど。
>>800 俺はやっちゃったw
半年ぐらいCakePHP使っていて、コアの中まで見てると
大丈夫なんじゃないかなぁと思う。
バグではないが、ベータ版だから仕様が変わるのが
ちょっとネック。
802 :
794 :2008/05/13(火) 00:21:01 ID:???
>>800 いま、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オプションを追加してごまかしています。
1.2の正式バージョンていつごろ出るのかな? 乗り換えるべきかどうか迷う・・・
>>800 cakephp 1.1 も 1.2 も両方開発してアップしてますけど両方問題ないですよ。
ただ、モバイルサイトも作ろうと思えば 1.1 の wevservices が便利です。
1.2じゃなきゃ使いたくないズラ
画像表示系のコンポーネントを作って使うとき、 最後にheaderでContent-typeなどを指定するわけですが、 controller.phpのheader(”location...とかぶってしまって、エラーが出てしまいます。 みなさんはどのように処理しているのでしょうか? わかりずらくてすみません・・・;
808 :
806 :2008/05/13(火) 20:02:52 ID:???
>>807 それです!
わかってもらえて安心しました。
リンク先のものは、キャッシュに保存してそれを表示する、というものでしょうか?
これはこれで便利ですが、やはりできればストレートに表示したいですね・・・
809 :
nobodyさん :2008/05/13(火) 22:25:09 ID:Akbr9Dkj
CakePHPの話題ではないかもしれませんが・・・ たとえばタスクをステータス別に表示する場合 コントローラ側で、 $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 .... とするのでは、 どちらのほうがパフォーマンスが優れているのでしょうか? ご教授お願いします。
どっちもだめ
813 :
nobodyさん :2008/05/14(水) 09:49:25 ID:XltYBCAy
前者のほうが毎回DBアクセスが発生するため速度という点でのパフォーマンスは悪いでしょうね。 後者のほうは、、ビューにあまりそこまで複雑なロジックを記述することによるコードの効率の悪さ という点でパフォーマンス難ありかも。 対象となるデータ量次第だけど、そこまでデータが多くなくてサーバのスペックが十分であれば前者の方が コーディングは早いんじゃね?個人的な意見だけど。
806です。
>>809 >>810 その方法は試してませんでした。
次回やってみようと思います。
ありがとうございます。
デザイナーの要望に応えてちょちょっと変更するときなんて、 viewいじった方が早かったりするんで、 ついついやっちゃうんだよなぁ。 んで、気づいたらviewがえらいことにw
CakePHPかRuby on Railsかで迷ってます。 サーバー関連の知識が全くないのですが、 アプリ完成後の公開寸前で困らないためには、 CakePHPを選んでおいたほうが、すんなり公開できるでしょうか?
>>816 どっちも自分で試したほうがいいと思う。
俺は慣れてるからCake好きだけど。
最低限のアプリ作って鯖置くまで試してみる事をオススメする。
818 :
816 :2008/05/15(木) 01:04:37 ID:???
>>817 レスありがとうございます。
Cakeならば格安のレンタルサーバで試してみることもできるのですが、
Rubyとなるとそこそこ値の張るところでないとダメみたいで、
それだけのお金を出して、設置できなかったとなると・・・
1.2の安定版ももうすぐみたいですし、
やっぱり初心者にはCakeなんですかねぇ・・・
>>818 つ仮想サーバ または 適当な空きマシンでlinux
☆ チン ☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヽ ___\(\・∀・)< 1.2まだー? \_/⊂ ⊂_)_ \_______ / ̄ ̄ ̄ ̄ ̄ ̄ ̄/| |  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :| | .|/
823 :
877 :2008/05/20(火) 09:40:48 ID:xs/omlLe
CakePHP 1.2 stable coming soon と言ってるから、そろそろ 1.1 -> 1.2 移行手順をまとめたいな 絶対に手を入れるところ 推奨されているところ とか はまりポイント とか
ttp://puyo2.upper.jp/cake/ のPDFを中心に
■絶対に手を入れるところ
・設定ファイルの変更(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
間違いあったら訂正よろしく
find系もなんか修正あったんじゃなったけ?
検索してもうまく見つけられなかったので、教えてください。 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%'; というのも知りたいです。
829 :
nobodyさん :2008/05/20(火) 19:19:52 ID:wZOYKZBI
バージョン1.2のAuthComponentでの認証で二重ログインを防ぎたいんだけど、 良い方法か参考ページがあったら教えて下さい。
830 :
nobodyさん :2008/05/21(水) 01:03:54 ID:+T6Kz2/1
CakePHPってDBのカラム名まで縛るのね。 その時点で候補から外れたね。
>>830 さようなら。
その縛りなしで行こうと思えば行けるんだけどな。
じゃぁの。
>>830 そんなに大変?
たしか、RoRでもあったと思うけど。
idとcreatedとmodifiedくらいしか意識した事ないけど、
他にもあるのかな?
というかしばるから便利なわけですが
>>832 name or title フィールドでgenarateListが自動的にidと配列を返す
あとは、xxx_id とか xxx_yyy とかのアソシエーション系かな?
いずれにせよCoCの理念に同調できない人はRoRをはじめとしたフレームワークは無理だわな。
RoRではなく、Cakeスレに書き込む
>>830 に乾杯
> name or title フィールドでgenarateListが自動的にidと配列を返す そういえばそんなものもあったね。1.2では find('list')にかわるわけだけど。 ソース見たけど、1.2betaの段階では、フィールド名指定する方法 無かった気がする。なんでだろうね。 結局は、genarateListを1.2で動かしたときの警告の通り find('all')の検索結果をSet::combine($results, $keyPath, $valuePath); しているだけなんで、自分でやればいいんだけどね > あとは、xxx_id とか xxx_yyy とかのアソシエーション系かな? これはなぁ・・・みんな同じような名前のつけ方しない? ○○テーブルのIDなんだから○○_idって。
カラム名とか考えるの苦手なんで縛られてた方が楽だな俺は。 コントローラ名とかメソッドの名前とか考えるのホント嫌。かっこいい名前考えるセンス無くて。
スペル調べたりするのも面倒だから、ローマ字とかw
たしかに項目全部のスペル調べるのって時間かかるよなw 非英語圏の俺涙目
ローカルに辞書ソフト入れておいたほうがいいぞ。 どうもウェブだと時間がかかる。 おれはMS Officeについていたbookshelfを使っている。
841 :
839 :2008/05/21(水) 23:38:50 ID:???
>>840 Bookshelfか。懐かしいなぁ。
Bookshelfもいいんだけど、アルクは例文がいろいろ出てくるので、
そこがおすすめ。
たしかにローカルの方が速いけどね。
□cake.phpがapp/webroot以下のsqliteファイルを見てない? 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' => '' ); } ?>
英語の豆知識 Data : 複数形 Datum : Dataの単数形 CakePHPやるまで知らんかった。。。
845 :
始めるっす さん :2008/05/23(金) 16:47:14 ID:b0nY9q6k
これは分かりやすい駄目な宣伝の例ね
受験英語でも覚えたことだろ。 ここは中2以下ばかりだったのか。 まあ、あおりはともかくとして、 この業界、Allow をアロー、Denyをデニーと発音する低脳が異常に多いよな。 ここまで自然言語の才能が乏しいと、プログラム言語をいくらがんばっても限界が低いだろうね。
>>848 じゃあなんて読むの?
まぁ seo をセオって読むやつは問題外。
850 :
始めるっす さん :2008/05/23(金) 17:35:52 ID:b0nY9q6k
>>846 いえ、業者の者ではありません(~_~;)
エクリプスのジャバーでしたが、CAKEを使うことになりました…
PDTとかも良いかなーと思いましたが、
ちと、芸が浅い(@_@。
何か良い、ツールを教えてくださいっす(^^)/~~~
>>849 セオはリスク管理できないから、
ダメーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー!!!!!!!!!
853 :
nobodyさん :2008/05/24(土) 01:49:40 ID:UmgGcxR0
CakePHPに限らない話だけど、PHP系のフレームワークで DBのトランザクション管理とかってどうやってる? SpringとかのDI/AOPに代わる画期的な方法とかあるの?
DBのトランザクション管理 と DI/AOP が どう関係があるのか?
>>854 ※ちょっとスレ違いでゴメン。
DI/AOPを使えば、ロジック層の前後で自動的にトランザクションの
開始とコミットを行うように設定できる。
だからロジック層では特にトランザクションを意識しないで
純粋にロジックだけを記述できる。
もし、ロジック層で例外が発生した場合は自動でロールバックもしてくれる。
他にもログの記述とかオブジェクト指向では対応できない
横断的な処理はAOPの機能を使ってメソッドの呼び出しの前後で
自動的に挟み込んでくれたりできる。
ってな感じでやってるとDI/AOP無しのアプリはきついなーと
思うんだけど、そこら辺はうまいやり方があるのかね?
社会科学:Data->Datas 自然科学:Datum->Data
>>855 できるかどうかという話と、
実際にやるのかという話は別問題。
たしかにAOPを使えば、そういうことが言語レベルで出来るだろう。
だが、オブジェクト指向で作られていても
実際には、トランザクションやログなど、よく使われる場所で
処理を割り込ませることができるような設計になっているから問題ない。
cakephp でサイトを一つつくります。 そのcakephpってどうする? 1.プラグインとかコンポーネントとか残したまま再利用。 2.もっかい新しくcakephpをダウンロードして、プラグインとか入れ直す。 1だと、コードがどんどんぐちゃぐちゃになりそうだし、使わないコンポーネントとかも残る可能性がある。 2だとプラグインとか入れ直すのが面倒下さい。 僕的には1ですが、みなさんいかがでしょうか。
>>858 追記
一個サイトをつくったあと、さらにもう一つの新しいサイトを作る場合。です。
好きにすりゃいいよ。
掲示板のシステムを CakePHP で作ろうと思っています。 モデルは 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.の動作をトリガーで実現する。 このようなケースはよくあると思うのですが、一般的にはどのような方法が使われている ものなのでしょうか?
>>861 それってアソシエーションを知った上での質問?
863 :
nobodyさん :2008/05/26(月) 16:03:07 ID:7/wrhW70
>>862 ああ…突っ込んじゃったよ。ほっときゃいいのに。
アソシエーションは Post hasMany Comment の関係で Post を1つ取得すると 自動的に任意の Comment が取得できるという、CakePHP 独自の仕様程度 にしか理解していませんでした。 もっと理解すれば上記の話はうまく解決できるという指摘でしょうか?できるだけ データベースの負荷はかからないように設計したいと思っています。 もう少し調べてみます。ご指摘ありがとうございます。
865 :
nobodyさん :2008/05/26(月) 16:29:06 ID:7/wrhW70
>>864 >Post を1つ取得すると 自動的に任意の Comment が取得できるという、
ヒント:
$ret = $MyPost->find($id);
echo count($ret['Comment']);
>>865 ヒント、ありがとうございます!
>>862 で「ほっときゃいい」と言われるので、何か失礼なことを書いてしまったのか
と心配になっていました。
> $ret = $MyPost->find($id);
> echo count($ret['Comment']);
はい、上記で Comment の数が取得できるのは理解できます。ただ、この方法だと
総数だけを取得するのにその他のデータまで同時に取得してしまうため、データベース
への負荷が余計にかかるのではないかと心配だったのです。
また、1つの Post だけを取得するのなら上記の方法を採用するのですが、今回は
Post の一覧なのでその数が数百以上になることも考えられ、できるだけデータベースに
負荷のかからない方法を採用したいと思っています。
非正規系になってしまいますが、posts テーブルに count 列を持てば、たった一つの
SQL で実現できるなとは思ったのですが、これが一般的な方法なのかどうか判断が
つきませんでした。
これは CakePHP のお話ではなく SQL のスレの方が適切だったのでしょうか…。
867 :
nobodyさん :2008/05/26(月) 17:15:08 ID:7/wrhW70
>>866 つ echo $Count->findCount($hogehoge)
ただし、コードが多くて読みにくくなってもよいならば。
サーバのリソース次第だろうけど、
>>865 にしたところで速度的に雲泥の差があるとは思えないけどね。
>>865 の方が投げるSQLは一つで済んでるはずだし。
実際にコード書いてテストデータ突っ込んでみて、検証してみれば?
>>867 ありがとうございます。
そして了解しました。不慣れな初心者なもので時間はかかるかもしれませんが、
考えられうる全ての方法を実際に検証してみようと思います。
確かに Comment のような小さなデータの場合、find($id) で総数をアプリ側でカウント
するのと、findCount() でデータベースにカウントさせるのではそんなに変わらないかも
しれませんね。ただ、Comment がカラム数 100 もあるようなデータの場合で、常に Post
に対して数百も付属しているような場合だと結果は変わるような気がします。そのあたり
も含めて検証してみようと思います。
要するにcakephpのmodelにカウンタキャッシュはあるのかって質問か。 あるの?
要するに、cakephpのリレーションはデータ無駄にとってくるけどなんなの?って質問か。 cakephp recursiveとかでググれ。変だから。
873 :
nobodyさん :2008/05/27(火) 01:20:24 ID:Dti8RTlW
そういえば毎回、findやfinallするときに引数$recursive指定するのってメンドイよな。 クラス化してメソッドを細分化したときなんてとくに、recursiveのパターン数でメソッドを さらに分解してしまうと大変なことになってしまう。 getPostWithComments() とかgetPostWithoutComments()とか。
なんかその設計が悪いんじゃないの・・
ビジネスロジックを律儀にmodelに入れてる悪寒 適度で良いんだよそんなの。細分化うざい。Controllerでやれ。 それでもやっぱりビジネスロジックまとめたいというなら modelとcontrollerの間にservice層入れる。 が、そんな規模のものはcakephpは想定してないんじゃないかね。
>>875 そういう問題じゃない。
getPostWithComments() とかgetPostWithoutComments()という
メソッドが出来てしまう問題はロジックを置く場所を変えても
どっちみち出来てしまうだろ。
これはrecursiveの違いでメソッドを作るか、
引数(プロパティ設定も含む)で指定するかの違いだよ。
関数作るのが嫌なら、getPost(withiCommentsを意味する引数);とするか
$this->プロパティ = withiCommentsを意味する値; getPost();
とするしかないんじゃね?
ビジネスロジックではなく、どこまでデータを拾ってビューに渡すかの処理と
考えれば、コントローラーで取得するデータの範囲を決めるのもまずくは無い。
その通りだと思う。悪寒の憶測で話したからずれたんだな。 CakeのModel拡張して、Withで同時に拾ってくるようなマジック関数入れると もっと綺麗かなと思った。findBy的な。
878 :
nobodyさん :2008/05/27(火) 14:40:04 ID:Dti8RTlW
先ほどの質問
>>873 を同僚に話したところ、ビヘイビア使えば?と言われてしまいました
behaviorって1.2から導入されたのか。 1.1しかいじってなかったのでピンとこなかったよ。
>>878 ビヘイビアですか・・・?
出来ないことは無いとは思うけど、
でもそれ、なんて名前のビヘイビアになるんだろう。
(名前がわかれば、ビヘイビアにするのが妥当か判断できる)
881 :
nobodyさん :2008/05/30(金) 15:00:54 ID:xGH68yw0
■PostgreSQLを使ったときのバグ 1.2.0.6311 beta(と最新のブランチ)で確認 $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を使っているので 問題は無いはず。その他のデータベースまでは見ていない。 えーと、それからアカウント持っている人 だれか公式に英語で伝えてください。お願いします。 あと、説明これで間違って無いと思うけど自信は無い・・・
1.2 stable キターーーーーーー!!! という夢を見たw
884 :
nobodyさん :2008/06/03(火) 15:08:24 ID:s/VzyqcV
データベースからboolean型の値を取得したとき 取得できる値は、0と1である・・・という仕様なんでしょうかね? データベースが、PostgreSQLの場合、't'が返ってきたり、 ソース見ると'TRUE'とかいう文字があったり、 ぜんぜん仕様がわからんのですが。
dreamweaver cs3 なんだけど、空の ctp ファイル作ると確実に 内部エンコーディングを sjis にしちゃうから文字化けするよね。 いつも新規作成 → 秀丸でutf-8変換 でやってんだけど。 で、現在、 あ とか 人文字だけ残したファイルをコピペしてんだけど。 なんかいい方法ない?
>>885 dreamweaverにデフォルトでUTF8と認識するってオプション無いの?
まあ、文字数が少なかったらどっちみち文字化けは
避けられないので、UTF8と認識するような文字をコメントで入れて
おくのが確実だと思うけど。
887 :
886 :2008/06/03(火) 17:45:48 ID:???
で、俺は何を聞こうと思ってここに来たんだっけ・・・?
>>885 俺もそれが原因でコーディングだけeclipseに乗り換えた。
ほんとは全部DWでやりたいのだけど・・・
>>886 ありがと!やっぱりそれしかなさそうだね。
>>888 仲間だ〜
で、教えてほしいんだけど、 eclipse と dw どっちが cakehp の開発効率あがりますか?
例えば、デザインは dw がいいけど、 PHPコーディングは eclips のが圧倒的にいいよ!
みたいな。
教えて頂ければ、幸いです。
890 :
nobodyさん :2008/06/03(火) 19:07:00 ID:Mx/TsVoL
>>889 そんなの人生いろいろ、人それぞれだろ。
891 :
884 :2008/06/03(火) 19:11:03 ID:???
PostgreSQLというか、データベースの扱いの仕様そのものがわかんね。 Boolean型を保存するときは、1やtrueなんかを適当に変換して保存。 呼び出すときは、データベースに入っているもの・・・というか ネイティブなデータベースAPIで取得した値をそのまま返すってのが 今の動きなんだろうか?(PostgreSQLの場合、tとf) 正式版になったら、統一されるのかな? データベースごとに戻ってくる値が違っていたりすると ややこしいなぁ
それはSQLがリテラルじゃないから、とかじゃなくて?
894 :
nobodyさん :2008/06/03(火) 21:45:23 ID:7GPFTIgo
896 :
nobodyさん :2008/06/03(火) 22:05:07 ID:7GPFTIgo
そもそもGrailsではテーブルがmodelに合わせて自動生成されるので型の不一致は起こり得ない
くるなっていったよね?
コントローラでの処理に応じて、Viewを切り替える事は出来ますか?
900 :
899 :2008/06/04(水) 18:17:38 ID:???
普通に$this->render()だろ?
>>901 ありがとうございます、一回も使ったことがありませんでした ><
1.2 RC出たのに静かですね。
stableではないのね
初期の1.2から相当変化したらしいけど、どれくらい変わったんだろ。 まとめサイトきぼん
セキュリティコンポーネントが扱いやすくなってるといいなぁ・・・
907 :
nobodyさん :2008/06/05(木) 19:52:47 ID:GvsgA2Ue
良い、IDE、エディタは、何ですか?
TextMateじゃないでしょうか?
IDEなんて重いから使わない。 とりあえずeclipse触っとけば?
emacs + php-mode + yahtml-mode + mmm-mode
911 :
nobodyさん :2008/06/06(金) 15:12:33 ID:ejUDGIWK
CakePHP 1.2RCを入れてみて、bakeを使ってみようと思ったんだけど、 array_intersect_key()が使えないとかいうエラーで動きません。 PHP4の環境なので確かにそんな関数は無いんですけど、PHP5にするしか無いんでしょうか?
>>912 どうもです。なるほどそういう仕組みなんですね。バージョンは7125でした。
console/cake.phpからbasics.phpは呼ばれてはいるのでパスの設定とかは問題ないようです。
とりあえず、cake.phpの中にfunction array_intersect_key()をコピーしたら動きましたけど、
何なんだろ。
console\libs\cake.phpでbasics.phpを呼ぶ前に関数を使ってるっぽい。 console\cake.php 156行:追加 require_once( CORE_PATH . 'cake' . DS . 'basics.php'); 226行:変更 if (!require($inc)) { -> if (!require_once($inc)) { でとりあえずbakeが起動した。
バグ報告だなw
テーブル作るとき、通常はプリフィックス無し、 テストはtest_suite_付とかで二重にテーブル定義必要じゃん。 めんどくせー。あっcake schemaってのがあるじゃんって cake schema使ってテーブル作ろうと思ったら、 PostgreSQLはまだちゃんと実装されてないのな・・・(´・ω・`)ショボーン かろうじてテーブルの作成は出来るみたいだけど、 データベースからschema.phpの生成でプライマリキーの取得がおかしいわ alter table系が動かないわ。
cakeからテーブル作成する需要ってあるの?
>>916 で書いたつもりだけど?
テーブルの作成を何度もやるのって面倒なんだよね。
prefixが変わるとテーブル名も変わる。
テストではprefixが変わるから違うテーブルで再作成。
DBMSが変わるとcreate文も微妙に変わる。
名前付きパラメータ(?)の正しい書き方ってありますか? 今は <?php echo $html->link('カテゴリー2', array('controller' => 'posts', 'action' => 'index', 'category:2')); ?> のように書いているのですが・・・
名前付きパラメータってなんだ??
921 :
nobodyさん :2008/06/11(水) 23:19:17 ID:Ox0RFxzt
>>919 <?php echo $html->link('カテゴリー2', '/posts/index/category:2') ?>
じゃ、ダメなの?
>>919 <?php echo $html->link('カテゴリー2', array('controller' => 'posts', 'action' => 'index', 'category'=>'2')); ?>
じゃ、ダメなの?
923 :
nobodyさん :2008/06/12(木) 13:48:51 ID:UzdM2zrv
おい、お前。そうお前だよ。 仕事でMySQL使って納品したのに、 MySQLのライセンス料払ってないだろ o9m
質問させてください。 特定のときだけ、 validateの特定のルールをスルーさせたい場合、 どのように指定すれば良いのでしょうか?
if ( 特定のとき ) { validateの特定のルールをスルー }
>>924 ひとまずmodelのチェックはスルーさせて、コントローラでチェックすればいい
>>923 GPLを適用すれば、MySQLのライセンス料は不要。
仕事で使っても商用ライセンスは強制じゃない
>>927 ライセンスも理解できないアホは相手しなくていいよw
929 :
nobodyさん :2008/06/13(金) 00:03:46 ID:VdaxJKXn
ヒント:Community Server
PHPでつくったシステムを納品するところには、PHPのソースコードを渡さないとだめだよ!
>>931 納品するところにはソースコード渡すね。
まぁ、ソースコードだし、見て改変するのは自由だけど、
その改変されたプログラムを保守/サポートするかしないかは、契約書とかで別途記載することになるんじゃねーの。
んなもん契約次第。
935 :
nobodyさん :2008/06/13(金) 07:18:43 ID:n3lmnd89
質問なのですが、 たとえば、 PostとTagがhasAndBelongsToManyの関係にあるとして、 各々のTagが、それぞれ何回使用されているかを調べたいのですが、 どのような処理が考えられますでしょうか? つまり、posts_tagsテーブルをtag_idでGROUP BYしてCOUNT(*)したような結果がほしいのですが・・・ (わかりづらくてすみません・・・) よろしくお願いします。
936 :
nobodyさん :2008/06/13(金) 11:35:00 ID:AIRweHgS
>>927 GPLライセンスだったらソースコードは無償で提供しなければいけないんですが。
ポケットリファレンス、予約しちゃったけど、 1.2への対応は大丈夫なんだろうか? だいぶ仕様かわってるけど・・・
>>936 PHPで作ったアプリ納品するときに、ソースコードを提供しろって
自分言っていることの意味わかっているか?
PHPはバイナリというものが無く、ソースコードそのものが
実行ファイル繩稚で、そもそもソースコードで
提供することしか出来ませんからw
ウェブサービスのように、バイナリ(=ソースコード)を
利用者に提供していないのなら、ウェブサービスの利用者に
ソースコードを提供する義務が無いのは常識。
それがいやってんで、GPLv3が出来たんだよ。MySQLはGPLv2な。
ちなみにGPLに”無償”で提供するという決まりは無い。
GPLを読まずに人からの伝聞だけでなんか言ってる
>>936 とかは一回ちゃんとGPLをチェックしなよ
使用するコンポーネントを動的に変えたいのですが、 各コントローラのbeforeFilterで $this->components = array('hogehoge'); のようにしても、すでにコンポーネントの処理が終了しているらしく、 意味がありませんでした。 このような場合、どういう処理を書けばよいのでしょうか?
942 :
940 :2008/06/13(金) 21:19:57 ID:???
>>941 レスありがとうございます。
それは各々のコントローラ(app_controllerでない)の__constructでいいのでしょうか?
ためしにPostControllerで
function __construct() {
parent::__construct();
$this->components = array();
}
として、
$this->componentsを見ると、ちゃんと空になっているのですが、
その後、
function beforeFilter() {
parent::beforeFilter();
pr($this);
}
とすると、
var $componentsで指定したコンポーネントのインスタンスが生成されてしまっています。
どうしてでしょうか・・・?
よろしくお願いします。
詰んだ… 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
補足 Cake1.2です。 テーブルはitems(フィールドはid,contentのみ) コントローラはItemsControllerのみ モデルはItemのみ チュートリアルに沿ってやっています。
大文字小文字のチェック クラス名の複数形と単数形チェック
>>945 今しがたやりました。
何なんでしょうね…
解決しました。 MacOSX君の優秀な"拡張子を表示しない"オプションのおかげで "index.ctp.html" -> "index.ctp"と表示されていただけでした。 お騒がせしました。
Winだったら罵倒されてるところだけどねw
>>942 たしか、CakePHPはすばらしくも(おせっかい?)
AppControllerで指定したComponentsの値と
そのサブクラスで指定したComponents値を
マージしているのです。
普通はサブクラスのComponentsの値のみ
有効と考えるのが普通ですが、なんとCakePHPは
AppControllerのComponentsを取得してあわせるのです。
RC1に移行してからsaveができなくって大変困ってます。 ちょっとお尋ねしますけど、 /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)とするべきだと思うんですが…。 どうか教えてください。エロい殿方。。
質問させてください! データベースを使わないモデルで $form->createを実行すると Fatal error: Call to a member function schema() on a non-object in 〜cake\libs\view\helpers\form.php on line 127 というエラーが発生してしまうのですが、 なにか対処法はないでしょうか?
フォームからGETで送信したとき sample?foo=1&bar=2 ではなくて、 sample/foo:1/bar:2 のようにしたいのですが、 何かよい方法はないでしょうか?
954 :
953 :2008/06/15(日) 02:20:24 ID:???
いまはredirectで書き換えているのですが、 できればredirect以外の方法がいいです。 よろしくお願いします。
>>953 リダイレクトするしかないんじゃね?
?〜&〜 で送られるのはブラウザの仕様だからどうしようもないし。
いや、?〜&〜 で送られてきたのを /〜/〜で送られたように
アクションの引数に入れる方法もあるのか?
ややこしくなりそうだけど。
自分は、GETで?〜=〜とかがあれば、/〜/〜に変換してリダイレクトする
コンポーネントを作ってAppControllerに入れている。
あと個人的な趣味だけど URL に : を入れたくなかったので、
:の代わりに=を使っている。sample/foo=1/bar=2
956 :
954 :2008/06/15(日) 06:49:31 ID:???
>>955 なるほど、、あれは仕様だったんですね。
コンポーネント化するというのはいいアイデアですね。
それから、たしかに、パラメータの区切り文字に「コロン」って見かけませんね。
Cake標準のpaginateのページ送り用パラメータは「コロン」で区切られますが、
あの区切り文字を変更する方法はありますか?
ヘルパだかコンポーネントだかに書いてあったとおもうよ。paginate.
"モデルAのid:Bのレコードと関連している"という条件でモデルCのレコードをfindAllしたいのですが、第一変数を"A.id = B"としても検索できません。。。 queryを打つしかないのでしょうか。
追記:関連はHABTMです。
とりあえず切り分けていこうや。 引数なしでfindAllしたら、ちゃんとモデルCの内容は取れるかい?
961 :
nobodyさん :2008/06/16(月) 10:22:21 ID:1xj3bjFo
>>938 なこたわかってるよ。
システム開発の仕事って、そのソースコードを売って儲けてるんだろ?
>>961 > システム開発の仕事って、そのソースコードを売って儲けてるんだろ?
そうとは限りません。MySQLはどうやって儲けていると思う?w
>>960 取れます。
findAllすると、まずCをSELECTし、そのあとAをCとJOINしてSELECTしているようです
これだからPHP界隈は困る、という流れだな。
「これだからPHPは・・」という使い古されたパターンですね、分かります。
>>964 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を明示してみるとか?
symfonyは本まで買って、設置に苦労したのに。 CakePHPは、設置が簡単過ぎてワロタ。 でも、いい本が無いね。
簡単なんだから本は必要ないだわさ。 ,、-──────-、 / `ヽ、 /● .● \ / ⌒ ▼ ⌒ \ / 彡 ∵人∵ ミ \ / ミ ミ ,r-ト-、 ,' f /⌒ヽ! ,' i L、-、ヽ\
1.2正式リリースまだ〜? これから勉強しようと思うけど正式版で仕様変わったら萎える
もうそんなに大きく変わるとこはない・・・といいけど。
しかし、RC1での変更っぷりを見るとstableまで待ちたくなるw
1.2.0.6311 betaから1.2.0.7125 RC1にしたら $this->requestActionでadmin routingにできなくなったんだけど こういう仕様になっちゃったのかな 困った
>>972 俺も俺も。一旦はRC入れたんだが戻したw
そうなると、明日発売予定のポケットリファレンスは 完全に時期がおかしいよね。 ・・・まぁ、予約したけどw
質問させてください。 Model内の$displayFieldに$belongsToで設定した別テーブルのカラムを 設定するにはどういう風に記述すれば良いでしょうか?
私は初心者ですが。 これから新しい安定版が出るって時に、 わざわざ古い方の解説書は買いたくない。 本棚にあるPHP4関連の本は、もはや軒並み時代遅れ。
>>978 フレームワークのコードは、varに::みたいなPHP4ばかりだろ。本当に意図不明だけどな。どこにPHP4の需要があるのか訊いてみたい。
>>979 ちょっと古めのサーバとかのサービスの追加更新とか?
レン鯖でPHP4まだ使ってるところもあるからそういうのにも対応できるとか?
まぁ、フレームワークも海外産のものばかりだし、海外の事情はどんななってんのか分からないから、
なんともいえないんじゃ。
開発開始もPHP4のサポート切れる話が出る前だったから、互換考えて作ったんじゃないの。
ある程度下位互換するし。
バージョンの違いすらも柔軟に対応できるってのもフレームワークとして、コンセプトが間違ってるとは思わないなぁ。
PHP4の需要 = 長く使われているソフトは、まだまだ使われる。
>>980 >バージョンの違いすらも柔軟に対応できる
いや、逆に、5に対応できてないからw
PHP5環境でPHP4の文法にトリッキーな小手先の技をちりばめたフレームワークを使うのがどれほど負担になってるか知らないだろw
それで、どれほど負担になっているのですか?
フレームワークを使う側の人間からすれば 別にぜんぜん負担になってないけどな。 自分で書く部分に関してはPHP5で書いて問題ないし。 さて、俺は、その「トリッキーな小手先の技」というものが 何を指しているのか知りたいわけだが。
中身のないレスをした人が、そのあと中身のあるレスをした試しはほとんど無い
リファレンス本、どうだった?
Cakeを使い始めて二日目。 ファイルのアップロードをするプログラムを書いているのだけれど、 アップロードされたファイルをDBではなくてストレージに(永続的に)保存する場合、 cakeのディレクトリ構造のどの中に入れるのが正しいのでしょうか? それらのファイルはそのまま表示しないファイルなので、 外から見えないようにwebroot/files以外の場所で保管したいと考えています。
looks like RC2 might have to wait for the weekend 英語読めない・・・
>>988 リリース候補第2版は週末になりそうです
RCっていくつまであるの?
>>989 ありがと。
・・・って、もうRC2がでるのか!
stableはいつになるんだろう・・・
>>986 使いやすそうな感じ。
1.1と1.2でどっちで使えるかがアイコンで表示されてるから分かりやすいかな。
堂々と1.2対応って書いてあるけど・・ まだ気が早いのでは
リファレンス本買ってきたよ。 けっこういい感じ。 お〜こんな関数もあるか。って感じ。 少なくとも今まで出てきたcakephpの本よりは 1.2に対応している。 おすすめです。
995 :
nobodyさん :2008/06/19(木) 22:36:59 ID:1PdTbWbl
漏れsymfonyユーザーだけどCakePHPの良さが知りたいんだ おまいら教えて
>>994 >>少なくとも今まで出てきたcakephpの本よりは 1.2に対応している。
そりゃそうだろ・・
初心者でCakePHPからはじめようとする奴が多いな 本買って覚えるレベルの奴しかおらんからホッとした どういう関数が使われてるかソース解析する方が 長い目で見れば早道だよ。
いい本でも1年後振り返ると何という糞コードなんだということは PHPにはよくある
PHPは経験じゃなくて、集中力といっても過言ではない 過去の経験よりも、直近2年くらい死ぬほど努力してる奴が はるかにレベルが上になる
PHPは3年前の努力の成果は、あまり役に立たない それなら素人レベルからCakePHPを2年くらい みっちり努力した方がはるかにレベルの高い技術者になる なので、結局は毎日努力できる集中力だよな 今レベルが高くても、努力維持できなければ 2年後には金にならん技術者だ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。