【PHP】フレームワーク CakePHP 2ホール目
乙。
深夜遅くに乙。
つ「帰国子女の新米プログラマー」
8 :
nobodyさん :2007/11/14(水) 21:45:34 ID:Y+NYefM3
先輩方、 なぜ $this->set('hoge','hoge'); といちいちコントローラーからviewへ送るものを 指定する必要があるのか不思議に思うのですがいかがでしょうか。 $this->set(get_defined_vars()); を app_conrtoroller に直接書いておくというのが 一番手間かからず楽だと思うのですが、何かデメリットありますかね ご指導、ご鞭撻のほど、よろしくお願いします。
>>8 $this->set()を拡張するって事?
そういう風に纏めても結局、コントローラとアクションの
組み合わせごとにビュー側へ渡す変数ってバラバラだよね。
変数を渡したくない時もあるし、条件ごとにセットしたりしなかったり。
そーゆー所ってのは往々にして関数で一括りにしようとすると大変な思いをする。
んで後からキモい拡張を繰り返す羽目になる。
つーかね、$this->set();をいっぱい書くのが嫌だっつーんなら
こういう書き方があるぞ
$this->set( array(
'foo' => $foo,
'bar' => $bar,
));
10 :
nobodyさん :2007/11/15(木) 16:51:14 ID:k/tuboV7
>>9 ありがとうございます。
$this->set( array(
'foo' => $foo,
'bar' => $bar,
));
といった書き方でやることにします。ありがとう!
>>9 人のアイディアを握りつぶすのが得意な方ですね。
デメリットがないかと書いていたから、 デメリットと、 おまけでそれへの対処の一例を書いてるだけのように見えるが... ゆとりか?
>>11 そういう風に見える?
たしかに口は悪いけど、こういう事ってひとりじゃなかなか
気付かねーと思うんだけどな
習い事でも何でもそうだけど、最初は人の真似から始まるじゃん
プログラミングだけ個人のアイディアが〜とか言ってたら
切磋琢磨できないよ
//まあ、苦労するのもいい勉強だけどな
ダイアログ的な汎用のページを作る方法って無いかな? たとえば、商品入力ダイアログボックス 検索も出来て、クリックして選択。 そういうページだけど、これは汎用。 あるページの商品入力にこのダイアログを使う。 また、違うページの商品入力にもこのダイアログを使う。 ダイアログ的な用途だけど、ウインドウポップアップで 出てくるのではない普通のページ。
それはJavascriptの仕事なんだぜ
>>13 > たしかに口は悪いけど、こういう事ってひとりじゃなかなか
> 気付かねーと思うんだけどな
>
> 習い事でも何でもそうだけど、最初は人の真似から始まるじゃん
> プログラミングだけ個人のアイディアが〜とか言ってたら
> 切磋琢磨できないよ
ヘタレのくせに自意識過剰じゃね?
17 :
13 :2007/11/16(金) 15:42:29 ID:???
へたれで自意識過剰なので、スキルアップのため
ぜひ
>>16 様の神実装を参考にさせてください><
findAllを使うと $data[0]['Model']['column'] の形式の配列が帰ってくるんですが、これを $data[0]['column'] の形式で取得したいんです。何か楽な方法って用意されていませんかね?
>>18 app_model.php内に以下のようなコードでも入れてあげれば?
function hoge($data)
{
foreach($data as $i => $data2){
foreach($data2[$this->name] as $column => $Value){
$newData[$i][$column] = $Value;
}
}
return $newData;
}
で、各々のモデルでfindAllした後に$data[0]['Model']['column']形式のデータを引数にしてhogeする
>>20 さん
なるほど、ありがとうございます。
やっぱり自分で作らないといけないんですね。
お手数おかけしました。
東京では勉強会も企画されてるのか。 都会の人はうらやましいな。本当に。
じゃあ田舎でもやろうぜ!@福岡
福岡は都会だろ@佐賀
最低と比べちゃすべて上だわな。
CakePHPガイドブック、誤字脱字多すぎだろw
簡単と言われるCakePHPも俺には難しい…orz オマイラ天才だな
>>27 まず一度自分で簡単なMVCフレームワークを作ってみると
理解が段違いに早くなるよ。
>>26 途中までしか読んでないが説明と画面のスクリーンショットが一致してないとかゴロゴロあるな
>>26 誤字脱字以前に最初からbakeの使い方を説明しているのはどうなんだろ。
Railsから来た人ならわかるのかも知れないけど、Cakeから始めたら
絶対に混乱すると思うんだが。
modelとか複雑な例を出してるし、コードが長すぎて理解できないっしょ。
それはあるな。導入編で一気に作ってから実践編で基本に立ちかえってる。 それと実践編のサンプルの仕様が良くわからない(実践的なものと思えない)
32 :
nobodyさん :2007/11/20(火) 15:35:43 ID:WpMCnsjr
質問させてください。
public_html
└app/
└cake/
└vendors/
└hoge/(任意のディレクトリ)
と配置した場合に、hoge/ はcakePHPの影響を受けたくない場合はどうしたらいいんでしょうか。
具体的にはxreaのlogディレクトリで、中にはphpmyadminが入ってます。
http://sample.sxxx.xrea.com/log/phpmyadmin/でアクセスすると 、
cakeのエラー:you are seeing this error because controller LogController could not be found.
.htaccessの問題かとは思うんですが、そもそもディレクトリ配置の仕方に問題アリですか?
>>33 publicなところにコアを置くのは感心しないな。
ツリー構造をしたデータをオブジェクトとしてうまく扱う方法ってあるの? つまり、$model->findTree('id = a1') とかやったら、 - a1 +- b1 +- c1 +- c2 +- b2 こんな感じでツリーのデータとして返してくれる感じ。 参考までにほかのO/Rマッパーの話でもいいけど。 とここでふと思ったけど、自分のモデルに対してアソシエーション設定すればうまく行くのか?
railsのscaffoldがcakeのbake? cakeもrailsみたいにコマンド一つでファイル作ってくれればいいのに 質問に答えていくのがなんか面倒
37 :
nobodyさん :2007/11/21(水) 08:30:39 ID:Cl2dTAkZ
答えるのも面倒だし、M・V・C別々なのも面倒だよね。
wraper書きゃいいだけじゃん。
>>35 TreeBehaviorといふものがあつてだな
ユーザー登録によくある、登録するメールアドレス宛に一回メールして、そこに記載されているリンクをクリックして登録みたいな処理ってコントローラーにベタガキかな?
41 :
nobodyさん :2007/11/22(木) 08:23:16 ID:nlNH1bOE
ベタ書きの意味が分からないけど、メソッド分けて、それぞれにモデルとビューを作ればいいんじゃないの? コンポーネントにすべきか、という意味?
メールを使ったユーザー登録をcakeに書くならどういうのが最適かな程度の意味でいったんだけど
43 :
nobodyさん :2007/11/22(木) 12:06:19 ID:AuFQqZEI
普通に書けばいいんじゃないかな。
cakeやばい、どうやばいのかはやばすぎるので言えないぐらいやばい 一回自分でサイト構築までやってみて、これ試すと相当やばい PHP野郎にとっては麻薬以上にやばい
それっていいって意味?
Railsの方がもっといいけどね。
れいるずだとぱふぉーまんすちゅーにんぐがたいへんそうなのです
cakeの勉強会、二つも企画されてるのか。
AjaxとかJavascriptに手を出したことがない初心者なんですが、 Cakeのヘルパーからこれらの世界に入っていくのは不味いですかね? ある程度本でも何でも読んでから出直したほうが良いのかな
>>49 そういう人用のヘルパーだと思われるよ。
普通に書きたきゃ書けばいいし、ライブラリ使いたきゃ使えばいい。
まずいも何もないと思う。
ログインしてなかったら「ここは何々のページです。ログインしてください。」みたいに、viewの表示を変えるとかってview側でif分岐するしかないのかな。 あまりviewにロジック組みたくないんだが。
普通ログインが必要なページにリクエストしてきて ログインしてなかったら一括でログイン促すページにリダイレクトだろ おまえwebアプリ作ったことあるのか?
>>50 そうですか、助かりました。
でも少しはAjax, Javascriptの本もかじってみようと思います。
ありがとうございました。
ログインしてなかったら「ログイン」 してたら「ログアウト」を表示したいってことじゃないの?
いやそのページが何をするページかだけ説明をいれたいから飛ばすとかは無理。さすがにWebアプリ未経験ではないわ。 ログインしてない時はグローバルナビのリンク先urlでも変えて、ログインフォームと新規登録リンクと個別説明ページに飛ばすか できれば同じurlにしたかったが。
なんか意味わからない文章なったから放置で…
よくわかんないけど「ここは何々のページです。ログインしてください。」って テンプレートだけ作ってコントローラから何々の部分のメッセージを設定して renderればいいんじゃないのん
59 :
nobodyさん :2007/11/24(土) 14:44:27 ID:+GWOZRBH
僕は ○ログインしている場合 view/layout/default.thtml に if($_SESSION['Login']['email'] != ''){ $this->render('loginok.thtml');} (ログイン中のエレメントを表示させる) ○ログインしていない場合 view/layout/default.thtml if($_SESSION['Login']['email'] == ''){ $this->render('loginng.thtml');} (ログインしてね♪ボックスを表示させる) という処理でわけてますね。 わかりやすいし、いいと思いますよ。
どっちにしろviewでロジックは入れなきゃいけないね。 エレメントにしておいて、コントローラで切り替えるってのはいいかも。
Cake1.2系使ってみてるんだけど、Viewでエラー出すときのメソッドって変わってるよね? <?php echo $html->tagErrorMsg('Post/body', '本文は必ず入力してください。')みたいだったやつ。 Modelでメッセージ内容決められるようになったから。 あとエラーって一個ずつしか出ないけどまとめて表示とか出来ないの? <?php echo $html->tagErrorMsg('Post/body', '本文は必ず入力してください。') ?>
>>61 $form->input()を使えばエラーも一緒に表示されるようになる。
エラー文はmodelでも指定できるし、今まで通りControllerでも
指定できるけど、tagErrorMsgは無くなったので、inputの第二引数に
messageとして渡してあげればOK。
一個のinputに対してエラーを全部表示するのはコアを触らないと
無理じゃないかな。よく知らん。
お答えありがとう。 一個ずつしか出ないならJavascriptの使用を強制してエラー出してあげるしかないかな
フォーム周りやヴァリデーションに関してはEthnaのほうがわかりやすいなぁ
べ、勉強会、ど、どうだったの!?アッー
ケーキももう腐りかけなんかなぁ
67 :
nobodyさん :2007/11/26(月) 21:32:38 ID:g6VI9o/i
今勉強中だからそれは勘弁して欲しい。
Railsにようこそ
69 :
nobodyさん :2007/11/26(月) 22:37:57 ID:9laXyXH+
それは断る。
このスレは、ホモが集まってんの?
たしかに楽なんだけど 細かい部分で変な仕様っていうか不具合っていうか いまいちな動作するよねえ validationとかsaveとか おかげでソースとにらめっこで時間かかる…
72 :
nobodyさん :2007/11/27(火) 07:25:54 ID:q198YkJr
もちろんフィードバックはしてるんだよな?
validationは2系ならよいんじゃ? saveはidも更新されちゃうとかか?
74 :
nobodyさん :2007/11/27(火) 11:12:10 ID:O5dAXXRh
テーブル設計のとき、外部キーは「テーブル名_id」と命名しますよね。 テーブル名が「prefix_テーブル名」の時は「prefix_テーブル名_id」となるんでしょうか? また、テーブル名は複数形ですか?
環境をまず言うべきだ
>>72 そこまでまだ使いこんでない
>>73 2は少しよさそうだね
なんかわかりにくいというか 仕様が曖昧だよね
まあ楽につくろうっていうのが趣旨だからしかたないのかもしれない
もうちょっといじってみる
>>74 日本人じゃないから仕方が無いけど、
単数と複数の意味を考えよう。
テーブルとは、レコードの集まりだ。
で、一つのレコードは、一つのもの。つまり単数だ。
だからレコードのID・・・つまり一つのもののIDなのだから
単数形_IDになる。
そしてその集まりであるテーブルは当然複数形となる。
ついでにいうと、テーブルのレコードに相当するModelは当然単数形だし、
そのモデル(単数)の一覧(複数)を表示したりするコントローラは複数形となる。
単数形と複数形の使い分けはこんな感じ、
あと残りの単語の区切りがアンダーバー区切りか頭大文字かはクラス名は頭大文字
ファイルやテーブルはアンダーバー区切りとなる。
テーブル A hasMany B テーブル B hasAndBelongsToMany A のときの A のデータの編集(新規追加)画面を作ってる Aの編集画面で、Bのデータを持ってきて表示・選択できるところまでできた で、Aのデータをsaveするときに、Bのデータのsaveとかvalidatesは自動でやってくれるの? この辺り、いまいちややこしいなああ
>>78 続きだけど
この場合、自前でvalidatesするときはどこでするの?
AとBを関連づけるための A_Bテーブルも作ってるけど A_Bモデルでやるのかな?
それともAモデル?
Bモデルだとデータの形式が違うから AモデルかA_Bモデルだとは思うんだが…
80 :
nobodyさん :2007/11/28(水) 03:05:53 ID:k8OzrBLt
1.1で特定のコントローラーだけtagErrorMsgでエラーメッセージがでなくなったんですが、同じ現象にあたったひといませんか? コントローラ内で pr($this->User->invalidFields()); とかってやるとちゃんとvalidateは行われているようなんですが・・・
81 :
nobodyさん :2007/11/28(水) 14:51:33 ID:Zvh5a2IN
cakephp 動作がすげー重いような気がするんだけど・・・ どうなんすか。先輩方。
何と比べて? ただの一枚のphpファイルだけで完結するものと データベースにアクセスするものを比べたら そりゃ重いのは当然だと思うが?
CodeIgniterなどお召し上がり下さい、ふくよかなお方
CakePHP使ってる人たちは、他のPHPフレームワークをどう見てる?
railsは神
86 :
nobodyさん :2007/11/29(木) 17:42:41 ID:IwtVKe0+
>>82 フレームワークcakephpを使ったプログラムと
普通にベタ書きでプログラムを書くのと比べて。
馬鹿すぎてわらた
さすがにネタでしょう。
89 :
nobodyさん :2007/11/30(金) 18:57:34 ID:uOWFJHM3
エラー文忘れましたけど、 fatal で 30秒どうのこうの・・・というエラーが出るんですよ。 更新キーを押してもなかなか表示しなかったり。 キャッシュ使わないときついんですかね。cakephp。 プログラムのみならある程度いけるんですが、画像使うともう厳しいくらい重いですね。 なんか良い方法ないでしょうか。
共有サーバやめたらいいんじゃないかな
91 :
nobodyさん :2007/11/30(金) 21:45:10 ID:uOWFJHM3
>>90 ありがとうございます。
今でました。
Fatal error: Maximum execution time of 30 seconds exceeded in /home/hoge/www/hoge/cake/libs/session.php on line 154
セッション周りがおかしいんですかね〜。
ちなみにcakephp1.1 サクラサーバーのプロっていうレンタルサーバーですね。
レンタルサーバーでも他のプログラムならさくさく動くんですが・・・。
そのエラーを出せと言われたら、俺は速攻で無限ループを書くだろうな。
オマイラ一つのMVCセットを書くときにどんな順番や頭のロジックで書いてる?
複合で
95 :
nobodyさん :2007/12/04(火) 19:35:56 ID:5jWwGUYJ
M C V の順番かな。
頭の中ではVMCの順で考えて、書くのはMCVかな。 話が変わってしまって申し訳ないけど、 1.2のcake/libs/session.phpの470行目 $config = CONFIGS . Configure::read('Session.cookie') . '.php'; ってなってるけど $config = CONFIGS . Configure::read('Session.save') . '.php'; の間違いじゃね? 1.1だと $config = CONFIGS . CAKE_SESSION_SAVE . '.php'; ってなってるし。 ticket出したいけど英語ができない・・・orz
1.2のcake/libs/session.phpの470行目 $config = CONFIGS . Configure::read('Session.cookie') . '.php'; ってなってるけど $config = CONFIGS . Configure::read('Session.save') . '.php'; の間違いじゃね? をそんまま訳せばいいだろw
機能の豊富さで1.2系つかいはじめたが、もしかしてまだ実用的には早かったかな? 全然話違うけど、フォームの確認画面はググってすぐ見つかる方法くらいしかないんだろうか。そもそもcake使っているものに確認画面が見当たらない
deletelにしてる奴いるのか?
せめてtinyurlとか使うだろ常考… 心優しい奴だな
deletelわらた
いま気づいたw
なんかログイン画面がでてきたよw
IEイラネって事でしょ
108 :
nobodyさん :2007/12/11(火) 12:31:59 ID:fmpEROAG
>>107 タイトル:
<?php echo $html->input('Post/title', array('size' => '40'))?>
っていうのは $this->data['Post']['title'] に格納されるから。
ようは $this->data['Post'] ってのは Postモデルのデータってこと。
よくわからなければ まず pr($this->data); をやってみるとセクシーになるよ。
いや〜ん
あは〜ん
あのー 意図的に404エラー出したいときはどうすればいいですか? AppController内で404エラーページを表示する共通のメソッドがあるんだけど どうもうまくいかないっす $this->cakeError('error404', array(array('url' => ???))); こんな感じかなあという感じなんですけど ???の部分がわからない $this->cakeError('error404', null); とかにすると $param['url'] か $param['action'] がないっておこられてしまいます デフォの404エラーページが表示できればいいんですけど なんかいい方法ないですかあ?
112 :
111 :2007/12/11(火) 15:55:13 ID:???
あ、ちなみにビューを切り替えるとかいうのはなしでお願いします HTTPステータスコードが404にならないと思うので… よい方法があればおたすけください…
113 :
107 :2007/12/11(火) 15:58:30 ID:???
>>107 ありがとうございます。それは理解しているつもりなのですがaddの時は
$this->Post->save($this->data)
でeditの時は
$this->Post->save($this->data['Post'])
なのはどうしてでしょうか?実際$this->Post->save($this->data)でも
更新されるようですし。
114 :
nobodyさん :2007/12/11(火) 17:40:19 ID:MudQMHo6
フレームワークでファイルのアップロード処理を書くと、どうも不細工になってしまう。 うまくフレームワークとなじませられないというか・・・。
>>111 ソース見たらURLは単にメッセージ表示のために使われているだけみたいだから
こんなのでもいいんじゃないの? cake 1.2 pre-betaの場合。
$this->cakeError('error404',array(array('url'=>'アドレスバーに書いてあるURLミロ')));
116 :
111 :2007/12/11(火) 18:17:07 ID:???
>>115 レスありがとうです
やっぱりそんな感じになりますかあ
AppControllerに書く場合、URLは $this->here とかでいいんでしょうか?
なんかしっくりこない気がするんですけど
他にもよい方法ありましたらよろしくおねがいします
マルチしね 無能
>>113 書き方の違いでしょ。
この例の場合はどちらでもOKだと思う。
二つ以上のモデルに格納するデータをフォームから送るなら
$this->dataにすべきだね。
119 :
111 :2007/12/11(火) 22:52:21 ID:???
>>117 おれのこと?
マルチなんかしてないけど?
というか他にCakePHPのスレあったっけ?
120 :
111 :2007/12/12(水) 00:43:10 ID:???
フォーラムにも同じような話題でてたんだな
しかし決めつけはひどいな 別人だよ
>>117 おまえが無能だ
んで、フォーラムにでてるように array(array('url' => 〜)) をつかうとうまくいかない場合ある
array(array(action)) つかったほうがいい
しかし、この辺りがCakePHPはなんかいまいちスマートじゃないね
121 :
nobodyさん :2007/12/12(水) 13:47:30 ID:fuv5QvzR
モデルのヴァリデートにNgWord判定させるにはどうしたらいいのですか? cake2日目ではまってまっすん
正規表現でそのワード弾けばいいんじゃない?
123 :
121 :2007/12/13(木) 10:54:35 ID:???
>>122 レスありがとうございます。
正規表現ではじくのは考えたのですが、NGワードをDBで管理してあとから追加や削除をできるようにしたいのです。
ヴァリデートに関数呼び出しなどを書く方法はあるのでしょうか?
言葉足らずですみませんです。
124 :
121 :2007/12/14(金) 13:58:00 ID:???
自己解決しました validate() をオバーライドするか、別途関数を呼び出してチェックすればいいみたいです。 save()の第二引数に falseを指定すれば、save時にヴァリデートしなくなるようです。
125 :
nobodyさん :2007/12/14(金) 23:47:10 ID:dPU6DaHz
オバーライドwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
一つのテーブルに10個のフィールドがあるとして半分ずつを別の機会にsaveしたい時は後に保存するほうは空の値を許可するにしなきゃいけないんだろうか。すべて必須項目にしたいんだが。 自分でModelに複雑なValidationを実装するのかな
127 :
nobodyさん :2007/12/15(土) 05:19:24 ID:Ybu1PDKf
CakeSWXPHPの使い方で良いサイト知らない? ActionScriptの方の使い方が難しくて、何かわかりやすいサンプルを探してるんだけど。 具体的にはFlexのMXMLとの連携のコードを全て公開してくれてるところ。
1.2系だとHABTMも標準でsaveできるようになったんな。すごい便利
>>129 諸刃の剣の悪寒
いじりたいときは返って面倒
まあそのまま使うときはよさそうだね
モデル書くときって簡単なSQLでもfindとか使わずに queryでSQL文が見えてた方が開発効率がよくね?
返ってくるデータが予測つかない人はそうだな
>>131 俺はすでにそれじゃだめだな。
CakePHPつかう以前からの話だが、
何かのデータを保存・・・時にほかのテーブルにも保存
なんて処理をやりたいことがある。
SQLでいえばトリガーでやるところなのだが、
トリガーはDBMSに依存してしまう。
そういうときにフレームワークで処理を割り込ませられると便利。
CakePHPでいうBehaviorの仕事だ。
それから、俺は、Behaviorを使うことで SQL文の拡張のようなことをやっている。 たとえば・・・これは俺が実際に使っている例ではないんだが、 全文検索をするための構文はDBMSによって違う。 しかし、それがなんであれ, $conditions = array('field' => 'FULLTEXTSEARCH ' . $keyword); という風にFULLTEXTSEARCH キーワードを条件文に使用できる。 あとはBehaviorのbeforeFindで条件を調べて DBMSにあわせた適切な構文に置き換えるだけ。
>>126 saveに渡す配列にフィールドのキーが存在しなければvalidationもされないし
データ更新もされないから気にしないでOK
Paginationまわりがわかりにくいと思うのは俺だけ? 特に1.2 フレームワークそのままの形だけの使い方をしている分にはいいんだけど データ取得の命令がfindAllがpaginate関数になったりと、 理由はわからなくは無いんだけど、どうも設計に違和感を感じる。 とりあえず、1.2用のコントローラー以外(たとえばComponent)でも 使えるような汎用的なコードを書いておくよ。といっても怪しいけどな。 変なことをしているかもしれん。まあ俺が見つけた方法ということで。 しかし、コントローラ以外からコントローラのpaginate変数を設定したり paginate関数を読んだりするのが気持ち悪い。 もっとスマートな方法ないのかな。 ※$controllerはどこからか取得 $model_name = 'Post'; loadModel($model_name); $model = new $model_name; $conditions = array('id' => '> 3'); $controller->paginate[$model_name] = array( 'limit'=>2, 'page'=>1, 'conditions'=>$conditions); $data = $controller->paginate($model); pr($data); //検索情報 pr($controller->params['paging'][$model_name]); //ページ情報
137 :
nobodyさん :2007/12/19(水) 19:37:24 ID:nmvrwuDT
recursiveが2以上のアソシエーションを動的に変更する方法がよくわからない。 例えば blog ってテーブルがhasManyで post ってテーブル持ってて、そのまたさらにhasManyで comment ってテーブルを持ってたとする。 普段はそれぞれは一覧で表示したいのでlimitを10くらいに設定してるんだけど、 ブログの一覧からpostとそれに紐付くcommentを全て取得する際に $this->Blog->findAll(); でコメントだけはlimitを3にしたい。 $this->Post->hasMany['Comment']['limit'] = 3; $this->Post->bindModel(array('hasMany' => array('Comment' => array('limit' => 3)))); とか試したけど、もう無理。 何か間違ってる?
出来ないこともないが、 テーブル名を複数形にしない時点で 自分で調べてなさすぎ感が伝わってきて アドバイスしたい気持ちになれない。
139 :
1/3 :2007/12/20(木) 04:06:27 ID:XdoaO407
調べてないつもりではないんだけど、確かに情報を小出しにしてるこちらが悪かった。 ごめんなさい。 誤解を生まないようにもう一度説明すると、 blogs テーブルはBlogモデルの中で var $hasMany = array('Post' => array('classname' => 'Post', 'limit' => 10)); postsテーブルではPostモデルで var $hasMany = array('Comment' => array('classname' => 'Comment', 'limit' => 10)); そいで最後に commentテーブルがCommentモデルでそれぞれ定義されてたとして。 普通はコントローラーで最初に var $uses = array('Blog', 'Post', 'Comment'); ってやっておいて、 $blogs = $this->Blog->findAll(null,null,null,null,null, $recursive = 2); でそれぞれ count($blogs['Posts']);// が10件 count($blogs['Posts']['Comments']);// が10件 入るよね。
140 :
2/3 :2007/12/20(木) 04:06:58 ID:XdoaO407
でもblogの一覧から全てのPostとCommentを取り出すのがリs−スが勿体無いときがあったとして、 1.Postを3件だけ取り出したい 2.Commentを3件だけ取り出したい とすれば、 1のPostのほうは $this->Blog->hasMany['Post']['limit'] = 3; なり $this->Blog->bindModel(array('hasMany' => array('Post' => array('limit' => 3)))); なりしてやればあとは $blogs = $this->Blog->findAll(null,null,null,null,null, $recursive = 2); で3件だけPostを取り出せるんだけど、 2に関しては $this->Post->hasMany['Comment']['limit'] = 3; をやっても $this->Post->bindModel(array('hasMany' => array('Comment' => array('limit' => 3)))); をやっても、 その後 $blogs = $this->Blog->findAll(null,null,null,null,null, $recursive = 2); これをすると count($blogs['Posts']['Comments']); は10件取り出されてしまうんですよ。
141 :
3/3 :2007/12/20(木) 04:07:32 ID:XdoaO407
自分では $this->Blog->findAll() でblogsテーブルの直下のhasManyは動的にアソシエーションできるんだけど、 そのさらに下のアソシエーションに関しては動的に変更できなくて悩んでるんだけど、 何か決定的に間違ってる? 普通は出来るもんなんだったら、 別のところで自分が途方も無いケアレスミスを犯しててたまたま出来てないだけだってわかるだけでも 対策考えれるからありがたいんですけど。
あああ、推敲したはずなのに…。
>>139 の
> そいで最後に
> commentテーブルがCommentモデルでそれぞれ定義されてたとして。
は
> そいで最後に
> commentsテーブルがCommentモデルでそれぞれ定義されてたとして。
~~
の間違いです。
重ね重ねごめんなさい。
143 :
nobodyさん :2007/12/20(木) 13:00:08 ID:rEyzQF0b
$this->Blog->Post->hasMany['Comment']['limit'] = 3;
144 :
nobodyさん :2007/12/22(土) 00:03:39 ID:DskgbOKQ
今の最新バージョンいくつ? ダウソしようと思ったけど、有償なんだな
>>143 !!!!まさかそんな簡単な解法があったなんて!
ありがとうございます!
本当に俺の単純ポカですね。
どうでもいいけど、ドミネーションウェアをフリーウェアだと勘違いしてる人は多そう
さあ盛り上がって参りました! dom・i・na・tion ━━ n. 支配; 優勢; (pl.) 主天使. do・na・tion ━━ n. 寄付; 献血, (臓器などの)提供; 寄贈物; 寄付[義捐(えん)]金; 【コンピュータ】シェアウェアの寄付金[使用料].
主天使ってなに?
管理職
質問です。 共有サーバーにCakePHPを入れたいと思い、アップしてみたのですが、 mod_rewriteの設定で躓いてしまいます。現在の状況は下記のとおりです。 □/ ├□cake ←CakePHPのファイルが入っている │├□app ││├□webroot │││└□.htaccess ←@ ││└□.htaccess ←A │├□cake │├□docs │├□vendors │└□.htaccess ←B └□public_html ←ドキュメントルート(変更不可) └index.php ←C @ 「RwriteBase /app/webroot」を追加 A 「RwriteBase /app」を追加 B 「RwriteBase /」を追加 C 「include('../cake/index.php');」のみを記述 これで実行すると、mod_rewriteが設定されていないように表示されてしまいます。 しかし、サーバー側では正常にmod_rewriteが機能しています。 どのように修正すれば良いのかご教授願います。
152 :
151 :2007/12/23(日) 03:40:29 ID:nRcoZlZo
IDを出し忘れていました。よろしくお願い致します。
153 :
nobodyさん :2007/12/23(日) 03:44:49 ID:w1dc6lHr
RwriteBase /app/webroot → RwriteBase /cake/app/webroot RwriteBase /app → RwriteBase /cake/app RwriteBase / → RwriteBase /cake
154 :
nobodyさん :2007/12/23(日) 03:56:58 ID:nRcoZlZo
>>153 返答ありがとうございます。
変更し、アップしてみたのですが、うまくいきませんでした。
(変更前と見た目に変化なし)
環境を追記します。
OS…Linux
Apache…1.3.37
PHP…5.2.3
MySQL…5.1.20
引き続きよろしくお願い致します。
>>151 なんじゃ、それ?
HTTPで公開してるのは、public_html ディレクトリだろ?
まず、そこに、.htaccessがなきゃ話にならんだろ。
さらに、RwriteBaseってのは、クライアント側から見えるURLを書く物で、まるで理解してない。
つか、Apacheのマニュアル読んでるの?
156 :
nobodyさん :2007/12/23(日) 08:29:31 ID:nRcoZlZo
>>155 色々な問題をごちゃ混ぜにして考えていたようです。
0から勉強しなおしたいと思います。
public_htmlにapp,cakeフォルダなどをアップし、app/webrootフォルダ内の
.htaccessに
>>151 のBの内容を追加したところ、
(多分)問題なく動作することを確認しました。
ご迷惑をお掛けし申し訳ありませんでした。
>>156 おい。
HTTPで公開してるディレクトリに、cakeディレクトリ以下は、"置かない"。安全性が落ちる。
"アップし"なんて書いてるとこ見ると、ローカルに開発用のHTTPサーバも持ってないのか?
それは、共有サーバを使ってる他の人にとって、"迷惑"。
最近よくも悪くもCakeに初級者が入ってるが基礎をみっちりやってからじゃないと結局フレームワークに使われるぞ
初心者が、cake使って勉強すれば良いじゃないですか?
160 :
nobodyさん :2007/12/23(日) 16:24:59 ID:nRcoZlZo
あああああああああああ
うまくいきました。
/
/cakephp
/cake ← cakeフォルダ(appと並んでいたほう)
/public_html ← appフォルダをリネーム
/vendors
/public_html ← ドキュメントルート
/css,files,img,.htaccessなど、app/webrootディレクトリに入っていたフォルダやファイル一式
上記のように各ファイルを設置し、
ホームディレクトリの.htaccessに「RwriteBase /」を追加し、
同階層のindex.phpのROOT,APP_DIR,CAKE_CORE_INCLUDE_PATHをそれぞれ
「DS.'path to cakephp'.DS.'cakephp'」「'public_html'」「ROOT」にし、解決しました(多分)。
>>157 ローカルでテストしていました。
紛らわしい言い方をして申し訳ありませんでした
161 :
nobodyさん :2007/12/23(日) 16:26:57 ID:nRcoZlZo
×ホームディレクトリ ○ドキュメントルート
ここまでRwriteBaseだらけだがRewriteBaseじゃないのか しかも成功したのか 俺が間違ってるのか
163 :
nobodyさん :2007/12/23(日) 18:32:41 ID:nRcoZlZo
>>162 すいません、Rewriteでした。
最初の文章をコピペしてたのでずっとRwriteと書いていました・・
あ、いや、いいんだw 狐につつまれて(←何故か誤用)ただけだから
狐につねられた?
まあ、似たようなもん
>>159 初心者が勉強するには挙動や仕組みが複雑すぎるし、
勉強すべきウェブアプリの流れが自分で組めない。(組まなくて良い)
なんか楽しようとして使ってるのにCakeの融通聞かないとこをカバーするコード考えたりしてると余計時間かかってる気がする。
169 :
nobodyさん :2007/12/25(火) 10:50:49 ID:dm3PQI94
>>168 わかる。でも、書いたあとのコードがわかりやすい。
フレームワークを使う前のコードなんて自分で書いたコードなのにゾっとする。
読めたもんじゃない。。。
型にはまっているから迷わなくていいのが楽なのかも 位置から作るといちいち迷ってそれが占める時間が結構ある希ガス
アホな質問なんですけど、 通常、 AページでAテーブルの内容を表示(Aコントローラー+Aモデル) BページでBテーブルの内容を表示(Bコントローラー+Bモデル) というような感じで作ると思うんだけど、 CページでAテーブル+Bテーブルの要約内容を表示したい場合は、どうすれば? Cコントローラーで、AモデルBモデルを使うというような考え方でいいのかな。 質問の意味が通じなそうスンマセン(´・ω・`) サイトのトップページで、多テーブルの情報を表示させたいというような場合の話です。
Cコントローラの$usesに使いたいモデルの配列を定義汁 var $uses => array('Amodel', 'Bmodel');
173 :
171 :2007/12/26(水) 11:40:51 ID:???
>>172 すごいありがとう。ほんととっかかりがわからなくて。感謝!やってみます。
勉強会行きたかったな〜。
ちょっと検索すれば出て来ることだよ・・
しかとだてめーわ 重荷を負って一生かけて学びやがれ!
しかと引き受けた
この流れの意味が分からないw
このスレの流れに意味なんて必要ない!
なかよくやろうよ。
学園なかよし計画
家族計画
先週ぐらいからCakeを使い始めてみた。 いったんわかってくるとサクサク作っていけるのが嬉しいね。 ただ、マニュアルは機能を網羅してるわけじゃないんだな。 マニュアルに載っていることが全て、だと思って進めてくと意外としょうもない所でつまずいたりしちゃうね。 まあこれはCakeに限った話じゃないけど。
>>182 年明け早々に書く事か?w
いや、むしろ好意的な意味で。熱心だな。w
Cakeはベーカリーとかソースコードとか覗くと楽しい。 マニュアルだけだと(特に1.1系)他のフレームワークに見劣りする。 1.2系はちょっと自分用に改造するとすごい使いやすい。
なんで改造しちゃうの。
確かに。何の為にオープンソースのフレームワーク使ってるんだか分からないw
オープンソースだから改造できるんじゃんw
188 :
nobodyさん :2008/01/04(金) 21:12:38 ID:yI22KOOz
pre_betaからbataで変わって気づいたこと(てか、直したとこ) ・admin routesのとき、paginatorの飛び先がおかしいのがなおった ・posts/index/foo:bar が $this->params['pass'] でなくて $this->params['named'] に入る ・posts/view/20 は $this->params['pass'] に入る ・loadModel, loadComponent は非推奨 App:import('Model', 'name') にしろといってくる。 ・generateList() も find('list', array()) にしろといってくる。 ・webservice 使用時 $this->layoutPath をわざわざ指定しないといけなくなった。 ・何気にapp_controller.php, app_model.php の場所がかわってる(そのままでも動くが、気持ち悪いので変えた) いまんとこ、こんな感じでした。
情報乙。 bakeで生成されるコードも伴って変更されてるといいな
>>188 >・何気にapp_controller.php, app_model.php の場所がかわってる(そのままでも動くが、気持ち悪いので変えた)
* Create the same file in app/app_controller.php
* Create the same file in app/app_model.php
って書いてあるからpre-betaと変わっていないと思うんだけど。
betaでバリデーションの挙動が変わったのか、自作関数でバリデーションする場合 チェックされる(ポストされた)データが配列でわたるようになってる。 使いにくくなった。なんでだ?
MySQL4.0.25 cake1.2beta に乗り換えたら $this->Post->del($id); で、SQLエラーでちまったよ。 エリアスがユニークじゃない!とかいわれたよ・・・ どうしたもんかね?
じゃあ、俺も。betaで変わったとこ。 モデルの _tableInfo変数 が _scema変数 に変わった _scemaの構造も_tableInfoとちょっと違う まあ、この変数は積極的に使うものじゃないけどね。
cakeって、model名 = コントローラー名 = テーブル名 ってなっているけれど コントローラー名がテーブル名だと、アクセスするときに変じゃない? 普通画面名とか、機能名とかつけるものだと思っていたんだけれど、 どうなんでしょう bakeでviewを作成するときに、選択可能なリストにModelがでてくるけれど、 コントローラーだしてほしい そういうものなのかなぁ
>>194 別に他の名前も付けられるんだからいいじゃん。
特にコントローラー名なんて変え放題じゃない?
bakeが、コマンドラインから叩くのめんどくさいし、環境を選ぶ。 規約に従ったphpファイルを作ってアップロード、実行するとbakeされるように出来ないのかな。
>>195 え、url上の名前って簡単に変えられるの?
モデルの
var $name = 'Post';
ってところの名前変えれば出来るって事?
>>197 それはむしろモデルに対するテーブル名じゃまいか?
urlウンヌンは、好きな名前でアクション作れば良いかと。
コントローラとモデルの紐付けは実はあんまり強くないよ。 コントローラで$usesを定義してやれば好きなモデルをいくつでも使うことができるから 極端な話、$usesさえあればコントローラの名前は任意で大丈夫。 つーか、コントローラ名=URL上の表記だから、コントローラ名は アクセス側から分かりやすい名前にする方が重要だと思う。 正規化でテーブルが沢山増えた場合はなおさら。 で、$usesを定義しないとコントローラ名を単数形にしたモデルを自動で使う。 その時、PHP4はクラス名からモデル名を引っ張ってこれないから$nameを見てモデル名を決める。 $nameはその時に使う。逆に言うとPHP5以降は$nameは不要。 …だったと思うけど、情報古いかもしんないから注意してね。
1.2betaになって、もしかして$form->inputで出力されるタグがフィールドの種類に応じて変わらなくなったのか? 前は、date型のフィールドなら日付選択のセレクトタグが出たんだが。
俺、最近$usesすらも使わないで、 モデル使いたい場所で、 App::Import('Model', $model_name); //pre-betaではloadModel $model = new $model_name(); $model->findAll(); とかやってるw やばいかなぁ。
202 :
nobodyさん :2008/01/11(金) 00:37:03 ID:edIhawVf
フレームワークせっかく使ってるのに規約にそってないから、複数で開発したら異端児
でもさ。コントローラではusesでいいかもしれないが、 コントローラ以外で、モデルを使う方法他に何がある?
逆にどういう状況でコントローラ以外でモデルを使うんだ モデル内で別のモデルを使うとか?
一つのモデルに保存したら、SQLのトリガーのように別のモデルに保存することもありますし、 それをBehaviorにしてBehaviorで使うこともありますし、 テーブルに保存されたデータをもとに値を返すComponentも考えられますし、 コントローラ以外のどこででも、モデルを使うことって考えられますよ。
208 :
nobodyさん :2008/01/12(土) 21:32:01 ID:4ugQnDqA
それでしたら、 MVC が成り立たなくなるのでは? 少なくとも 「早く開発できる」 も大切ですけど、 「規約に沿った開発」 を心がけた方が最終的には良いかと思いますが、いかがでしょうか。
>>208 この程度でMVCが成り立たなくなるわけが無い。
規約を守ることが目的になっていませんか?
規約守った方がいいにきまってる。 こういうやつとは仕事したくないな。 汚いソースを読まされそうだ。
パフォーマンス的にはどうなんだろう? 1つのアクションでしか使わないモデルを、 コントローラ全体から呼び出すのはどうなのかな? あまり、変わらなければ、規約に沿ったほうがいいね。
>>207 のような状況は普通にある
さすがにテンプレートやヘルパーでモデル呼び出しはしないけど
ヘルパーのようにモデル同士が連携したくなる場合なんてざら。
開発規則で決めればコンポーネントからモデル呼び出しも十分
視野に入るだろ。
そもそもコントローラの責任範囲はあまりに広すぎる。
save()時に関連キーの値を意識しなきゃいけないとかアホだろ
モデルに任せとけよそんなもん。
> さすがにテンプレートやヘルパーでモデル呼び出しはしないけど 本当にそう? たとえば、xoopsなんかにある、”ブロック” メインのページの左右に表示され、ページの中のコンテンツとは 直接関係無いような情報(もちろんデータはデータベースにある)を 表示するとき、それをどのように作る?
CakePHPにはお世話になっているから 悪いことは言いたくないが、一つだけ言わせてくれ。 function foo($v1=null, $v2=null, $v3=null) { if($v1がなんたらだったら) { $v1 = $v2; $v2 = $v3; } } こういうコードはやめてくれ。引数とコードがわけがわからなくなる。
215 :
212 :2008/01/13(日) 19:55:54 ID:???
規約に沿わずパフォーマンス云々を求めるならフレームワークなんか使うなよ
CakePHPでトランザクションの使い方を教えてください。
クエリ実行前に必要な処理をすれば大丈夫です。 Cakeだからといって特別なことはございません。
意味がわかりません。 トランザクションに関してはデータベースごとに構文が違うわけで、 データベースの違いを吸収するCakePHPには 当然トランザクションの機能があってしかるべきでは?
220 :
212 :2008/01/14(月) 03:54:21 ID:???
やべ 名前そのままじゃん
>>220 1.2でついたんじゃなったですか?
その使い方はどうするのでしょうか?
decorate,Masterbakeって1.2だとだめなの? しょぼーん
なんの機能が足りないの? 1.2はbakeでそこそこいけるぞ
225 :
nobodyさん :2008/01/14(月) 14:59:49 ID:p06mFmgf
>>222 cake1.2用って書いてあってサンプルコードまで載ってるのに、これ以上どうしろと。
226 :
nobodyさん :2008/01/14(月) 22:01:03 ID:qwz7LRgA
DB をポスグレにしても後悔しませんか?
他のデータベースより好きならお好きに
xoopsとかwordpress等CMSのインストーラみたいに、ブラウザから設定するとbakeしてくれるようになってると激しく便利なんだけどなー。 こういうの誰か作って配布してたりする?
便利か?
linuxやWebアプリ作成などになれてない利用者目線だね、開発者じゃなく
いや、bakeはそれがたとえブラウザから実行できたとしても、 利用者レベルじゃ使用できんだろ。 コードはいた後、コードいじらないと使い物にならないんだから。
いや利用できないとか言い出したら、bake自体がいらんかと。 例えば、「モデルが無いですよ」とかエラーを吐いてくれるとこで、作るべきファイル名やコードをブラウザが表示してくれてるけど、それを手動で作る代わりに「(デフォのでいいから)作成」ってボタンがあったら嬉しいじゃない?
ずいぶん初心者が増えてきたね>Cake
そもそも楽するための物だから良いかと。
初心者が安易にフレームワークに頼るのは危ういと思われるよ。
初心者が読みにくくて危険なコードを大量生産しないために生まれたんだろ?
どこまで面倒見てくれるか、手間を減らしてくれるか、の要求レベルは人によって違う。なら大は小を兼ねるかと。bake自体、なんか面倒だからと、使いたくない人は使わず、手動でセコセコ作ってる。違う解決法があるなら使いたいが。 まあそれによってフレームワーク自体が肥大するのは困るけど、これはそこまでたいした話じゃない。
>>232 自分で作れw
エラーメッセージのビューをちょっと置き換えるだけで作れるだろ?
うん。まあ置き換えただけじゃダメだけどね。
俺俺関数をグローバルに書きたい時の作法って決まってる? app/config/bootstrap.php に今はベターっと書いてるんだけど これだとアプリごとに書く必要があって かといってcake/bootstrap.phpに書いちゃうと バージョン上げる時に忘れて上書きしちゃいそう
app_controllerでいいんじゃね? コンポーネントはいちいち利用宣言するのがめんどくさくて ほとんどapp_controllerに書いちゃってるけど、まずいかな?
オレオレ関数ファイルをvendorsにつくって bootstrap.php で読み込ませてる
コントローラとかでしか使わないようなのは、AppControllerだけど、 汎用的な関数は、app/config/bootstrap.php に書いてる。 app以下にあるし、空ファイルだし、そのために作られたファイルだろ?って思ってる。 汎用的なクラスは、vendersにおいて使ってるけど。
通常コントローラはAppControllerを継承するけど、 間にもう一層入れたい場合どうやる? Controller ↑ AppController ↑ MyController ↑ FooController このとき、 class FooController extends MyController ってすると、MyControllerがいませんっていわれちゃう。
>>245 MyController は app_controller.php に書いてる。
コントローラでもビューでもそれ以外でも使うクラスは 何で作る?コンポーネント? このクラス、モデルデータを必要とするんだよね。 何で作ればいいんだろう?
>>241-244 vendors/oreore.inc.php に書いて
app/config/bootstrap.php から vendor('oreore.inc');
で読み込むことにしますた さんくす
質問です。 app/config/core.php define('DEBUG', 2); この状態で、特定のページだけデバッグ情報を出さないようにって出来ないものかな? 1)XMLを出力するプログラム 2)それを受け取って処理するプログラム 1の方はもう出来上がってて、デバッグが出力されると構文が崩れて困る。 かといって、define('DEBUG',0);にすると、2の方の開発が困る。XMLは動的なものを使いたい。
>>245 App::import('Contoller', 'MyController'); //昔はloadController
class FooController extends MyController
ってすればいいんじゃないの?
251 :
nobodyさん :2008/01/17(木) 16:34:27 ID:2woYNb+h
>>249 ヒント、
function beforeRender()
{
if ($this->layout=='ajax') Configure::write('debug', 0);
}
これでわかったら、スーパーひとしくんプレゼント!
252 :
249 :2008/01/17(木) 18:41:28 ID:???
>>247 詳しく聞いて無いから間違いかもしれないけど、
たぶんそれは設計ミス。
モデルとコントローラーとビューは疎結合にあるべき。
答えとしてはコンポーネントにモデルインスタンスを渡せば良いと思う。
ビューの部分のロジックは、ヘルパーに委譲。
本当にどうしてもどこでも使いたいなら、bootstrapに書くか、vendorで外部ライブラリとして読み込ませる。
>>253 単純にiniファイル的な役割をさせたいだけなんだけど・・・
ビューでformやhtmlのヘルパー使ってるとなんかどこもかしこも DBのテーブル名やカラム名で溢れてくるんだけど何か間違ってる? JAVAもRORも途中でめげたんで他との比較は出来ないけどMVCってこういうもんなん
MVC(改)でやれば
1.2で増えたものかどうかは知らないけど、
調べるついでにマイナーだと思われるものを書いていくよ。
ざっくり調べただけだから間違いがあるだろうが許せ。
というか、誰か補足してくよw
・Configure::store('AAA', 'a', array('data'=>'123'));で値保存。
/app/temp/cache/persistent/a.php ができる。
Configure::load('a'); でa.phpファイル読み込み
pr(Configure::read('AAA')); で保存した値表示。
・flay ・・・Text-to-HTML Textile見たいな物?
wiki文法みたいに簡易な文法で書いたらHTMLに変換してくれる?
・MagicDb ・・・ 拡張子に頼らないファイル解析?
MagicFileResourceを継承したクラスを作ることで対応フォーマットが増やせそうだが、
初期で対応しているフォーマットはなし?
http://www.magicdb.orgは関係ありか ?
・MediaView ・・・ なんか拡張子に対応したMIMEタイプリストがあるが?
header("HTTP/1.1 206 Partial Content");とかあるし、ファイルダウンロードさせたいときに使う?
・String ・・・ えー? UTF8対応? 今度からこれ使えと?
・ThemeView ・・・ CSS切り替えみたいなもんか?
・XML ・・・ XMLあつかえるのね。
・Debugger ・・・ デバッガ。便利だよ。デバッガ。
・Socketと名のつくもの ・・・ まあソケットをそのまま触れるのでしょう?
・Controller::isAuthorized() ・・・ 認証系で使うべきものなんだろう。
・I18n L10n ・・・まああれだ。俺みたいに日本専用でビューに直接日本語書いている奴には不要ってこった。
・FormHelper::secure トークンだしてくれる
・PagesController 次に進む なんてページを作るのにいいんだろうなとは思う。名前からして。
・Model::deconstruct ・・・ フォームのフィールド、日付を年ドロップダウン、月ドロップダウン、日ドロップダウン、に
分かれて入力されているのをひとつにしてくれるっぽい。
・TreeBehavior ・・・ テーブルをツリー構造として見れる? moveupとかmovedownとか
・TextHelper・・・autoLinkってのがある。リンクっぽいテキストをリンクにしてくれる。
TextHelper::toList ・・・ 日本人には不要w
・ClassRegistry ・・・ ようはオブジェクトがどこからでも見れる? グローバル変数的なので使い方に注意。
FormHelperって$form->input('field_name')ってするだけで フィールドの型に応じたフォームが自動で出てくるけど、 これって、ヘルパーがモデルを見てるってことだよね? それって設計的にありなん?
この便利関数きっとどこかにあるんだろうなってapiのそれっぽいの見ていって 結局無かった(しかもおそらく見つけられなかっただけでどっかにある)時の徒労感ってなかなかいいよね 英語弱いからなあ
なかなかいいのかよw リファレンス本欲しいな。
262 :
nobodyさん :2008/01/18(金) 19:38:04 ID:/74lUS2r
INSERT ... ON DUPLICATE KEY UPDATEしたいんですが、 どういう風にやるのがスマートでしょうか?
あああなるほどbakeでビューに出てきて文字列素通しにしてる__ってのはなんだろうと思ったら 多言語対応のあれなのかようやくわかったありがとう
今日つかい始めたのだけど、標準でO/Rマッパー無いのこれって?
普通についてるだろ。 どこみてんだ。
>>264 レス先走りすぎだ。
1.INSERT ... ON DUPLICATE KEY UPDATEしたいんですが、
↓
2.直接SQL文発行しる!
↓
3.標準でO/Rマッパー無いの?
煽るのならこの順番だろうがw 2番を飛ばすな
>>259 前どっかで同じことをいってたやつがいたな。
CakePHPか忘れたけど。
設計とか詳しくないからただの一つの意見だけど、
便利だからまぁいいんじゃないかなと思う。
疎結合っていう観点からはよろしくないのかもね。
Railsも同じ機能ついてたきがす
268 :
262 :2008/01/18(金) 22:44:42 ID:???
やっぱexecuteで発行するしかないんでしょうか。。
Cakeを「ケイク」と読んでるのは俺だけ・・・だよな・・・? 「ケーキPHP」より「ケイクPHP」のほうが言いやすい
英語の発音は、むしろ警句だろ?
おれもケイクって呼んでる
Helperに対して、コントローラから情報をわたすことって出来んの? それともこれってなんか変な設計?
ビューにViewクラスを継承した独自のTestViewクラスを使用したい場合。 ファイル名:/app/views/test.php <?php class TestView extends View { } ?> あとは、コントローラで var $view = 'Test'; と書く。 これって、公式な仕様だっけ?
ヘルパーでモデルのデータを参照したいときはどうすればいいわけ? requestActionでURL形式でコントローラを呼び出して コントローラ経由でモデルにアクセスしてデータ参照? どう考えてもパフォーマンス悪すぎるだろ? ヘルパーにコントローラからモデルデータを直接与える方法がないから 一旦コントローラからビューにモデルの値をsetして、 ビューがヘルパーの関数を呼び出すたびに引数にデータをセットするのか? 何でこんなに結合度が高いんだ?
>>274 ヘルパーごときがモデル様のデータを直接欲しいとか100年早いぜ。
欲しいならコントローラさんに話を通して、コントローラさんに必要な分を最初っから揃えてもらいな。
ってコンポーネントさんが言ってた。
<?php echo $html->input('Post/title', array('size' => '40'))?> とか、 <?php foreach ($posts as $post): ?> <tr> <td><?php echo $post['Post']['id']; ?></td> <td> <?php echo $html->link($post['Post']['title'], "/posts/view/".$post['Post']['id']); ?> </td> <td><?php echo $post['Post']['created']; ?></td> </tr> <?php endforeach; ?> とか、テーブル名(モデル名)が必ず付いて回るとか、ありえないんだけど こういうものなの? inputタグだとソース上から見えちゃうしーー
277 :
nobodyさん :2008/01/19(土) 17:37:03 ID:by/o8aKs
今だにcakeなんてやってるやついるんだな 日本人ならonigiriだと思うんだが
>>275 > ヘルパーごときがモデル様のデータを直接欲しいとか100年早いぜ。
> 欲しいならコントローラさんに話を通して、コントローラさんに必要な分を最初っから揃えてもらいな。
それが簡単にはいかないんだよ。
ヘルパーがどのタイミングで作られるか知ってる?
コントローラのrenderの中でビューのrenderに処理がわたり
ビューがヘルパーを作っている。
つまりコントローラが動いているときは、ヘルパーはまだ生まれてないんだよ。
そしてヘルパーにはコントローラを知る方法が無い。
$this(ヘルパー)->view->controller->モデル
っていうかrequestActionってそんなに重いの? ソースとかある?
1.2のバリデーションすげえええってワクテカしながら書き始めたはいいけど 配列まみれで思った以上に見づらい書きづらいなこれ テキストエディタでちまちま書いてるからarrayのどっかおかしくてもパッと見わかんないし
>>281 そりゃ呼出しごとに、関数呼び出しの前に、
URL文字列から関数判断して、
コントローラを初期化して使えるようにしてから
読んでいるんだから遅いでしょ。
>>283 それは分かるけど、それって設計を変えるほどボトルネックになる事なの?
なる。
286 :
nobodyさん :2008/01/21(月) 08:20:37 ID:T79KO08k
287 :
nobodyさん :2008/01/21(月) 17:56:41 ID:64B8kuvt
>>284 requestAction を 同じページで6箇所使ったら使い物にならないくらい重くなったよ。
できるだけ、使わないほうがいい。
それで僕は、設計を書き直しました。
もう少し具体的な例で説明しようかな? Cake1.2にはConfigureというクラスがある。 これはいろんな場所(コントローラだったりビューだったり)で、 設定を読み書きできるクラス。読み書き先はファイルだ。 これの保存先をデータベースにして、普通のテーブルと同じように 設定できるようにする。そのとき、データベースを使ったConfigureを どのように作るべきか? 普通に考えてConfigureの中身を変えるだけになるだろう。 つまり、Configureはグローバルに参照できObjectを継承しただけのクラス。 ゆえに、Configure内部で、App::import('Model', 'Configure');を 使って、内部でモデルのインスタンスを生成するしかない。 コンポーネントやヘルパーにしたり、 コントローラでモデルを渡したりと言ったことはしない。 クラスが直接モデルを扱う。 きっとこれが正しい設計だと思うが、反論はあるかな?
結局コントローラかビューかヘルパーの少なくとも一つはカオスになるのが確定なんだよな そのへん全部ヘルパーに押し込むのが理想だけどめんどい
291 :
288 :2008/01/22(火) 18:12:32 ID:???
反論無いのかよw こういうときは普通こうするだろ!って煽りまってたのに! 結局データベースを参照する設定クラスのようなものは フレームワーク的なやり方ってないのね。 App::importで直接モデルを操作するしかないのか。 あとログもテーブルに格納するようにしようかなとか 思っているんだが、なんかこれも同じ道をたどりそうだ。
>>291 いや、だってrequestActionの重さ聞いただけだしなぁ
ちなみにどんな反論が想定内だったの?
>>291 聞く場所が2chだからな
メーリングリストで聞かんのかい?
トランザクションって掛けたいところで Model->transactional = true; にしてコミットしたいところで Model->transactional = false; にすればいいの?そんな簡単にはいかないか
トランザクションというのは、 一つ、または複数のモデルへの複数の操作を 一つにするものなのだから、 モデルにtransactionalなんてのが あるのはおかしいと思いませんか?
全然おかしくない。
へぇ。おかしくないんだw じゃあ、商品の在庫が入った商品データモデルと 注文されたときに作られる注文データモデル。 注文データを作って在庫を減らすという処理を一つのトランザクション にするとして、いったい誰がどのモデルをコミットするんだい? そして、そのモデルがコミットするべきだという理由は?
だからコントローラにtransactionalがあるんだろ
> だからコントローラにtransactionalがあるんだろ 無いよ?
無いなら association使えって事だろう
301 :
nobodyさん :2008/01/23(水) 16:07:07 ID:z/2JwMmb
php暦 3年。mysql暦 2年。 はずかしながら comit とか考えたことないな。 データばぐらなくない?テキストファイル、CSVデータなら書き込んだりするとバグるときあるんで ファイルロックはするけど。
3年やっててトランザクション意識した事ないとか恥を知れカス
2年やってトランザクションが何か知らない俺のほうがマシ
>>301 仕組みを理解してないと思われ。
データの整合性の問題。
ちょっと慣れて来るとviewやhelper書いてる時間の割合が相対的に増してくる この作業がはてしなくつまらん…
1.2betaになってから、変数を宣言していないエラーの場合 極端に表示に時間がかかるようになってない? 俺が何か悪い事しているのかなぁ? ちょっとコアいじってるし。
ワンタイムチケットとかないですか?
認証系、俺は結局自作してしまったな。 なんでだろ?特に使わない理由があったわけじゃないんだが、 認証=顧客管理機能の一部として、顧客管理機能を作っていたら 結果的に組み込んでしまったって感じ。 突き詰めると、データベースにあるキーにマッチするかどうかの判定だけだしね。 会員の登録、退会、パスワード再発行などの機能にくらべればたいした事じゃないし。
>会員の登録、退会、パスワード再発行などの機能 この辺もコンポーネントであったりするの?
あったら、俺の苦労は無駄になるw
rails使わないでcake使う理由って言語がphpであること以外にあるかな?
言語を抜かしてCakeの方が優れている点ってことか?
315 :
nobodyさん :2008/01/26(土) 21:57:48 ID:RSZTbZiz
>>307 俺の場合全てにおいて時間かかる。
$hoge = '';
ってやっとけばエラーでないからこうしとけばいいんじゃない?
>>315 やっぱりそうなんか。
pre-beta以前はこんなに時間がかからなかったんだけどねぇ。
> $hoge = '';
> ってやっとけばエラーでないからこうしとけばいいんじゃない?
俺は基本的に変数はちゃんと宣言するんだけど、
問題は間違って$hogeを$hageとか書いちゃった場合。
ケアミスバグなんだが、そのために数十秒無駄になるorz
いろいろ1.2の方が魅力的に見えるんだけど、1.2系はもう使えるモノになってるんすか? 普通のソフトだと、ベータテスト段階まで来たらバグ取りが主で、 大きな仕様変更は無いんじゃないかと思ってるんですけど、 Cakeはどうなんでしょう?
自分で確かめもしないやつには、誰も情報やらんよ。
319 :
nobodyさん :2008/01/27(日) 13:39:39 ID:HXUAcytA
>>315 自分はpre-beta 以前からも時間がかかった・・・。
やっぱりキャッシュ機能は必須なのかな。
>>317 目だったバグはないと思うよ。今使ってるけど。
しいて言えば html ヘルパーが フォームヘルパーになったりしていてバリデータエラーの
取得方法が 1.1 と変わっているのでそこが迷うくらい。
>>319 さっき落とした状態の1.2でやってみたんだけど、
変数宣言していなくても時間がかかることはなかった。
きっとどこかで何かをやっているのだろうがソースは会社なのでw
そういやバリデーション部分でひとつ不満が。
たとえば、1から5までの値を受け付けるバリデーションを作ったとして、
エラーメッセージを、「1から5まで数値を指定してください。」って
表示することはできないよね?
もちろん、1から5までという数値はパラメータで変更可能。メッセージも同じく。
app/config/routes.phpで
Router::connect('/', array('controller' => 'pages', 'action' => 'display'));
て設定してる時にクッキー消して(use_trans_sid onで)
http://myapp/?CAKEPHP=e233bd9c1facda8084d8ba2f2226eb60 でアクセスすると
Error: CAKEPHPe233bd9c1facda8084d8ba2f2226eb60Controller could not be found.
そんなコントローラーねえよって怒られちゃう
Router::connectの書き方誰か教えてくらさい
Router処理に来る前に、URLからセッションID部分を削除して クッキーを使っている場合と同様のデータの持ち方に 変換すればいいと思ったがやり方しらねw
323 :
321 :2008/01/28(月) 22:42:45 ID:???
googleグループに嘘英語で質問投げてみた
乙。結果頼むw
325 :
316とか :2008/01/30(水) 12:21:18 ID:???
エラー発生時にやたらと時間がかかる場所を調べた。 どうやら、デバッグ機能としてエラー発生時に わかる範囲すべての変数を出力しているみたい。 だからモデルとかヘルパーとかいろいろ使っているほど遅くなる。 /cake/lib/debugger.php の __outputの以下の行をコメントアウトすれば 時間かからないようになる。もちろんデバッガ機能は落ちるけど。 foreach ((array)$kontext as $var => $value) { $context[] = "\${$var}\t=\t" . $_this->exportVar($value, 1); }
ならデバッグ切ればよくね?
327 :
nobodyさん :2008/01/31(木) 16:10:58 ID:??? BE:363352043-2BP(3000)
なんか出力するHTMLのソースの最初に改行が入っちゃうのは俺だけ? beta使ってるんだけど、HTMLは良くても、rssの場合だとFFでエラーが出てしまう…
328 :
nobodyさん :2008/01/31(木) 16:32:27 ID:??? BE:1362569459-2BP(3000)
すまん。ソース追いかけてたら自己解決。 あるhelperの最後の?>のあとに改行が入っていたせいで、それが出力されていたみたい。
だから閉じタグは書くなとあれほど
331 :
321 :2008/02/01(金) 03:13:35 ID:???
経過 最新のbranchならfixされてるよ って開発者のレスがついて 最新のbranchにしたけど解決しなかった んでそのまま放置されてる 今のところ以上
AJAXヘルパーって使いにくいよね。 基本的にclickで動作するように作られているからmouseoverで 動作させるためにはコアに手を入れなきゃいけなくなると思うんだけど。
>>332 マウスあわせただけでサーバに問い合わせなんかしてたら高負荷になるだろ?
>>332 わざと機能を制限しているので逆に使いやすいかもしれない。
自分でライブラリ作っててわかるけどあれもこれも設定できるようにすると
逆に使いづらくなるからね。
>>333 ユーザーがブラウザ上で操作したマウスの動きを記録する
Ajaxがある時代に何いってんの?w
それだけ自由に作りたいならフレームワークじゃないほうがいいんじゃない? 簡単に一般的な大多数の開発をサポートする事を目標としてるんだろうし。 どうしてもって言うならコンポーネントとか作ればいいんじゃね 標準で対応するには一般的じゃないって事だと思うが
337 :
332 :2008/02/02(土) 19:02:48 ID:???
確かに
>>335 は特殊すぎる例だけど、マウスオーバーで何かしらの
アクションがあるというのはけっこう使うと思うけどなあ…
しょうがないから自分で作ってやってるけど。
TestSuiteのやり方説明しているページ無い?(出来れば日本語で) 良くある説明ページが class MyTestCase extends CakeTestCase { var $TestObject = null; function setUp() { $this->TestObject = new 〜〜; } function tearDown() { unset($this->TestObject); } } ってなっているんだけど、setUpが実行されるタイミングが いまいちつかめない。なんか想定外に実行されるし。 また、fixturesを使ったとき、テーブルが作られるタイミングが どうも???でテーブルが無いといわれたり。 んで、ざっくり調べたところ、 startCase/endCaseとstartTest/endTestというのが見つかった。 これだと、以下のコードで次のように想定どおりに表示される。 startCase -> startTest -> endTest -> startTest -> endTest -> endCase
class MyTestCase extends CakeTestCase { var $TestObject = null; function startCase() { pr('startCase'); } function startTest() { pr('startTest'); } function endTest() { pr('endTest'); } function endCase() { pr('endCase'); } function test1() { $this->assertTrue(true); $this->assertTrue(true); } function test2() { $this->assertTrue(true); $this->assertTrue(true); } }
340 :
nobodyさん :2008/02/07(木) 12:03:45 ID:Ja8AUMIG
ちなみに、この状態で、setUp、tearDownが実行されるタイミングを表示させると?になる思う。 startCase/endCaseで足りると思うんだが、setUp、tearDownは何の為に使えばいいのだろう? で、まだ良く調べていないのが、fixturesで追加したテーブルがどうなるか。 動きを見てみると、startTestが実行する直前に毎回リセットされてるようだ。。 だからstartTest前にCREATEしてendTest後にTRUNCATEしているようだが・・・ こういうレベルでちゃんと説明しているところがほしい。
バージョン言うの忘れてた。1.2.0.6311-betaです。
勉強会瞬殺過ぎるだろ…
CakeWebTestCaseというかsimpletestのWebTestCase便利だな。 商品をカートに入れるとカートの画面に飛ぶ。 そこからログインをクリックしてログインページへ。 ユーザー・パス入れてログイン。 そしたらカートの画面に戻っている。 そして状態でもカートに商品は残ったまま。 ログアウトボタンをクリック。 そしたらカートから商品は削除されている。 (当然この一連の処理にクッキー・セッションが使われている。) という一連のテストを自動化できちゃったよ。 (一度書いたら何か修正しえてもそれを実行するだけ)
みんなエディタとか何使ってる?Eclipse?PHPエディタとか??
>>345 dreamweaver cs3 使ってますよ。
やっぱりこれが最強じゃないですかね。
プログラム、デザインの両方に特化していますので。
明らかになんちゃってプログラマだな。人気に伴ってCakeのレベルが落ちてきてる
cakeのレベルは落ちないだろ。
裾野が広がることがレベルが落ちるって事なのか って事は人気のあるスポーツはどんどんレベルが落ちてるんだな
あぁ、初心者がたくさん入り込んできて レベルが下がってるよ。スポーツは
沢山の初心者がプロの地位をより高めるだけ。 部外者からみてもピラミッドが見えるようにすればいい。
A hasMany B belongsTo C こんなリレーションなんですが、A->findAll()すると、Bしか付いてきません。 B->findAll()とすると、Cが付いてきます。 A->findAll()でB,C一緒に持って来たいのですが、どのようにしたらよいのか分かりません。 どなたかヒントをください。
A->findAll()->findAll()
ありがとうございます! A->findAll("","","","","",'3') これでいけました。
>349-351 なるほど。なんか納得。 web上ではプロは目立たず素人ばっか目立つから変な感じに見えるのか。
逆にマイナーなやつだと、それを使用している人は ごくわずかでそういうものに手を出す人は 詳しい人が多い。 実際は、使う人の問題なのに、 言語の問題といいはるRuby凶なんてのがいたな。
「プロ」は余裕が無い人が多いからね。 自分が何か情報を出すとライバルに盗まれるかも、とか足を引っ張られるかも、とか思ってるんでしょ。 もうちょっと余裕のある人はちゃんと次を育てていける。 いきなり素人が…とか言い出したりしないだろ普通。
ホントにプロなら素人と共同作業しないでしょ。 新人には仕事教える立場だし。
うーん、盗まれるってのは無いと思うけどな。 ネットに限って言えば、プロな人がいろいろ露出するのって、ほぼ趣味なんじゃないか。 PHP界隈が、趣味でやるほどの魅力がない、仕事用の言語って感じだからじゃないの?
もう作ることではなく、 言語そのものが目的だからなw
言語そのものが目的って、趣味の人だろそれ
このアソシエーションって擬似的なもん? 一括で更新とかするSql文とか作ってるわけじゃないの?
>>362 複数のテーブルを一括で更新できるか考えてみれば良い。
364 :
nobodyさん :2008/02/13(水) 00:39:35 ID:jaUT9mg5
ビューのテンプレートファイルはコントローラによってフォルダ分けされるけど、 単体で使える共用のビューを作りたい時はどうすればいいの? app/views/common/common.ctpみたいな感じ
>>364 function common(){
$this->viewPath='common';
}
とかすれば
element使え
367 :
nobodyさん :2008/02/13(水) 20:01:16 ID:jaUT9mg5
ウィザード形式というか、ある項目を入れて次へ→ある項目を入れて次へ →最後にOKで処理実行のようなページを作るにはどうしたらいいの? ページごとにエラーチェックしたり、前の入力項目の値を元に 次のページを決めたり、想定外のページ変移に対応したりもしたい。
>>368 view1枚の中で条件分岐しまくるのはどうか
viewは一枚としてコントローラ側は? まあ今はaction一つでやってるんだけど。 なんか一つにごちゃごちゃあって見にくいなぁと それにページ間での値の参照・共有したいし なんか良いやり方無いのかなぁ?
セッションでデータ保持して、ページ移動はredirectとかすればいいんじゃね
373 :
369 :2008/02/14(木) 16:55:00 ID:???
>>370 actionも1個でやる。controller側ではページ分割されていることを意識しない。
1ページ目のpostは、2ページ目以降の項目が未入力と見做してエラー扱い。
表示の調整をviewでやる。
まあ思い付いただけなんで上手く行くかは分かりません。
それでページの「戻る」とかちゃんと動くのかなぁ? 一ページ目入力、ニページ目入力、三ページ目入力・・・してる途中で 一ページに戻る、一ページ目訂正、 二ページ目はさっき入れたのが表示されているからそのまま次へ。 三ページ目入力 みたいな。
>>371 > セッションでデータ保持して、ページ移動はredirectとかすればいいんじゃね
汎用的過ぎて参考にならないよw
ほぼすべてのウェブアプリはセッションかデータベースにデータ保持して
ページ移動はredirectとか使っている。
じゃあそれでいいんじゃないの?
377 :
369 :2008/02/14(木) 19:39:04 ID:???
>>374 マイナス1ページはプラス1ページと同じだから問題ないと思うけど、
ページを飛ばすのは処理増やさんといかんなあ。
入力値でページ分岐もややこしそうだ。
あと、未入力エラーを出すか出さないかの判断も必要か。
セッション変数を使うとして、 いかに管理しやすくするかということかな。 PHP5だと普通にインスタンスをセッション保存できるから、 複数ページで1インスタンスを共有というのもありでしょう。
ていうか、CakePHPに限ったことじゃないのに悩むとか経験なさ杉だろ。 もっと普通のウェブアプリ作れ。
>>379 悩まないのならあおってないで答え書いたら?w
会員ログインID以外のデータを セッションでデータ保持するのはバカだろ
やん
>379 いや、Cakeならそのケースでどうするかということで フレームワークによってセッションの扱いは少しずつ異なるし。
>>381 俺ほぼ全部を受け渡してるけどな。
だってIDのみだったら他の情報がを表示するときとかっていちいちDBから拾ってくるの?
まぁ、変更するときはDBを更新する必要があるんで接続はするだろうけど。
全部っつったって、常に表示してるのなんて、名前くらいじゃね? そのくらいいいじゃん。
セッションはそもそも大量データを保存するものじゃない 基本的に大量データを引っ張てくるキーだけ保存するもの
>>386 いちいちDBから拾うのが基本
セッションは会員IDなど必要最小限のデータだけ入れるべき
データ大量に保存して持ちまわすものじゃない
セッションをCakePHPではじめて使う人は セッションについて何もわかってないみたいだ
基本的にログインID以外でセッション変数を多様するのはバカ
複数のリクエストにまたがる処理の場合、セッションでデータ継続することはある。
必要最小限以外はhiddenで渡すのが基本 セキュリティ的にもやばいし ページの前に戻ると不具合がおこりやすい 常に大量データ持ちまわすことはメモリ、CPUに負荷がかかる
セッションがダメならcookie使え!
つーかログインID以外にセッション多様することなんてないやろ? ページまたぎ処理はパラメータで引き継げよ
>>393 >セキュリティ的にもやばいし
どういうとこが?セッション固定化とかは別の話だし
>ページの前に戻ると不具合がおこりやすい
具体的にどんな不具合?
セッションでフロー管理してるからhiddenよりも厳密にできたりするんだけど
>常に大量データ持ちまわすことはメモリ、CPUに負荷がかかる
大量っていっても、多くても数kとかだし。
何かしらのキーで毎回ストレージから取得するのも処理コストあるよね
勉強になるなぁ。 俺はセッションに入れる派。
hiddenみればわかると思うけど yahooなどの超有名サイトほど、ログイン処理など きわめて便利でないとこ以外はセッションを使ってない
OpenPNEもログイン処理以外はセッションを使ってない
単純に考えてもセッションが途中で切断されたとき データの引継ぎが途中で止まる hidddenにデータがはいってないので 最初からページ移動のやりなおし
なるほど。それは納得。 hiddenは値をいくらでも改竄できるからどうも・・・。 それすると挙動がおかしくなるサイトもあるし。 まぁ、それはそこの実装者が悪いだけなんだけど。 今のところセッションの方が生産性高いから、セッションで実装しちゃうな〜
セキュリティ的にいえば毎回DBと照らし合わせが基本 セッション多様は開発者が楽するためのもので サイト運営者、利用者にとってセキュリティリスクでしかない
セキュリティ的にどうのこうのって、さっきから一切具体的な話がないんだよね。
404 :
nobodyさん :2008/02/15(金) 18:49:34 ID:I3wnpJfD
Not Found
毎回DBと何を照らし合わせるんだ? リクエストされたパラメータが改竄されていないかどうかをチェックするということか? そんなことをするならばセッションにデータを格納したほうが効率が良いだろう。 悪意あるリクエストによってサーバセッションの中身を改竄するのは、 パラメータを書き換えるよりは困難だ。 他人のセッションを乗っ取ったり、MITM攻撃などでの手法はまた違う議論。 セッションを使おうが、パラメタを使おうが、適切な処理を行わなければ どちらもセキュリティリスクになる。 どちらの方法も処理次第では脆弱になりうる。 逆に言えば、どちらの方法でも適切な処理を行えば十分安全になる。 ここでいう*十分安全*という定義はサービスの内容によって異なる。
ページ移動にセッション使ってるやつて、どういうコード書いてるのさ 具体的に指摘してやるからコード晒してくれ
外のサイトからデータ引っ張ってきて確認画面等でページ移動するときはセッションで引き回してる 他はログインID引き回すぐらいかな ちなみにCAKEのデフォルト通りにIPでも(自動で)チェックしてるからドコモの人はさよならな俺のサイト
>>406 具体的に?
いや、だから、あるアクションでセッションにデータ入れて関連する他のアクションで参照するっていう、ほんとそのまんま。
コード書くまでもない。
409 :
nobodyさん :2008/02/15(金) 21:21:34 ID:Q8bQtypz
セキュリティという面ならhiddenで取り回すよりもセッションの方がまだマシだと思うけど違うの? hiddenだと改ざんされてしまうし・・・。 けど、何でもかんでもセッションにってのは確かに気持ち悪いわな。
hiddenの場合って「入力画面 -> 確認画面 -> DB登録」って時に、確認画面からhiddenでDB登録に渡すでしょ 確認画面の時にバリデートして、DB登録直前にまたバリデートって面倒じゃない?(hidden値改竄の可能性があるから) セッションだったら確認画面でセットしたデータがDB登録の時になって変わることがないからいいんだけど
hiddenにもセッション変数にも問題はあるから、扱う情報によってケースバイケースでは? 個人的には、セッション変数を使うのが良いと思うが、 セッション変数は手軽に増やせるので、コードの質を低下させるのを気をつけたい。 例えば、index.phpですべてのリクエストを受けて、 $_SESSION['action']で場合分けみたいなコードを編集したことがあるけど、 $_SESSION['action']はsession_start()さえしておけば、コードのどこでも変更できるので、 きちんと規約を決めておかないと副作用で死ぬ。 フレームワークに期待するのは、そういう規約の部分なんだけど。
ちなみにセッションが小技的に有用だと思ったのは、 Javascriptからしか参照されないJSONで、 ユーザ固有のデータを出すときに、いちいちPOSTしなくて良い点。 遷移の上で孤立したアクションでユーザ固有のデータを使える。
セッションのサイズが大きくなったらどうするんだ? たとえばセッションのサイズが1MBになったら、 データ読み込みに時間がかかるだろ? ↑ 反論 ページ移動するたびに、 1MBものデータをhiddenでクライアントに転送し それをまたサーバーに送信するようなことをしたら もっとパフォーマンス悪いだろ?
>>413 いや、そもそも、設計を見直せ、って話だろ、それ。
「設計を見直せ」というだけなら簡単
データをセッションに保存しないとしたらどこに保存するんだろうな? セッション=ファイルなわけで、ファイルに保存するか、 データベースに保存するかの違いしかないんだが・・・
386です。 セッションIDのみでデータベースから読み出して処理するのがベストなのですか。 勉強になりました。ありがとうございます!
セッションをデータベースに保存すれば それで終わりだなw
なんだかんだ言って、幅広い意見が聞けて有益なスレだ
>>410 が言ってるような、複数のリクエスト(アクション)を一つの論理単位としてその中でのデータの受け渡しをどうするかって話だろ
なんかDBのデータ(ユーザデータとか)を全部セッションにぶちこむかどうかの議論と勘違いしてるのがいるな
途中経過のデータをセッションに入れるのはセキュリティ的によくないとか、セッションにはログインIDしか入れちゃいかんとか、その理由を述べろよ
無駄である。以上。
その無駄とは、理由を聞いても答えられないから 無駄という意味か?w
セッションは必要最小限で使えというのは 大手を含め全員一致の答え、 ページ移動でもhidden内容を何でもかんでもセッションに詰め込むのは問題 ・セッション変数の重複関係でバグ ・ページ移動中に他のサイト見に行ったりしたとき ・セッション変数が開放されないことによるバグ ・セッション切断による、変数の維持ができないバグ
> ・セッション変数の重複関係でバグ バグが問題なだけ >・ページ移動中に他のサイト見に行ったりしたとき ページ移動中に他のサイト見に行ったりしたとき、 hiddenだと入力途中のデータ消えるバグ > ・セッション変数が開放されないことによるバグ バグが問題なだけ > ・セッション切断による、変数の維持ができないバグ セッション切断したのに、変数が維持されるバグ
hiddenと比較するとセッションの方がバグ管理するポイントが多い しかも致命的バグを生む可能性が高いのはセッション
>>423 >セッションは必要最小限で使えというのは大手を含め全員一致の答え
なんで大手代表できるの?全員って?
ここの書き込み見るだけでもセッションでやってる人いるよね。
まぁせまい範囲だけど、知り合いとか知ってる会社とか、セッションで実装してるとこも多々ありますよ。
>セッション変数の重複・セッション変数が開放されない
これはバグじゃなくて、これに対処するコードを書かなきゃいけないっていうセッションのデメリット。
逆にhiddenのデメリットはhtmlに埋め込まなきゃいけない、改竄に対処するコードを書かなきゃいけないってことかな。
>・セッション切断による、変数の維持ができないバグ
セッション切断されたら変数の維持がどうのこうのじゃなく処理自体継続できない。ログアウトされるから。
ログインがないシステムだったらhiddenのほうがこの問題にはちゃんと対応できるね。
楽したい低脳プログラマが使いたがってるだけだろ<セッション
1.2betaにはfind('count')とfind('list')を使ったとき、 afterFindが呼び出されないバグがあるな。 behaviorで文字コード変更してたら文字化けした。 だれか報告してきてくれ。 find('count')はafterFindを呼び出す例を思いつかないが 呼び出したほうがいいのだろう? たぶん。
430 :
nobodyさん :2008/02/16(土) 15:07:33 ID:w7he1Bjb
>>427 いかに楽できるのかを考えるのが(効率の)いいプログラマなんだと思うんだが
どっちのメリット・デメリットも理解した上でデメリットに対応し、自分の楽なほうを選んでるんだからいい
何の説得力も説得材料もないそんなことしか言えないお前のほうがよっぽど低脳だ
>>430 じゃあなんでyahooはページ移動にセッション使ってないんだよ
効率悪いプログラマの集団かw
yahooにはPHP創始者もエンジニアとしているんだけどなw
低脳にそんなに反応するのか やっぱり能力の低さがコンプレックスになってる奴は違う
ヤホーじゃなくてお前の意見を言えw
>>431 yahooにとってはhiddenのメリットのほうが大きかったってことだろ
ちなみにデメリットの対処を考えると実はセッションの方が楽ではない
>yahooはページ移動にセッション使ってない・PHP創始者もエンジニアとしている
これは何の技術的理由にもならないことが分からんのか?
っていうか継続データのやり取りにセッション使ってないって保証はどこにあんの?
ここにいる低脳プログラマのやってることは 納品さえすれば、後のことは関係ないみたいなのばっか セキュリティ0
やり方としてはどちらもありだし、 セキュリティもどちらが上というわけじゃないのに、 たまたまYAHOOがやっていたということを根拠にするのやめてくれない?w ちゃんと自分の意見を言おうね。
--------------------------------------- やり方としてはどちらもありだし、 セキュリティもどちらが上というわけじゃないのに --------------------------------------- 同意
セキュリティもどちらが上というわけじゃないのに? セッションよりもhiddenの方が安全に決まってるだろうがw セキュリティで危険なのってセッション絡みが多い hiddenで危険なのって聞かないというか セッションだろうが最初の画面はhiddenで飛ばすし
hiddenで毎画面チェックして 最終画面でも総チェックした方が セキュリティは上 セッションは書き換えられたらおしまい
rails様がセッションでもhiddenでもなくクッキーに書き出してるんだから おまえらもクッキーにしようぜ
hiddenじゃセッションの代わりにはならないよ? 他のページ行ってもどってきたらデータを引き継げない。
443 :
nobodyさん :2008/02/16(土) 16:04:24 ID:w7he1Bjb
>>439 >セッションよりもhiddenの方が安全に決まってるだろうがw
うん、だからhiddenの方が安全な理由を教えてよ
「hidden セッション」とかで検索するとhiddenのほうが否定的なんだけど
>>440 >セッションは書き換えられたらおしまい
これはセッションを(少しでも)利用してるシステム全部に言えること
継続データをhiddenにするかセッションにするかとは全く論点が違う
ここまで馬鹿と利口が鮮やかに色分けされているスレも珍しいな。
>>446 どちらが馬鹿か指摘してよ。そうすればあんたが馬鹿かかどうかわかるからw
>>447 「とりあえずお前はバカのボックスに入ってくれ」とさ
>>448 おやおや? 何か気に障りましたかな?w
見えない敵と戦ってるやつがいるな
まぁ分かりやすく言うとだな、 hidden=オナニー セッション=セックス
ためになるスレだなー 個人的な雑感で言えば、セッション派だなぁ。 セッションってそもそもクライアントの送ってくるデータが信用できないから 渋々サーバ側にデータ置いて、金庫の鍵だけやんよって話なんだから(違ったらごめんね)、 データの信用度で言えば当然セッションの方が上だと思うよ。 たとえば、証券会社の登録フォームとかはセッションの上に さらに短めの有効期限が切ってあって、入力ステップに時間が 空くと別人の入力と判断して強制的にやり直しするって形を取ってる。 要するにさ、hiddenってブラウザの画面上にレンダリングされないってだけで 普通のテキストエリア置いてあるのと全く変わりないんだから、 突っつきやすさから言ったらhiddenのが危なくないかな。 反論ぷりーず
あ、ただ盗まれて被害が大きいのはセッションだと思うよ。 サーバ側のファイルまで信用ができなくなるってのはやばい。 でもそれってもう入力フォームでなんちゃらって話じゃないよね。
セッション多様してるほどセッション・ハイジャックされる確率は高くなる
セキュリティというか、セッションを使う場合の注意点として。 同一セッションで、複数のウインドウ(タブ)を開かれて同じ画面を 操作された場合への対処をどうするかとか、 セッション上のデータのクリアタイミングとかをちゃんと考えてあるなら 別にセッションでもいいんだけど。 hiddenだからって、少なくとも破壊的操作が入るところではデータの 妥当性検証をするのは当たり前の話で、それをやっていないのが論外なだけ。 で、システム形態だとか対処コストを考えて実装方式を決めてください。
>>455 > hiddenだからって、少なくとも破壊的操作が入るところではデータの
> 妥当性検証をするのは当たり前の話で、それをやっていないのが論外なだけ。
hiddenでデータを渡したらページごとに
同じチェックしないといけないじゃん。
そういうのは面倒だろう。
それをフレームワークで良い感じに楽にやる方法は無いのか?という話題。
セッション使えばサーバーにキャッシュがたまるからさ どうでもいいデータまでセッションにしてると 一時的ではあってもキャッシュたくさんになるわけよ アクセス数多いサイトだと 生産性高くても負荷的にどうなんだよ?
459 :
457 :2008/02/16(土) 22:16:20 ID:???
それと、POSTした内容すべてを次のページに hiddenで表示する必要もあるね。 ここんところ、CakePHPでのスタンダードなやり方ってどうすんのさ?
459はサーバー運用した経験がないように思う 構築経験も小規模サイトの経験しかない
railsはサーバー負荷かけないようにクッキーらしいが クッキー対応してないプラットフォームを無視してるよな
>>460 CakePHPのスレだからここ。
CakePHPでのやり方を聞くのは普通なわけ。
すでに他でやったことあるけど、それは自力でやっているだけなの。
フレームワークとはそれを簡単に提供するものなわけ。
あんたの言っていることは「CakePHPでPOSTした情報をどうやって取得するんだ」
という問い対して、$_POSTで取得すると答えているようなもん。
それはCakePHPのやり方ではない! (
>>460 へのレスでもある)
言っている意味。わかる?
○○機能ある?と聞いて
煽りしか返ってこないとき、
その機能は無いと思ったほうがいいよw
無いと答えるのが悔しくて煽りに走る。
もしくは
>>460 が知らないだけ。
460は煽りではないと思うよ 負荷的な意見には納得せざるおえない 楽だけ優先しすぎて負荷的な要素を一切考えないというのはおかしい CakePHPがページ移動にセッションで渡せという仕様にもなってないわけだし 1.2から標準装備されたページ送りみても セッションじゃなくてパラメータを渡す方法でページ送りする仕様だし
案件依頼だしたときに、何の確認もなく ページ移動にくだらんデータまでセッションで使いやがったら 2度目の依頼はまずしない!!
467 :
nobodyさん :2008/02/16(土) 23:04:42 ID:w7he1Bjb
>>465 いやいや、誰もそんな議論はしてない。
ページングとかはGETパラメータで当たり前。
>>455 >同一セッションで、複数のウインドウ(タブ)を開かれて同じ画面を操作された場合への対処
これはほんとそうで、画面識別のためのトークンを発行するなどの対処が必要。
>>467 ページングとかはGETパラメータで当たり前てw
セッション使うなら
ページングにGETパラメータを渡し続ける必要ないだろ?
Cakeユーザーのしったかこえー なんかosCommeceやOpenPNEやEC-CUBEのスレと同じ臭いがするよね
>>467 楽だからセッション使うなら
ページングもセッションつかったら楽だろうが
ページングだけセッション使わないて何でや?
検索条件増えるたびにページリンクにパラメータ記述するの面倒やろが
たとえ他でセッションを使っていようと、検索条件、ページとかはGETを使う意味があって。 それは何かというと、URLをコピーしておいて、後でそれを貼り付ければ 同じ内容を表示できるという点。 URLをメールで送って他の人に同じものを見てもらうとかね。 POSTもしくはセッションだと、同じ条件で検索し直したり ページ移動し直さないといけなくなるけど。
>>467 おまえ画面識別のためのトークン発行なんてしてないだろ?
楽しようとするやつがそんなセキュリティ的なことするわけないやんw
してるよ。楽をするのとセキュリティを疎かにするのは別の話。
>>473 してるよと言われても
セッションに関するセキュリティ対策を具体的にどうやってるのか
全く書かれてないので説得力がない
対策してるのは画面識別のためのトークン発行だけ?
これは具体的にどうやってるの?
セッションに関するセキュリティ対策は、継続データをhiddenに格納するかセッションに格納するかに関係はないよね。 セッションそのものの話だから。 一応それの対応は、ログイン時にセッションIDをはりかえる(セッション固定化の対応)。 もっと厳密にやりたい(そういう要求の)時はセッションID+ユーザエージェント(またはcookie)での認証(セッション乗っ取りの対応)。 ただこれはユーザビリティ的に問題があるからそこを説明した上で納得してもらえればって感じで。 トークンは、処理1(表示)、処理2(POST・確認)、処理3(実行)っていうときに、 処理1でトークンを生成してセッションに格納し、その値をhiddenに埋め込むか、処理2へのURLに付加する。 処理2でpostデータをセッションに格納(トークンをネームスペースとする(画面識別))。 処理3でセッションからpostデータを取り出してDBに反映。 この時、処理2でバリデート失敗なら処理4へリダイレクト(リダイレクトURLにトークン付加)。 処理4は処理1と同じ画面(同テンプレート)で、セッションのpostデータをinput valueに入れる。 この処理の間、どの処理を行ったのかをセッションで管理する。 そうすることで処理2,3,4に直接行くのを防ぐ。 またセッションに有効なトークンがない場合は処理2,3,4は実行不可。 こんな感じでやってる。
ごめん。ちょっとニュアンスが違う。 >そうすることで処理2,3,4に直接行くのを防ぐ。 1から3とか、4から3とかを防ぐ。
$form->inputの配列オプションarray('DIV'=>false)を 毎回入れるの面倒だけど、なんとかならんのかな
>>476 そういう汎用的だが面倒な処理ってのは、フレームワークでやってほしいね。
Cakeにはそんな機能無いの?
なければそういうコンポーネントとか。
>>474 おー。それであってる。branches以下を見ればよかったのか。
意図したところにちゃんとコード入ってるよ。
find('count')には入ってないけど、やっぱcountで
afterfindを呼び出す必要は無いのかな?
使い道はわかんないけどcountだからafterfind要らないって発想だとバグ生みそう とはじめは思ったけどcountは $results = $this->__filterResults($results, true); 省いても結果変わらないから別によくね? 初心者丸出しですいません
モデル以外(クッキーや単純なPOSTなど)のバリデーションって どうやってる? モデルみたいに簡単にかく方法用意されてないのかな?
cakeのソースってzendframeworkと比べると汚いんですか?
テーブル名にアンダーバーつけたら動かない どうすれば動くの? 例) c_userテーブル
486 :
484 :2008/02/18(月) 04:56:56 ID:???
テーブル名にアンダーバーつけて動かないのは メンバ変数名に[$]が自動的についてしまうのが原因かな もっと詳しく調べてみよう
$? まあどうでもいいやw
489 :
484 :2008/02/18(月) 05:05:59 ID:???
謎が解けた bakeでつかって作ると var $helpers = array('Html', 'Form', ''); helpers配列の最後に空の値が自動的に入るクサい 空の値をとったら動いた
命名規約通りなら c_usersテーブル app/models/c_user.php CUser app/controllers/c_users_controller.php CUsersController じゃなかったっけ試してないけど って解決したならいいや
491 :
484 :2008/02/18(月) 05:20:30 ID:???
bake使ったときに helperのときの質問でライブラリ名指定するとこで そのままエンターしたから 空の値がはいっちゃったくさい
$html->link() でリンク作成できるみたいだけど リンクを新しいウィンドウで開かせたい場合はどうしてますか?
493 :
492 :2008/02/18(月) 06:45:36 ID:???
第2引数に array('target'=>'newwin') でよかったんだ
cakephp使ってからコード見やすくなったけど 激的に作業スピードが変わるということはないな
報告はいらないといったのにやっぱりするんだなw まあ、もとからそれが目的なのだろうから仕方ないかwww
よくこんなゲロ以下のコードのFWの上ででみんなよくやるね cakeユーザはある意味凄いと思うよ
0から作るにはフレームワークがいいけど 今まで沢山のサイト作ってきたので 0から作るようなサイトはあまりないよ それを壊してフレームワークにするとかアホらしい作業
>>497 オプソなんだからお前が修正しろ。
もしくは自分で作れ。
汚いというか ブラックボックスの割に 穴だらけなのが困る フレームワークの意味ねえよw
ブラックボックス? 穴? 何の話?
ブラックボックスというか、各メソッドの引数決めに迷走した挙句 後方互換取ろうとするもんだから、メソッド内での引き回しが地獄
>>502 それには同意。引数の名前の通りに使ってくれと思う。
でも、それを理由に他のフレームワークを調べてみたんだが、
どうもCakeほど総合力で勝っているものが無い・・・
もう無くてもいいかもしれんが個人的にPHP4、PHP5コード互換と
アソシエーションとかデータベース周りが一番実用的なんだよなぁ。
※PHP4、PHP5コード互換とはPHP4用とPHP5用で同じコードが使えるという意味。
CodeIgniterはPHP4対応だが、コンストラクタがPHP4とPHP5でのやり方が違って拍子抜け。
>>503 アソシエーションって対象のモデルデータしか必要ない時も他のモデルデータくっつけるから微妙じゃない?
なんかレベル低いやつばかりだな。いくつかアプリケーション作ってから物言えよ
お前もな
Cakeの導入考えてるんだど、ちょっと質問させてください。 大きなデータベースをガシガシ使う予定があるんだけど、 やっぱりPDO使う場合に比べてCakePHPでシステム作ると データ処理とか重くなりますか?
コード読むと穴だらけなのが使えないな なんでわざわざフレームワークの穴埋めする必要があるのかとw
フレームワークに穴があるのか?
>>508 そういうのは、言い出した人が証明する義務を持つってのが
世の中の常識だってわかってる?
まあわかっていたらそんな中途半端なこと言わないと思うが。
512 :
507 :2008/02/18(月) 22:19:43 ID:???
>>510 やっぱそうですよね…
体感で明らかに違うくらい差がありますかね?
少しでも軽いシステムを作る場合は、Cakeは避けた方が無難
なのかな…便利そうで使ってみたかったけど…
少しでも軽いシステムを作るのなら、 C言語を使ったほうがいいよ。
>>512 >少しでも軽いシステムを作る場合は、Cakeは避けた方が無難
そうじゃない
少しでも軽いシステムを作る場合は、フレームワークは避けた方が無難
「少しでも」が何と比較してなのかはわからんが
少しでもリクエスト数への耐性稼ぎたいなら自前でキャッシュさせたり 静的HTML吐いたりとか検討すべきだし
そんなことより少しでも早く システムを作ってさい。
フレームワークはCakePHP使ってるけど 俺俺関数はすべてc言語でPHP拡張モジュールにして利用してるよ 高速化と利便性を意識してやってる
>>511 証明するもなにも使えばすぐわかる
セキュリティホールが簡単にできてしまう
基本的なDB関係やパラメータの受け渡しで穴がある
もちろん気をつければいいんだが
フレームワークでそんなとこに気をつけなきゃいけない
というのがちょっといまいち
素人がセキュリティホールだらけのサイトつくりまくって
PHPの糞さを助長しなければいいのだが
>>504 マニュアルぐらいちょろっと読んだほうがいいよ
あれもこれもと親切すぎるわりに 規則に統一性がなく 中途半端な感じ まあオープンソースの宿命といえばそれまでだけどね
>>518 だからさ、証明するのはあんたの仕事なんだって。
CakePHPのテーブルの命名規約って面倒なんだけど、 例えばtable1、table2ってテーブル名があったら、 table1s、table2sってしても大丈夫?
>>521 証明しないとわからない人間が使うとどうなるか…
PHPは糞言語っていわれるのがおちだなあ
1.3くらいでもうちょい使いやすくなってるといいな
>>523 だから説明する義務があるんだってば
何話すり替え店だよwww
そんなテーブル名のシステム投げ捨ててしまえ
Cakeとかの名前の付け方を見てて つくづく英語の複数形という考え方はすごいと思うよ。
527 :
522 :2008/02/19(火) 03:15:24 ID:???
>>525 いや、まじで数字の入ったテーブルがあって、それを複数形にしなくちゃいけないんだよ(つД`)
可能かどうかわかる?
複数形にしようが単数形のままだろうが、 まったく違う名前にだろうが自由自在。
語尾が数字の場合は table1 なら TableFirsts table2 なら TableSeconds table3 なら TableThirds になるらしい
530 :
522 :2008/02/19(火) 07:30:26 ID:???
>>530 ウソなのに気づかないなんて
ホント馬鹿ですねw
532 :
nobodyさん :2008/02/19(火) 14:11:35 ID:twNHgR++
>>518 >基本的なDB関係やパラメータの受け渡しで穴がある
それ結構重要な話だからkwsk
ヒント SQLという言語には穴があるといわれている。
何を言ってるのかさっぱりわからないんだけど、 要するにフレームワーク自体にSQLインジェクションの脆弱性があるって事? kwskkwsk
>>535 Qという文字に穴が開いてるだろうがバカw
何その程度の低さ
>>538 もしそれのことを穴とか言っているんだとしたら、
あまりに低レベルすぎて笑うんだがw
>>539 超典型的なSQLインジェクションの穴だし、たしかに低レベルだなw
ちなみにh()もhtmlspechalcharsに丸渡ししてるから、
htmlエスケープの穴も塞がれてない
>>540 笑うのは、これを穴といっている奴のことな。
たとえば、SQLインジェクションを、SQLの穴という奴はいない。
SQLを使って作った奴の問題。
世の中のRDMS用のどのライブラリ・フレームワークもSQLを直接実行できる。
だから、すべてのライブラリ・フレームワークに穴がある。といったら
馬鹿にされるぞ。
余りにも低レベルな奴だとな。
高レベルな穴とかあるん?
>>541 おまえも含めて
レスのレベル低くなってきてるぞ
くだらん話しを広げすぎ
>>541 低レベルとか相手の感情を引き出すような言葉は使うな
レスが荒れる
まともな反論が無い時点で、アフォなのは間違いないなw あぁ。穴といっているやつがね。
>>544 もう発端や経緯抜きで、荒れさせたいだけなんだろう
>>538 それもそだねえ
h関数も同様
少なくとも この辺りの対策はフレームワークに組み込まれるべき部分
でなければ自分で書くのと大差ないわけだし
他にもDBが外部から更新されるパターンがけっこうあるよねえ
低レベルとか言っているやつがいるが
その低レベルな穴をふさぐのもフレームワークの役目
同じことやるなら 自分で書けばいいんだしな
問題なのは 独自の変なルールくっつけているわりに
そういう部分に手抜きがあるということ
そして 手抜きがあるところもあれば きちんとしているとこもある
ようは 今のCakePHPは中途半端なのね
ZendやCIのほうが変なルールがない分 作りやすいかもねえ
できたコードも見通しいいしね
フレームワークばっかいらんわ!次から次へと乱立しやがって なんぼほど覚えることが増えんねん、いい加減にせーよボケ!!
別に増えたって無視すりゃ良いじゃん。 それとも仕事で嫌々使わされてるクチか?
ちょっと質問 Cakeで外部キーはテーブル名単数形_id(例えばuser_id)とする、といったルールになってるけど、 例えばusersテーブルのidじゃなくて、usersテーブルのuseridをuser_idに引っ張ってきたいときは どうしたらいいですか? usersテーブルのプライマリキーをidからuseridに手動変更するとか? それでもuser_idに自動的に引っ張ってこれますか?
>>550 Cakephpのアソシエイトの項目よく読んだかお前?
>>547 必死だなw
これは穴とは言わない。これが穴なら他のフレームワークにもあると
何度も言われてまだわからないのかw
>>552 読んでわからなければ
きみが低脳ってこと
以上
やっぱり悪口だけで「具体的な反論」はできないんだなw 証明する義務は、穴があると言い出した側にある。以上。お前の頭は異常w
ソース読んでも穴がわからない低脳乙
そういう時はね。どのファイルの何行目って ちゃんと言わないと相手にしてもらえないよ。 お母さんに教えてもらわなかった?
今必死にファイル検索中・・・・ 見つからなかったから遠吠え↓
馬鹿の遠吠えだと思うんならスルーしてください。 ただの煽りあいでどっちも荒らしにしか見えませんよ。
559 :
nobodyさん :2008/02/21(木) 19:07:43 ID:9HKLO2wF
私もちょっと質問です。 複数のお店が複数のアイテムを販売し、不特定多数のユーザーがそのアイテムを 「お気に入り」に入れる。で、ユーザーがお気に入りを閲覧した時に アイテム一覧では無く、お店一覧を出したい場合どうしたら良いんでしょうか? 補足: お店とアイテムはhasManyでアイテムからお店はbelongsToな関係で、 ユーザーとお気に入りはhasOneでお気に入りからユーザーはbelongsToな関係 お気に入りにはアイテムのIDとユーザーのIDが記録されている。 お気に入りとアイテムはhasManyもしくはHABTM(まだこれを使う意味が分かってません) これら四つのテーブルに対するモデルは作成済み SQL的に言うと SELECT * FROM companies WHERE id IN ( SELECT company_id FROM items WHERE id IN ( SELECT item_id FROM favorites WHERE user_id = '$this->User->field()で取り出したusersテーブルのID' ) ) SQLで書くとこれだけですむ問題なのですが、 うまくデータを引き出せず、かといってFavoriteモデルから取り出した後でforeachで Companyの情報を取り出すといった事はやりたくないですし。。 どなたかご教授頂けないでしょうか。
User->Favorite->Item->Company なんだから手っ取り早くやるなら User->Favorite->recursive = 2; User->Favorite->findAll('user_id = '.$userID); でいいんじゃないの ていうかユーザーとお気に入りがhasManyでお気に入りとアイテムがhasOneな 気がしないでも無いけど
>>559 ざっと読んで答えるが、
お気に入り->アイテム->お店
ってアソシエーションも逆から設定しておけばいいんじゃないの?
お気に入りをテーブルから取り出したら、芋づる式に取り出せるように。
アイテムとお気に入りの関係まちがいた アイテムがお気に入りをhasManyでお気に入りがアイテムにbelongだ
563 :
nobodyさん :2008/02/21(木) 21:06:15 ID:9HKLO2wF
>560-562 >アイテムがお気に入りをhasManyでお気に入りがアイテムにbelongだ レスありがとうございます。確かにお気に入り、アイテムの関係でみるとそうなりますね。 ただお気に入りにはアイテムのIDが当然格納しているので当然belongsの設定が出来ますが、 アイテムにはfavorite_idは持ってないのですが、hasManyの設定って出来るものなのですか? 後データとして取得したいのは$data[*]['Company']という形なのですが 教えて頂いた方法を実践したとしても$data[*][Item]['Company']という形になりませんか? だとすると受け取ったCompanyデータは重複する可能性がありますのでその辺制御してやらんと 駄目だと思うのですが、間違ってますでしょうか。 関係ないのですが $this->User->Favorite->findAllって書き方出来るのですね。初めて知りましたorz
564 :
559 :2008/02/21(木) 21:11:32 ID:???
あ、上げちまいました。すんません。
マニュアルやらブログチュートリアルやら見て関連キーの書き方をもう一度確認すべし あとどういうデータで返って来るかは自分でdebug($data);でも書いて確認するんだ 気に入らない形だったら自分で整形しろ それで得たノウハウはここか自分のブログにでも書けばみんなしやわせ
俺ならさっさとquery()使うな。
思ったんだけど、お気に入りにshop_id入れるってのもアリだな。 というか引っ張り出すデータを軽くしたい時はそうしてる。
>>566 cake使う意味あるの?w
↑でもでてたけどアマチュア向けのFWだし
自分で書くなら他のがおすすめ
569 :
559 :2008/02/22(金) 01:11:47 ID:???
冷静に読んだら可笑しな事書いてますね。ちと整理をかねて勉強し直してみます(納期許す範囲でw。 >566 私もイラっと来てquery使おうとしてたんですが、ページングしたかったので とりあえず今はpaginateにWHERE句の後ろ全部渡す形にしちゃってますorz 皆様どうもありがとう。
あ、リロードしてなかった。 >567 設計上可能ですし私もそれ考えたのですが、 なんかそれをやると負けた気がして迷走してましたw
>>570 正しいか分からんけど、ロジックシンプルになるし、データも少なくなるしそれでいいんじゃん?
あとはmysql(ver5.1以上)のviewを使うのもありかもね。
大規模にも対応できるフレームワークはsymfonyてのがようやくわった CakePHPのアソシエイト部分が小規模向けに設計されてる GoogleCodeSearchで中規模程度のソースを結構見たが 大規模化するとかアソシエイト部分が、かなり複雑になっていて とてもチーム分担できるようなソースでは無くなっている symfonyはここが簡潔でわかりやすい
symfonyにはアソシエイトが無い。 だからCakePHPでアソシエイトを使わなければいいだけの話。
>>573 アソシエイトの意味をわかってないんじゃ。。。
モデルで共通のライブラリ的な機能を呼び出すとき CakePHP的にはどうするのが一番いいの? モデルからコンポーネントを無理やり使う? ビヘイビアってライブラリというよりか フックを入れるものだからちょっと感じが違うよね。
app_model.phpに入れるんでよくね?
>>576 たとえば、ファイル読み書きライブラリを使うとして、
$handle = $model->fopen($file)
$model->fputs($handle, $data);
とか気持ち悪いとか思わない?
継承関係になってないんだよね。
$model->findAll (このモデルのデータを検索する)
$model->save (このモデルにデータを保存する)
$model->fopen (このモデルとは関係ないが、ファイルをオープンする)
$model->fputs (このモデルとは関係ない、ファイルに保存する)
それは気持ち悪い ファイルの読み書きだったら一個モデル作ればいいんじゃね? モデルってデータの入出力であってモデル=DBのテーブルってわけでもないし
579 :
578 :2008/02/22(金) 14:02:56 ID:???
cakephp的とか考えずにvendorsに入れちゃうのが早いし簡単だけどな
>>578 今回はファイルを例にしたけど、
そういう汎用的なライブラリって使うでしょ?
そういうのはどうやって使うのがCakePHP的なのかなぁって。
vendersに入れるってことは、
vendor('aaa/bbb');
class MyModel extends AppModel {
function foo() {
$lib = new Lib();
}
}
こんな感じで使うってこと?
vendorsを使うとして、そうしたら、Vendorsに入れて使えば、 コンポーネントいらないんじゃね?と思えてきた。 コンポーネントは何の為に使うんだろう? 呼び出したコントローラを参照する必要がある場合? すると汎用的なライブラリはvendorを使ったほうがいいのかな。 たとえばメール送信(1.2のEmailComponent)は コンポーネントではなく、vendorにするべきじゃないかと思えてきた。 バックグラウンド的にモデルに変更があったらメールするなんて用途もあるだろうし。 そういう場合でもモデルを変更するコントローラで一旦変更を感知して そこからメールするのがいいのだろうか?
コントローラ、モデル、(ビューも?)のどこででも使える vendorsプロパティがほしいな。 class My extends ? { var $vendors = array('Aaa', 'Bbb', 'Ccc'); function foo() { $this->Aaa->foo(); } } あとpluginsってフォルダを使っている例を見たことが無い。
だから"べき"論でいけばMVC意識して書けよ それがめんどくさいなら無節操にvendors使えばいいだろ
>>583 うん。それじゃ「べき論」をするということ前提で話を進めましょうか。
どうするのが一番いいのだろうか?
正統派な方法としてはコンポーネントじゃないの?
>>576 でもいいけど、正統派じゃないでしょ。
Railsに移行したらいいのに
>>585 モデルでコンポーネントを使うという意味?
でも、フォルダからしてコンポーネントはコントロールの下にあるし、
なによりモデルでコンポーネントを使う方法が無いでしょ?
App::importで強制的に読み込むしかない。
>>586 railsが格安共有サーバーでも公式に動くようになったらねw
CakePHPは小規模向き、アソシエイト機能見て笑ったし 将来性無いなと判断する決め手になった 後はデータがオブジェクトじゃなくて配列処理してるとこね これも、かなり小規模を前提として設計してるよね
ドキュメントの多さ大規模に向いてるsymfonyが PHPフレームワーク主流になると思う 有名どころの大手ならCakePHPはいれない これは断言できる、 少人数、小規模設計だから当然 半年くらいCakePHPでコーディングしてきたけど捨てるよ CakePHP指定の案件が将来望めない symfony案件が増加するのは間違いない
>>589 だね
途中荒らしてるやついたが
なんであんなに必至なのかな
まあ初心者には簡単だしおすすめだけど
cakephpのサイト探すと穴空いたままで公開してるとこ多いな
急にアレな人が増えたな
俺用メモ $db =& ConnectionManager::getDataSource('default'); $db->query('select * from table', false); ←二つ目の引数はキャッシュを使わないという意味
そもそも現時点で大規模で高負荷なサイト向きだと思っていた人がいるの? そりゃ単に調査不足だろ
メソッド内で global $hoge ; とかしても null なのですが・・・ 何かやり方間違ってますか? 例えば 配列を書いたファイル:data.php <?php $hoge = array( "a", "b", "c" ) ; コントローラ:users_controller.php <?php include_once( "data.php" ) ; class UsersController extends AppController { var $name = "Users" ; var $uses = array( "User" ) ; function index() { global $hoge ; var_dump( $hoge ) ; } }
CakePHPは小規模でもかなりの小規模 たとえるなら、携帯の掲示板レベル
1年後にはレンサバ環境もPHP5が標準になるだろうから そうなればsymfonyが敵なし状態だろうな
分かったけどここってcakephpのスレだよ?
使いたくないヤツは使わなければいい。それだけ。 チンポニーでも禅度でも好きなの使え。
cakephp v2はphp5&6専用になるよ
それは困るよかがみん(笑)
cakeの1.2でrestを実装したいんだけど xmlの処理ってどこで実装するのが良いの? viewにべた書きは嫌なんだけど
じゃあモデルで。
606 :
nobodyさん :2008/02/25(月) 17:42:18 ID:6F5pnXqd
cakeで自分の考えたクラス構造を実装するのはコンポーネントを使えばいいんですか? MVCの奥でデザインパターンみたいな構造にしたいんですけど。
どのパターンかによるだろう
フォームからGETでデータを送りたいのですが、URLに「?」や「フィールド名」が付きます。 URL/データ/データ このような感じでデータだけを送ることはできませんか?
>>608 俺はGETがきたら、名前つき引数形式のURLに変換して
リダイレクトをするコンポーネントを作った。
>>608 onsubmitでJavaScriptを呼び出してフォームのURLを動的に作成したらいいんじゃない?
俺俺クラスってどこに入れれば良いの? vendor?
613 :
nobodyさん :2008/02/27(水) 10:41:56 ID:pFPJf0/n
コントローラからビューにパラメータをわたすにはどうすればいいのでしょうか?
モデルのreadとfind系(findById等)の違い。 $model->readを実行すると、$model->data に読み込んだデータが入る。 $model->findByIdだと$model->dataの値はそのまま。 確認したし、多分あっていると思うが、 これの違いを明確に書いてあるところあるかな?
>>613 1.2しか知らないけど
controller
$this->set('hoge','aiueo');
view
echo $hoge;
616 :
nobodyさん :2008/02/27(水) 13:30:21 ID:pFPJf0/n
>>615 すいません。間違えました。
コントローラからヘルパーにパラメータをわたす方法でした。
readで二つ目の引数指定してやると$model->idも入る ソース見たまんまだけど
618の意見に賛成。 ヘルパー function test($hoge){ echo $hoge; } コントローラー $this->set('hoge','てんこもり'); これでとりあえずビューにわたるだろ? んで、ビューからヘルパーを呼ぶと。 $helper->test($hoge); こんで $hoge の内容が表示されますよっと。
ヘルパー使うビューの頭で <?php $helper->init($settings); ?> 初期化命令を毎回呼べと?
$controller->set('settei', $settei); ってビューに渡しておいてビューの頭で $helper->settei($settei); ってヘルパーに渡してるよ俺の場合 なんかバカっぽいけど。 App::import('Helper', 'MyHelper'); $myhelper = new MyHelper(); $myhelper->settei($settei); $controller->set('myhelper', $myhelper); なら渡せないことも無かったけど、MyHelperの中でHtmlHelperやFormHelper呼ぼうとしたら 自動でうまく呼び出せなかったからやめた MyHelperの中で$this->Html = new HtmlHelper();とか手動でやってやればよかったのかな そのときは思いつかなかったからやってないけど
623 :
nobodyさん :2008/02/27(水) 20:00:22 ID:pFPJf0/n
えーとお決まりですが、 自己解決しました(笑)
624 :
nobodyさん :2008/02/27(水) 20:01:37 ID:WlN8JrV2
CakePHPを使ってる人でビューはSmartyを使用してる人ってどのくらいいますか?また それぞれの印象を聞いてみたいです。 俺もCakePHPを使い始めた当初からSmartyを使ってきてる一人なのですが、なんだか 実は結構めんどくさかったりする割に従来のPHP記述でのビューに比べてあんまり パフォーマンス良くない気がしてきたもので。(例えば、ヘルパーに配列を渡す場合 Smartyでのビューだと細々とめんどくさかったり)
smarty使うならpear使っておれおれフレームワークでよいじゃん
626 :
nobodyさん :2008/02/27(水) 21:24:24 ID:WlN8JrV2
>>625 なに?おれおれフレームワークって?
知り合いがZend FrameworkのMVC(この場合はV)をCakeで使ってたけど、あれは意味ねえなあ
627 :
nobodyさん :2008/02/27(水) 21:25:22 ID:pFPJf0/n
つっこみなしか。さびしいなぁw 家に帰るのでIDかわるから、あきらめて説明すると、 コントローラで $this->params['hoge'] = $data; に値設定。 ヘルパーからも、$this->params['hoge']にアクセスできる。 $this->paramsを受け渡しに使うのってどうよ?と思うかもしれんが、 paginationもにたように、params['paging']を使っているからいいだろう? 他にClassRegistryを使ったやり方があって、FormHelperとかは これを使っているみたいだが、なんかグローバル変数あつかっている感じがして却下。 もう一つ、Viewを継承した独自のビューでごちゃごちゃ変数わたしても できるかもしれんが、余計なものを作らないといけないので却下。
おれおれってのはお手製で世の中に広まってない独自のもの
hasManyとかbelongsToとかmodelにいれとくと $model->findAll()するとき、有無を言わさずjoinしてるみたいなんだけど これってなんとかならんのかね。 railsだとfind(:all,:include = ...)で指定したときだけjoinとかするじゃん。
>>629 常識です。
なんとかなりますので、ぐぐってください。
Model::recursiveって1行で書けよ。
つ unbindModel
将来性のないフレームワークをブームということで一生懸命に習得してるやつwwww 時間の無駄やろ。
大衆は常に誤った方向へ行くからな 頭のいい人間が少人数しかいないから 正しい方向に行くのは常に少人数
世の中将来性がないと思われていたものが 主流になっている罠w
困るのはその馬鹿だけでいいな
中国も餃子問題も同じ 反日感情が大衆を間違った方向へ進ませている CakePHPも同じ
CakePHPは今年で無くなるであろう 小規模フレームワークは乱立しやすく 次から次へと良いフレームワークが出来る 大規模フレームワークはやはり規模がでかいから 乱立しにくい どうせなら覚える量は少ない方がいい そう賢い人間の選ぶ答えはsymfony
ここでいう覚える量というのは フレームワークの数分という意味だからね
以前は活気のあったmojaviスレが廃れてるのを見れば CakePHPも同じ道に行くのはわかるだろう 小規模フレームワークの世代交代は1年単位なんだよね
データ渡しがオブジェクトじゃないのがなあ 簡単な掲示板レベルのものしか作れないね だから今後も有名どころのCakePHP採用実績はありえないよね だから廃れるのも速い、その理由からも今年で終わりクセー
>>642 以前は活気のあったmojaviスレが廃れてるのを見れば
お前の好きなフレームワークも同じ道に行くのはわかるだろう w
所詮 アマチュア向け アマチュアも使えるきちんとしたFWなら生き延びるだろうけど・・・ CIに期待
CakePHPて小規模なクセに柔軟性がないよなwww Viewでヘルパーのコンポーネントの呼び出し宣言出来ないとか Viewで直接モデルをコントロール出来ないとかね
単純なロジックはincludeで呼び出し 複雑なロジックはコンポーネント化して呼び出し 複雑なロジックでかつ断片性が内容によってかわるならCakePHPはどうすんの?
symfonyのスロット機能には驚いた なに、この便利な機能 CakePHP利用してからsymfony使うと 豊富な便利機能にただただ関心
ドキュメントもいい加減だし手抜きフレームワークだよね 作者やる気がないから将来性もクソもないがね やる気のない社長がいる会社の株を買ってるのと同じだね
作者の気まぐれで いつ開発中止するかわからんフレームワークをよく使えるなwww
symfonyは流行らないだろうな アマチュアには敷居高いからね 流行らなければ廃れていくのは同じ
長い目で見れば、流行だけで中身の薄いものは確実に消える フレームワークを次々乗り換えるんじゃなくて 期間的に長く使えるフレームワークしかいらない、 一見、CakePHPは効率よく見えるが 過去資産になりにくい時間の使い方は、非効率
0から小規模システムを作るならCakePHPが速いけど 0から作る案件はかなり少ない スパゲッティソースでも 今までの過去資産をカスタマイズする方が圧倒的に速い
ねぇ、なんで最近symfonyの布教活発なの?
CakePHPより優れたフレームワークたくさんある ただ知名度が優先して使ってる人が多くなってるだけ
初心者では扱いにくい難易度の高い フレームワークが主流にならないと 初心者がフレームワーク出来ますとか 調子いい事を言うからな 初心者と経験者の差をはっきりさせて 初心者がすぐに食える状態を無くして欲しい
初心者向きの低フレームワークがCakePHP 高級志向の大人のフレームワークがsymfony
>>653 > 長い目で見れば、流行だけで中身の薄いものは確実に消える
それ具体的に何年後?
そりゃいつかは何もかも消えるだろうなw
そのときに、ほら消えた。俺の言っていたことは正しかったんだ。と
言えない様に、今何年後に消えるのか言ってもらおうか。
それまでに消えなければ、お前の言っていることは間違いだとはっきりする。
そのとき俺がおまえのことを思い出すことは無いだろうが、
少なくともおまえ自身は、自分の予測が外れたことを身にしみて感じるだろうw
縦読時「そ」が多い
その線でいくとPHPはどうなるぽ
すべてのページで使うような変数をまとめたファイルってどこでインクルードさせたらいいの? core.phpに書いてるんだけど、これで問題ないですか?
俺なら、app/bootstrap.phpに書くかな。 app/core.phpはcakeの動作を変えるために設定を変えるだけで 自分で値を追加しないものと感じる。 もっとも「すべてのページで使うような変数」の内容によっては、 AppControllerにかいたりvendors以下にファイル作ってそこに書いたりする。 とここで、ふと、自分の作っているのを見たらapp/core.phpにも書いていたwww といっても、ユニットテストのための追加設定だけどね。
666 :
nobodyさん :2008/03/01(土) 12:28:11 ID:uin8SgpQ
モデルの数値フィールドに、空文字を入力すると データベースの値として、0が入ってしまうんですが、 これをNULLで代入させる方法ありませんか? もちろんデーターベースのフィールドはNULL値が入るようになっています。 データベースはMySQL。クエリーとしては、 INSERTとかUPDATE 〜〜〜 number_field = '' という文が発行されています。 たしかデータベースによっては(Oracle?)、こういう場合null値を入れるやつも あった気がしますが、汎用的な方法としてやりたいな。
更新対象の配列を未入力チェックして空だったらnullで置き換えてからsave
ユニットテストって使うのが当たり前なくらい便利なんでしょうか? 使ったこと無いので勉強したほうがいいのかなと思いまして。 先輩方、ご指導ください。
669 :
nobodyさん :2008/03/01(土) 15:07:46 ID:uin8SgpQ
>>667 それがですね。nullを入れてもだめなんですよ。
同じところで4989を代入したら強制的に値を4989に出来たので
間違いないと思うんですが。
それMySQL側の設定なんじゃないの
>>668 使っていると今までの手動テストがいかに怠けていたかがわかるよ。
今ユニットテストでやっているテストを手動でやれといわれたら泣く。
設計が固まってなくて大幅に変更するときとか、安心していじれるようになる。
ある操作をしてエラー → プログラム修正 → データ消してテストデータ入れる → もう一回同じ操作。
これを手動で何度もやらなくてすむ。操作が複雑になって、前提データが
複雑になると、もう一回同じ状態に戻して操作なんてやってられない。
あとちょっと変則的だけど、データベースの定義&その他の設定をYAMLを
使ってやっているのだが、そのスキーマのチェックにも使っている。
スペルミスとか細かいエラーに悩まされなくていいよ。
本当は、YAMLスキーマバリエータを使うべきなんだろうけど。
PHP用なさそうだし、どこまで出来るのか不安だったので。
(たとえば、名前規約、複数形でなければならないとか
このフィールドは違う設定ファイルに定義されてなければならないとか)
672 :
nobodyさん :2008/03/01(土) 15:23:37 ID:uin8SgpQ
>>670 多分、それもあるとは思います。
しかし、同じ設定のまま、phpMyAdminではnullを入れられます。
もちろんこのときに発行されるSQL文は、
INSERTとかUPDATE 〜〜〜 number_field = null ですね。
MySQL側で設定できたとしても設定は変えられないと思われるので、
アプリ側で対処したいのですが。
/controller/action/1/2/param1:a/param2:b?c=test1&d=test2 今、このようなアドレスにいるとして、 ここから、以下のようなアドレスを作り出す 一番シンプルな方法は何でしょうか? (param1の内容だけを変えたいということです。) /controller/action/1/2/param1:z/param2:b?c=test1&d=test2 URL文字列形式じゃなくて、params配列形式でもOKです。 むしろこっちのほうがいいです。
>>673 $thisをvar_dumpして必要な値で構成して、変更したいところを置き換えればいいんじゃない?
>>674 今それでやってますけど、これぐらいフレームワークが用意していてもよさそうじゃない?
関数名($this->params, array('named'=>array('param1'=>'z')))
ってな感じ。
>>671 ありがとうございます!ご丁寧に教えて頂いてうれしいです。
早速勉強したいと思います。
Akelosこれいいよ ドキュメントが少ないからソース解析しながら大変だけど この作業がわりと楽しい 理解を深めながらコーディングできる。 ちょっとした不具合でもデバッグ文でググるんじゃなくて まずソース解析、こっちの方が正しくて速いことに気づいた
Akelosを調べあげるほどRoRとそっくりw Akelos自体にドキュメント無くてもRoRと照らし合わせれば ドキュメントが要らないくらい、完全コピーされてるw
AkelosはCakePHPの4倍くらいの作業効率が速い感じがする なんで流行してないのかわからないwww ドキュメント量が少ないと何も出来ない人が多いからか?
CakePHPのfindall(null,nullnull,nullnull,nullnull,nullnull,nullnull,nullnull,nullnull,nullnull,null) これ見ると、もう萎える どんだけブームでもOOPじゃないフレームワークはいらない
そんなソースなん? キティガイすぎワロタ
馬鹿が自作自演しているので、本当の定義をさらしておきますね。 function findAll($conditions = null, $fields = null, $order = null, $limit = null, $page = 1, $recursive = null) {
ヌルヌルフレームワークwww
>>680 嘘つくなら、せめてコンマだけはちゃんといれようなw
null,null と打ってそれを適当な回数コピペしたのばればれだから。
メソッドの引数を持ち出して、OOPじゃないと言うってことは Akelosはメソッドの引数がオブジェクトなん? $params = new Parameter() $params->setConditions(・・・); $params->setFields(・・・); $params->setOrder(・・・); findAll($params) いくら引数が少なくてもこんなのはいやだw
お前らいつの話をしているんだ。
1.2からfind系関数はfind()に全て纏められて、推奨引数もシンプルになっている。
http://bakery.cakephp.org/articles/view/new-cakephp-releases 簡単に言うと find($type, $options) この二つだけ。
$typeには文字列all, first, list, countなどが入る。
この指定でそれぞれfindAll(), read(), generateList(), findCount()に対応するようになった。
$optionsには検索条件を指定する連想配列を入れていく。
要するに、
>>682 の引数conditions, fields, order, limit, page, recursiveなどを纏めて管理できる。
CakePHPの投げやりな引数は少しずつ改善されつつある。
頭の悪い愚痴ばかり垂れる暇があったら記事読めば?
これからは、findメソッドを使ったほうがいいのかな?
CakePHPにまったく興味ない
>>686 readは違う。モデルのインスタンスはテーブルの一行に当たるんだが、
readは、この一行のデータをモデルに読み込むもの。
具体的に言うと、$model->dataが変更されるもので、
find系メソッドはクラスメソッドのような扱いで、
インスタンスの状態は変えずに、値を取得するもの。
select pc,count(pc) as cnt from pclists gloup by pc こんな感じでgroup by使って集計ランキング作りたいときfind使ってる?
なんとなく類推して
>>686 っぽく書いてみた
$this->User->findByEmail('hoge', 'first', array('recursive' => 1));
発行されたSQL
SELECT "User"."first" FROM ほげほげ WHERE "User"."email" = 'hoge' ORDER BY recursive" 1 ASC LIMIT 1
SQL Error: 1: SQL logic error or missing database
よええ…
691が何をしたいのかさっぱりわからない。
693 :
691 :2008/03/02(日) 19:11:42 ID:???
$this->User->findByEmail('hoge', null, null, null, null, 1); がどうにかなるのかなと思ったんだよ もちろんこっちのヌルヌルならSQL通るよ
>>690 似たようなことをやってるんだけど、自分でSQLで書くようにしている。
find、findAllは比較演算子インジェクションの問題があるからfindBy系を主に使ってるけど こちらは結局今までどおりヌルヌルで書くしかないってこと?
書きたくなければ自分でAppModelでオーバーライドしたら?
>>693 nullが一個多いぞ。お前使ってないで文句言ってるだろw
で、たった四つの引数でなにごちゃごちゃいってんの?w
gloup by 使うというか カラム名をasで別名で使う場合は 直接SQL書かないとダメなんかな select ここがカラム名だけじゃない複雑な場合 from test は直接SQLがいいのかな
$this->User->findByEmail('hoge', null, null, null, null,null, null, null, null,null, null, null, null,null,1) これがオブジェクト指向なん?wwwwwwwwwwwwwwwwwwwwwwwwww
まさにヌル指向言語ですな
>>696 >>686 で書かれているfind系の新しい記述法がfindBy系に適用されるのかどうか
単に確認したいだけなんだけど
現状のCakeだと、findBy系の使用が推奨されること多かったから使ってる人も多いだろうし
>>699 また存在しない引数を勝手に増殖ですかw
ここでどんなに騒ごうが、流れは変わらないよなぁ。 自分のFWのスレいって有用な情報で賑わせればいいのに(´・ω・`)
考えてみれば、このスレの1は俺が立てたんだったなぁ。 そうか、1年前以上も前からはじめてたんだな。 このスレ立てて正解だった。 あれから俺もずいぶんと成長したな。 いまじゃユニットテストもちゃんと使えるようになったし。 Akelosは名前もすっかり忘れていたが、こっちも俺が立てたんだったなw こっちは残念ながらぜんぜん伸びず。 たぶんね。俺がつかって色々書いているからスレ伸びてるんだと思うよ。 Symfonyはたぶん、4月ぐらい?から俺が使うから伸びると思うよ。 PHP4対応を考慮しなくて良い、個人的なソフトで使う。 それまで、我慢してくれよ。
ヌル指向言語
Akelosはヌルを使用しない完全オブジェクト指向。 引数は全部ひとつだけしかない。 foo(array('hiki1'=>1, 'hiki2'=>2, 'hiki3'=>3))
どんだけクソなフレームワークでも人気が出れば それについていくしかない。 英語が言語的に最低でも、みんな英語使ってるなら使うしかない
すみません、誤爆しました。
【PHP】ヌルームワーク CakePHP 2ぬめり目
どんなスレでも湧く粘着ってある意味すごいなと思う今日この頃
ComponentからModelを直接参照するのって 設計的にどうなん?
戯れにdatabase.phpファイルの var $default = array('driver' => 'mysql', を var $default = array('driver' => 'postgres', に変更したらまあ当然の様にエラーが出た。 Warning: mysql_connect() [function.mysql-connect]: Unknown MySQL server host 'host='example.com' port='5432' dbname='bakesale' user='watashi' password='hogehoge'' (11004) in C:\www\temp\cake\cake\libs\model\dbo\dbo_postgres.php on line 90 しかし、 var $default = array('driver' => 'mysql', に直しても何時までも上記エラーが出てしまう。 cakePHPでは一度読み込んだ設定ファイルをどっかに溜めてたりするのかな? 教えて下さい偉い人!
DBからデータを引っ張ってきて、表示するときはループで表示することが多いですよね? そこでなんですが、ループで回しやすいように配列を整えると思うのですが、この作業はどこでやるのが正しいんですか? コントローラ/ビュー/ヘルパーどこがよいのでしょう。
基本はコントローラ以外にロジックを書くべきじゃないと思ってる。 っていうかそればMVCの基本だよね?
俺はHTMLの生成は全部ヘルパーでやってるな。 コントローラーはバリデーションして、モデルからデータを取得して、ビューに変数をセットするだけなんじゃないの。
おまえはほんとうにバカだなwwwww
質問なのだけど、 MingやGDのような外部ライブラリと、それを操作する関数群をCakeに持ってくる場合 ライブラリは当然app/vendorsフォルダに入れれば良いと思うのだけど、 関数群の方はどうしてやるのが良いんだろう? 呼び出し元が二か所になるので、呼び出し側のコントローラにベタでは書きたくないので そうするとこいつもvendorsの中に入れてコントローラ内でvendor()で呼ぶのか それとも専用コントローラを作るのか。はたまたコンポーネント? ちょっと知恵を貸して下さい。
多分Cakeに限って言えば俺俺クラスもCake式に使えないならvendorになる。そもそも外部というのは自分以外という意味じゃなくCake式に拡張した(例えばコンポーネント)もの以外を使いたい場合に利用するのが作法だと解釈してる。Cakeからしてみたらどっちも外部だからね
>>714 コンポーネントってMVCでいうところのコントローラなんだから
そこからモデルを直接参照しないで何するんだ?
$Component->Controller->Modelだときもちわるくね?
>>724 うーん?モデルに含めるって事?
良く分かんないな
726 :
721 :2008/03/04(火) 03:21:21 ID:???
>722 レスサンクス。やっぱりそれが妥当なんですね。 つかまだCake使い始めだからってのもあるのだけど、 こういう事する場合、あれでもこれでも出来るじゃなくて、 あれの場合はこういう手続きで。みたいなのきちっと一本化して欲しいなぁ。 こういう答えが明確でない事で悩む時間がかなり多い。。 もちろん関数とパラメータの意味を調べる為にソースにらめっこにも時間が取られるわけですが。。 社内ライブラリ群でやってる同規模の案件の倍以上かかってるよorz<当然残業コース。。トホホ
>>723 コンポーネントの意味がわかってねーなwww
Mコンポーネント
Vコンポーネント
Cコンポーネント
コンポーネントはMVCのそれぞれにあるんだよwww
低フレームワークをいじってるやつの基礎知識の無さは半端ねーな
>>726 フレームワーク覚えながら仕事できるっていい会社ですね
基本的に勉強は勤務外だから
とろとろ覚えながらやるなんて、まず無理
>>727 だからぁ
Mコンポーネント…Behavior(同じ処理に振る舞いを付ける時)
Vコンポーネント…Helper(表示に関してロジックが必要な時)
Cコンポーネント…Component(手続きを纏めて再利用する時)
Cakeの中ではCコンポーネントの事を単にコンポーネントって
呼んでいるんだから、いかに的外れな事を言ってるのか分かってね。
>>723 直接参照で問題ないでしょ。
データソースを扱いたいためにコンポーネントが
コントローラに依存し出したらそれこそ意味不明。
>>714 何が問題だと感じているの?
>>727 CakePHPにおけるComponentは
Controllerにしかないよ。
>
>>714 > 何が問題だと感じているの?
>>729 コントローラに追加していないモデルを
どうにしかしてコンポーネントで使うということです。
>>728 > フレームワーク覚えながら仕事できるっていい会社ですね
> 基本的に勉強は勤務外だから
家では仕事しない主義なんでw
>>731 現実の構成から考えると、Cakeのコンポーネントはあくまで
コントローラに書く記述の共通化用だからな
コントローラをインジェクションして使うものだと割り切った方がいいのでは?
734 :
nobodyさん :2008/03/04(火) 12:23:27 ID:Oi3CmVe3
コントローラにモデルを書いて コンポーネントに渡すなんてことをしないで、 コンポーネント内部で、uses()を使って モデルを直接読んでいいですかね?
コンポーネントの意味が理解できねーやつばっかりwww コントロール=コンポーネントていう考えがおかしい M V C コンポーネント まったく別物だからwww =で考えるなよバカwww
コンポーネントは再利用するためのカプセル化をいうんだから 確かにコントローラとコンポーネントを=で結びつけるのは変だね
>>729 もっと理論立てて書いてくれないかな
言葉足らずというか、自分にしかわからない書き方やめてくれる
Mコンポーネントの中にはMの処理をカプセル化したもの Vコンポーネントの中にはVの処理をカプセル化したもの Cコンポーネントの中にはCの処理をカプセル化したもの だからCコンポーネントの中にMやVの処理を入れてはダメ、Cの処理だけ 複雑化したら、それはコンポーネントといえない なぜなら再利用化に適さないから コンポーネントは複雑な処理じゃなくて、出来るだけ単純化したものを書くべき
>>736 CakePHPでは
Controllersフォルダ中にComponentsフォルダがあるの知ってる?w
Modelsフォルダの下behaviorsフォルダ。
Viewsフォルダの下にHelpersフォルダ。
どうせ知らなかったでしょ? 勉強してでなおしなさい。ば〜かば〜か
CakePHPがいうコンポーネントはていうのやめてくれる 誤解の元だから。 なんでCコンポーネントていえないのかね
742 :
735 :2008/03/04(火) 14:15:36 ID:???
で、コンポーネントの中でモデルを直接
生成しちゃうのってどうなんでしょうか?
>>734 がネタばれしちゃったけど、標準の一部のコンポーネントでは
直接生成しているのよね。
それなら設計的にはコンポーネントにもusesプロパティが
あってもいいと思うんだけど、実際には無い。
コンポーネントにusesプロパティが無いのがおかしいのか、
それともコンポーネントでモデルを直接生成している
一部のコンポーネントの方がおかしいのか。
フォルダ名にコンポーネントて書いてなければコンポーネントじゃないのか?www
>>741 ここはCakePHPスレなので、Componentで問題ありません。
誤解のもの? あなた誤解していたんですかw
どうやら、CakePHPを知らない奴が混じっているようだw
コンポーネントの中でモデルを直接 生成するてのは再利用化に欠けるんだよ MとCにそれぞれコンポーネント作って つなげればいいじゃんか
>>744 CakePHP使ってるやつのコンポーネントの理解の低さには参った
> なんでCコンポーネントていえないのかね シーコンポーネントなんて恥ずかしい言い方は論外として コントローラコンポーネントでぐぐったらStrutsが出てきた。 どうやらJava厨かw CakePHPスレでStruts用語使わないでくれないかな。誤解の元だから。
理解とかそういうことじゃなくて、 単にお前の用語の使い方が間違っているんだよ。 Cコンポーネントなんて用語はCakePHPにはでてこない。
>>746 Mにコンポーネント?を作るとして、
そのファイルをどこに配置すればいいのですか?
答えてください。
コンポーネント=Cコンポーネントという意味で議論すると非常にわかりにくくなる
>>750 その質問は強烈すぎw
Cake知らない人には答えられないし、
答えたとしたら、自分のマヌケさを露呈することになるw
答えまだかな?逃げるかな?♪
>>751 わかってないのはお前だけだって。ここはCakePHPスレ
behavirosの下にコンポーネントを作る? behavirosの下ならそれはコンポーネントじゃなくてビヘイビアだろw
これ機会にコンポーネント=Cコンポーネントという理解してたら 外注先で赤っ恥かきそうだなw
Cコントロールに訂正
Cコンポーネントに再訂正
外注先でシーコンポーネントなんて自社用語使ったら確実に赤っ恥かくぞw
コンポーネントとビヘイビアをつなぐとして 誰がつなぐのでしょうか? コントローラからモデル内部のビヘイビアは 普通直接見るもんじゃないですよね? コントローラで、コンポーネントとモデルをつなぐというのならわかるのですが? あとここはCakePHPスレなのでCakePHP用語で話してください。
>>760 コントローラからモデル内部のビヘイビアは
普通直接見るもんじゃないですよね?
具体的に?
>>761 あなたは、何がわからないのですか?
質問は具体的に。
で結局、AuthComponent(認証コンポーネント)の実装ってどうなんでしょう? そもそもAuthComponentはコンポーネントで実装するものなのか? AuthComponentはコンポーネント内部で、呼び出しもとの コントローラが知らないモデルを、直接参照しているが これは設計としてありなのか? 設計があまりよくないというのなら、こういうものを作る場合 本来はコントローラにモデルを参照させて、 コンポーネントに渡すべきなのか。 コンポーネントとビヘイビアをつなぐといっている人が いるみたいですが、この人の頭は大丈夫なのか。 以上よろしくお願いします。
ずっと752が常駐してる模様
752常駐乙
752に言われたことが一番痛かった予感
この時間帯にいるのは俺とお前だけwww 自演激しすぎwww
じゃあ俺の書き込み以外は全部お前ということかw 言っている言葉がめちゃくちゃだな
この時間帯にこのレス量は異常だよ そう俺とお前が激しく書き込んでるだけだよwww
766 :nobodyさん:2008/03/04(火) 14:53:18 ID:???
>>762 と
>>763 の知能の差に吹いた
767 :nobodyさん:2008/03/04(火) 14:55:20 ID:???
>>766 自演乙
これ書いたの両方お前だなw
いやいや全部おまえだからwww
777 :
766 :2008/03/04(火) 15:58:40 ID:???
>>760 CakePHPのビヘイビアは構造上モデルに依存するため
モデルを介さずコンポーネントとビヘイビアを
直接繋げるなど全く理解不能であり脳障害患者もいいところ。
って、分かってて言ってるんだろうけどね。
>>768 俺は「アリ」だと思う。
一般にMVCにおいて、コントローラはユーザからのリクエストを受け取り処理をモデルへ、表示をビューへ依頼するんだけど
モデルへのアクセスを必ずコントローラを通さなくてはならない、とは規定されていない。
現にMVCモデル図などググって見てみると表示担当のはずのビューからすらモデルへ矢印が引かれているだろ?
CakePHPのコントローラは「便利だから」簡単にモデルアクセスする機能が実装されているけど
それを理由に「コントローラ以外はモデルに触っちゃダメ」とは言っていないよね。
つまりコンポーネントからのモデルアクセスは設計的に十分可能であり、後はプロジェクトのコーディング規約次第。
心情的に、あっちこっちからモデルが参照されるとコ汚い感じがするよねって話なら同意。
AuthComponentはコンポーネント内で完結するには結構無理したよねって話も同意。
あれはCakePHPの開発チームが
「コントローラに$components = array('Auth')って書くだけで認証機能組み込めちゃうんだぜー!」
って言うために詰め込んだと思うんだ。アメはそういうの大好きだし。
>>775 >>776 ちげーよこの馬鹿ども。
780 :
nobodyさん :2008/03/04(火) 16:29:53 ID:Zbgc5QoE
CakeについてるViewテンプレートって機能的にはどうですか? パフォーマンス悪いのかな。実装にあたりPHPで書かなきゃいけなかったり、拡張子 がctpだったりと精神衛生的に気持ち悪い印象があります。 Smartyをビューコンポーネントとして使ったほうがいいのかな、結構利用者っていますかね
>>777 やっとまともなレスがw
なんかそういうサンプルレベルじゃなくて実運用レベルで
ちゃんとしたMVCになっているオープンソースのアプリ無いかな。
参考になる奴。
もう一つ別の疑問があって、Sessionはモデルではないのか?
という疑問。いろいろな理由で本来あるべき設計を崩すことに
抵抗は無いけど、本来あるべき設計というのを知りたいな。
>>780 拡張子が違うだけの生PHPだから、機能はPHPで出来ることすべてだし、
Smartyよりもパフォーマンスが悪いということは無いよ。
Smartyが使いたいのなら、それもありだと思うよ。
そういう記事結構あるし。ただやり方はいくつかあるっぽい。
どうせなら、綺麗に違和感なく組み込みたいが・・・。
Formのバリデーションってどうやっていますか? Modelに保存しないので、Modelの$validate に設定する方法は使えません。 それでいながら、emailのチェックなどコントローラで 自力でやるのは面倒なので、Modelのvalidateで使える機能を そのまま使いたいです。
>>783 modelに依存しないから、$validate使えないってありがちな勘違いじゃなかったっけ?
POSTってmodelに存在しないtestって項目を作ればいいだけ。 Post/test あとはコントローラーでvalidateチェックも出来るよ
いえ、モデルが存在しなくても、 $form->create(なんたら) $form->input(なんたら) $form->end(なんたら) でフォームが作れて、データを送信できるのは知っています。 また、コントローラで$this->dateの入力チェックができるのもしっています。 ただ、こういうときに、validate変数に条件を定義するだけで 簡単に入力チェックができるModelの機能と 同等レベルの簡単さでコントローラで入力チェックがしたいのです。
>>787 'test' => VALID_NOT_EMPTY
って書けば出来るけど?
もうちょっと工夫してから文句言ってくれ
>>788 それをどこに書くのでしょうか?
それが問題なのですよ。
var $validate = array( 'test' => VALID_NOT_EMPTY, );
>>790 いや、ね。だからですね。
それはモデルに書くのであって、
今回の話はモデルを使わない場合です。
ん?モデル使わないってmodelには記述しないって事? じゃ、コントローラでチェックするしか無いじゃん。 しかもその縛りの理由がよくわかんね。
いいかげん、最初に戻っていいですか? 783 名前:nobodyさん[sage] 投稿日:2008/03/05(水) 00:14:06 ID:??? Formのバリデーションってどうやっていますか? Modelに保存しないので、Modelの$validate に設定する方法は使えません。 それでいながら、emailのチェックなどコントローラで 自力でやるのは面倒なので、Modelのvalidateで使える機能を そのまま使いたいです。
別にモデルに保存しなくても、modelのバリデート使って、特定の値だけコントローラで処理してからsaveすればいいじゃん。 それすらしたくないなら、コントローラでやればいい。
>>794 質問は「どうやっていますか?」です。
あなたは、それやっていないですよね?
やってますが?
>>796 では具体的にコードを出してそれを証明してください。
なにこの展開アホらしいw
まったくだw 最初のカキコにちゃんと書いているのに、 それを理解しないで見当はずれなレスをつけやがる。 まったく馬鹿につかまったもんだ。 ほかの人、お願いします。 どうにかモデルのバリデーション機能を有効活用できないでしょうかね? 単に関数を呼ぶだけなら簡単なんですが、そのエラーメッセージを ちゃんと表示できるようにしようと思うと?で。
知らないなら、素直に知らないって謝った方がいいよw
モデルに正規表現チェックの形式を書いて、コントローラでチェックして、エラーフラグ立てるのは出来るでしょ。
どうやら、モデルを使わないで、FormHelperで
エラーを出すには、ClassRegistryあたりを呼び出さなきゃならないようだ。
そこに登録されていないと、$form->validationErrorsが設定されない。
ビューの頭で$form->validationErrorsを設定すればどうにか出せるが・・・
>>801 何度もいいますが、モデルは使いません。
モデルを使わない理由とか、そもそも何がしたいか分からないんじゃね? その質問の仕方だと
モデルを使わない理由なんてすぐ思いつくと思ったんですが? たとえばセッションに保存したいとか。
$useTable = falseにしたModel Hogeを作って $this->Hoge->set($this->data['Hoge']); if ($this->Hoge->validates()) { (成功) } else { (Viewに戻るとエラータグにvalidateのメッセージが表示される) } これじゃ駄目なの? DBとの関連が無いModelなら別に使っても問題ないのでは?
>>804 だからセッションに保存するだけで、DBに保存しなくても。
モデルのバリデートを使用する事は出来るって答えもあったじゃん。
なんか根本的にコミュニケーションが上手くいって無いというか、もっと柔軟に考えたら?
自分が分かるからって他の人が分かるとは限らないし、目的が分かれば違うアプローチもあるかもしれないし。
まぁ、こんだけ答えてもらってありがたいと思わないんだから何言っても無駄だろうけど。
そんな無理やり実装じゃなくて まともなのはないのか?
>>807 App:import('Core','Validation'); //これは多分いらんかも
$obj = Validation::getInstance();
あとてきとーにチェック
今中身みてたが getInstanceでオブジェクト取得する必要は無さそう Validation::ip(); とか Validation::date(); で良いみたい つーかこれぐらい探せば直ぐ見つかるだろうに・・・・ Model→バリデートメソッド検索→バリデート部分をざっくり読む→ Validationクラスが見つかる
3連続でレスすまん 因みに調べたcakeのバージョンは1.2の方ね 1.1は見てみたら仕様が糞過ぎるので自分でやった方が早い
バリデーションのクラスって引数渡すとboolean返してくれるだけだろ? エラーセットしてくれないしコントローラーでValidation::chibi($debu, $hage);を使うのは意味無さ過ぎね? equalToなんてもう最高だよね
Validationは判定専門だよ Model用に作ったFormのデータからカラム毎にvalidateしているのはModel自身 それなのにModel使うのが無理矢理とか言ってるんだから、後はもう自分で作れば?w ていうか少しぐらい自分でソース読めよ
>>812 また昨日の自演自宅警備員ですか?
書き込みのクセですぐわかるんですが・・・
最近、精神障害者が約1名常駐してる模様
>>781 まともじゃないからwww
自演してスレ嵐してるだけやん
バリデーションなんか自作しても面倒くさくないだろう。 ここで聞く方がメンドクサイ。
FormHelperって使いにくくね? 一つのフォームで二つのテーブルにデータ格納するときとか、 どういうコードで保存して、それでちゃんとエラーメッセージを 出すようにするとかわけわからん。 単純な例では便利なのはわかるけど、コントローラからビュー(というかFormHelper)への 値(エラーメッセージ含む)のセットや「モデルのデータ型から適切なフォーム生成」の 所が見えないところで行われているからぜんぜん流れがつかめない。
一回腰すえて作ってみて、情報収集すれば結構何とかなる事が分かると思うけどね。
自演とか死ぬほど下らん話題でよく盛り上がれるね。羨ましいぞ。
>>781 CakePHPだと実運用しているサイト自体がまだ少ない上、バージョンによって仕様が激変するため
これだけは入れとけor見とけ!というキラーアプリはまだ出ていないな。YOU作っちゃいなよ。
まー何だかんだ言ってAuthComponentもかなりいいと思うぞ。例えば
----
アカウント名とパスワードを使ったログインが済んでいて、顧客区分がXXXまたは###かつ女性のユーザのみが
アクセスできるコントローラだが、%%%のアクションにだけはアクセスさせたくない。
----
…と頭の痛くなるアクセスコントロールなども少し頑張れば出来る。
モデルはデータの入出力を司るんだから、セッションもモデルの一部じゃね?という話なら理解できる。
データソースがあって、そこへの入出力があるからね。
俺は、モデルの扱うデータソースをほぼRDBMSに限るってルールは単純に歴史的なものだと思うぞ。
セッションは大量検索しないし、接続ごとに切れる特殊性があるだろ!とか言われるかもしれないんだけど
そもそもSQLを使うRDBMS自体が特殊で他と相容れないものなんだから、情報の入出力という観点で取捨選択した結果
最もコスト対効果の大きなものの(=RDBMS)サポートに専門化したんじゃないかな。
今後、XMLDBやODBMSやらが高速かつ手軽に投入できたり、誰かが言ってた
ステートフルWebアプリケーションとやらが台頭してきたら状況が変わってくるかもしれないけど。
つーかモデルってデータの出し入れだけじゃなくて、もっと広義の意味だとビジネスロジック全般を書く所なんだから
何でもかんでもコントローラに詰め込む最近の風習ってちょっと違和感ないか?
コントローラって要はユーザリクエストの受け口じゃん。
これは面白い。thx
>>819 ソースコード見た?
さわりだけじゃなくて、完全に近いマニュアルが無い以上
ソース見なきゃいけないんだけど、$options[?]に何が使えるのか
混沌としすぎている。がんばれば出来るのかもしれないが、
あんなのとがんばるのはもう嫌だ。
もう俺は自作ヘルパーに置き換えたからどうでもいいけど、
管理画面はともかく、あれで思い通りに作るのは無理だろう。
たとえば、データベースの一行だけでなく、複数行をいっぺんに表形式で入力したい。
ここまでは質問&答えがあったきがするけど、
そのとき、どこか一行でもエラーがあれば全部保存しない(それはトランザクションで解決)
で、入力エラーがあったフィールドの下にエラーメッセージを表示させる。
自作のはさらに、同じテキストフィールド入力フォームでも
表形式の場合と通常の状態でプロパティ一つで形を変えられるようにしたり、
ビューのviewとeditでほぼ同じコードが使えるように、入力可能状態と
閲覧状態をフィールド名を指定することで切り替えたりする機能があるけどね。
きのうから既にあるものを再開発しようとしている人がいないか?
>>842 便利だよ。仕事で作っている奴だからあげられないけどw
作っているアプリでFormHelperを使っていたところあったけど、
いろいろ修正する必要があって、それでもFormHelperでがんばっていたけど
あまりの使いにくさに、自作のヘルパーに置き換えちゃったw
これは作りこんでいる人じゃないとわからないだろうね。
上のほうでモデルを使わない状態でのバリデーションの話をしている人がいるけど、
自作の奴はモデルの有無に依存しない
(データおよびエラーメッセージをコントローラで設定する)
ので、そういう用途にもちょっとの修正程度で使えるだろう。
>>820 AuthComponentは使えない。オレオレ的な使い方がしにくい
認証後の飛び先を認証直前の画面に設定できない
だからAuth系はできるだけ単純な方がいい
AuthComponentは柔軟な拡張には向かない
>>825 > たとえば、データベースの一行だけでなく、複数行をいっぺんに表形式で入力したい。
> ここまでは質問&答えがあったきがするけど、
> そのとき、どこか一行でもエラーがあれば全部保存しない(それはトランザクションで解決)
> で、入力エラーがあったフィールドの下にエラーメッセージを表示させる。
少なくともこれが出来たら、「既にあるもの」と認めてもいいけど?
>>828 この自作ヘルパーしなくても普通に出せるやん。
入力エラーがあったフィールドの下にエラーメッセージを表示させる。だろ?
>>829 ただし、入力はエクセルのような表形式で複数行同時に。
前提をちゃんと読もうぜw
最近文章読めない奴多すぎw 文章が読めないのか、都合が悪い所を見ようとしないのか。
>>827 こないだ実装されたよ
以前は激しく使えなかったが最近はCakeにしちゃあ大分素直になってきてる
833 :
832 :2008/03/05(水) 16:04:24 ID:???
>>823 複数行一括入力は俺も試したけどFormHelperつかえねーよな。
少しでも手を入れようと中身を見ると余計な機能ばっかり大量に付いてて振り払う手間の方がかかる。
粒度の感覚がないんだろうな。もっと乱暴に言うと、おもてなし精神がねえ。
わかるよね言いたいこと。
おもてなしっつか、わきまえてねえって言った方がいいのかな。難しいな日本語。
>>833 Helperの癖に、モデルに依存しまくりなんだよな。激しく意味がわからんし。
たとえば、FormHelper::createだけどこんなコードになっている。
$currentModelってなに? ClassRegistry::getObject($currentModel);ってなに?
ClassRegistryって何をするもの? レジストリってことは誰かがどこかでその名前で登録するわけ?
> is_a($currentObject, 'Model')
モデルかどうかって何でそんなの調べるの? って感じだからね。
function create($model = null, $options = array()) { $defaultModel = null; $data = $this->fieldset; $view =& ClassRegistry::getObject('view'); 中略 if (empty($model) && $model !== false && !empty($this->params['models'])) { $model = $this->params['models'][0]; $defaultModel = $this->params['models'][0]; } elseif (empty($model) && empty($this->params['models'])) { $model = false; } elseif (is_string($model) && (strpos($model, '/') !== false || strpos($model, '.') !== false)) { $path = preg_split('/\/|\./', $model); $model = $path[count($path) - 1]; } 中略 if (ClassRegistry::isKeySet($model)) { $object =& ClassRegistry::getObject($model); } $models = ClassRegistry::keys(); foreach ($models as $currentModel) { if (ClassRegistry::isKeySet($currentModel)) { $currentObject =& ClassRegistry::getObject($currentModel); if (is_a($currentObject, 'Model') && !empty($currentObject->validationErrors)) { $this->validationErrors[Inflector::camelize($currentModel)] =& $currentObject->validationErrors; } } }
誰か simpletest でコントローラをテストする方法教えてください。 モデルは乗ってるんだけど、コントローラーのやり方がいまいちわからない。 このスレに神がいたらブログにまとめてアップしてくれたらうれしいです。 ・・・願ってます。
>>823 こいつが書く文章だけ、やけに読みにくい
データベースの一行だけでなく、複数行をいっぺんに表形式で入力したい
コミュニケーション能力無いやろ?
>>823 >>820 自分しかわからない書き方やめてくれるw
単語はわかるんだけど
文章のつながりが滅茶苦茶
>>827 認証後の飛び先だけ自分でコントロールすればいいだけじゃねの?
認証後の飛び先を認証直前の画面に設定ぐらい楽勝
その程度でオレオレ的っていうのか、しらんが
>>840 楽勝ならコード書いてみせて
口だけならなんとでも言える
>データベースの一行だけでなく、複数行をいっぺんに表形式で入力したい この説明"すら"理解できないの?
書籍スレにいたAHOがこのスレに来てるwww
>>842 理解が出来る出来ない問題じゃなくて例えが悪すぎるよな
こういやつの書くコードは、どういうコード書くかなんとなくわかる
自分にしかわからないコードしか書かないよな
>>841 認証にこけて認証ページにリダイレクトする前にurlをセッションに入れて
認証完了後にそのurlに飛ばせばいいだけじゃね
リダイレクト先指定出来た筈だけど
たとえが悪いかどうかはおいといて、 意味がわかんないのに、”できる”と断言しちゃうやつ。 こいつのほうがよっぽどアフォだろ。
>>847 よく分かんない文章にこれがしたいの?
って提案してるだけだろ、本当にコミュニケーションが出来ないんだな。
>>848 理解能力とかより、わかりにくい文章でも度が過ぎるよな
特に
>>820 と
>>823 普通のコミュニケーションでもよく聞き返されるやろ?
もっと簡単な文章にできないか?
密度の薄い内容のクセに長文になってんだよwww
>>852 勝手に同一人物にするなw
理解能力も無い、この程度の長文(?)も読めない、コミュニケーション能力も無い。
その上妄想で他人をあおることしかできない。
>>853 長文というか80%が駄文だし
そんな駄文を理解しようとする為に無駄なパワーを使いたくないから
もっと楽に読める内容の濃いわかりやすい文章にしろよ
えーと、具体的に820のどこが理解できないか教えてくれないかな(´・ω・`) YOUの部分を日本語に訳せばいいのかな。 個人的には、MVCの役割分担の考え方についてはフレームワーク自体の根深い部分だと思うから 他の人の話もききたかったりする。Cakeの実装の是非とか。
こいつ(>>で書くのは面倒。言わなくても本人含めてわかるだろ?)の場合、 理解力が無いというより、単に実戦経験が無いのだろうな。 実戦経験があれば、表形式での入力とか、 セッションもモデルの一部じゃね?(という疑問)とか そういうのは、これだけ書いてあっていても、あーあのことねって わかると思うんだが。
>>837 > 誰か simpletest でコントローラをテストする方法教えてください。
コントローラのテストは少なくとも二つのやり方がある。
一つは、CakeTestCase::testAction($url, $params = array()) で
actionを呼ぶ方法。
もう一つはCakeTestCaseの代わりにCakeWebTestCaseを継承したテストクラスを作り
CakeTestCase::get(アドレス)、CakeTestCase::click、CakeTestCase::clickLinkById、
CakeTestCase::setFieldByName、CakeTestCase::clickSubmitById
CakeTestCase::assertPatternなどで、あたかもブラウザを操作しているかのごとく
ページを移動していきながらテストする方法。
> このスレに神がいたらブログにまとめてアップしてくれたらうれしいです。
まとめたいのは山々なんだが、時間が・・・。
あと、CakeWebTestCaseを使った場合の注意点だけど
普通のテストではテスト用のデータベース設定が使われるわけだが
(つまりtest_suite_というプリフィックスがついたテーブルを使用する)
CakeWebTestCaseはブラウザでアクセスしていることになるので、
テスト用のデータベース設定が使われない。
これじゃいろいろまずいので↓ここの記事ではCookieを設定することで対応している。
http://gignus.com/blog/posts/view/13 一方俺は、CakeWebTestCase::addHeader を利用した。
>>857 >>858 おぉ〜!神様、仏様。
ありがとうございます。
simpletestじゃなさそうですが、コントローラーはsimpletest でテストできないってことでOKでしょうか。
cakewebtestcase 見てみます!ありがとう。
>>855 駄文が多いだけで、意味のあることがひとつも書いてない
あとは自作ヘルパーの自慢?
悪いけどオナニー的な文章になってるんだよ
気づいてない?
>>856 自演乙
>>856 だろう運転と会話は事故の元
誰もが自分と同じ思考をし理解してくれるなんてありえない。
しまいには相手を馬鹿にして切り捨てる。
個別の技術的な話っていうより、文章の分かりにくさと対応がつっこまれてるんだと思うよ。
>>855 どう考えても他の人の話を聞く姿勢ではないよな!
攻撃的な姿勢でどうやって有意義な情報を聞き出すことが出来るんだよ
小馬鹿にする表現が多いよな
脳障害患者とかな!
一言で言えば嵐に近い。
最近は
>>777 が常駐して荒らしてるだけだから
>>855 他の人の話もききたかったりする
脳障害患者呼ばわりしたいから?w
>>859 simpletestだよ。
というか、まさかと思うけど、CakePHPはsimpletestに対応していて
simpletestをvendorだっけ?にインストールして、
/test.php にアクセスするとテスト環境になるってこと知らないとか?
1.2の話だけど、1.1でも同じじゃなかったかな?
で、simpletestにはブラウザのようにアクセスするWebTestCaseってのがついている。
CakePHPはそれを継承してCakeWebTestCaseにしているだけ。
>>863 いや、常駐しているのはお前。嵐もお前。
っていうかID出ないからそんな事言いあっても時間の無駄
>>865 ありがとうございます。simpletest なのですね。
test.php でアクセスするとできるのも見ました。
勉強します。ありがとうございます!
837 誰か simpletest でコントローラをテストする方法教えてください。 モデルは乗ってる...
└857
>>837 > 誰か simpletest でコントローラをテストする方法教えてください。 コ...
└859
>>857 >>858 おぉ〜!神様、仏様。 ありがとうございます。 simpletestじ...
└865
>>859 simpletestだよ。 というか、まさかと思うけど、CakePHPはsimpletes...
└868
>>865 ありがとうございます。simpletest なのですね。 test.php でア...
テストの仕方ってあんまり情報無いよね。
どこかにまとまってないのだろうか。
871 :
nobodyさん :2008/03/07(金) 13:19:14 ID:TbKF7E3a
質問させてください。 Windows & cake1.2 です。 app/config/bootstrap.phpに下記のような記述をしました。 $myDefines['aaa']['bbb'] = array( 'a' => 'あ', 'b' => 'びー', ); これをビューやコントローラーで使用したいのですがどうすれば。。 現状、pr( $myDefines); とかやると定義されてないよnoticeエラーがでる。
>>869 教えて頂いたお礼に 頑張ってまとめてアップしてみたいと思います。
CakeWebTestCase ← これいいっすね。
>>872 期待してます。
こちらだと問題あれば、こっそりcakephpの日本フォーラムとかでも嬉しいかも
874 :
871 :2008/03/07(金) 16:43:55 ID:???
関数にすることで自己解決しました。 function temp( return $myDefines['aaa']['bbb'] = array( 'a' => 'あ', 'b' => 'びー', ); );
>>871 なんか使い方が間違っている気がする・・・
どういう内容の変数なのかによるからなんともいえないけど。
876 :
871 :2008/03/07(金) 18:59:05 ID:???
>>875 うへぇ
enum型の表示名とかがおもです。
define使えば問題なく使えるんですが、配列で欲しいわけです。
globalなんてしたくないし・・・。
ダメですかねーん?
877 :
875 :2008/03/07(金) 19:48:19 ID:???
>>876 言った本人が言うのもなんだけど、どうなんだろう?
どうも最近そういうグローバルな値なんて使わないもので、
enum型もほしいと思ったことが無いんだよな。
そういうのは大体クラス内部で収まっているし。
設定ファイルに書いて、必要な箇所(関数の頭かクラスのコンストラクタ)で
読み込むことが多いし。でも確かに少量ならbootstrapに書いたほうがいい気もする。
なんだろう。このもやもや。
こんふぃぎゃーらいとでいいじゃん
>>871 明らかに変だろw
ツーか最近変数スコープの事考えない奴多すぎないか
880 :
871 :2008/03/08(土) 16:27:54 ID:???
>>871 CakePHPは2次元の連想配列は使えない
>>877 グローバルな値はCakePHPがデェフォでかなり埋め込んでるけどな
グローバルを全く使わないって発想はCakePHPを否定してるよな
>>877 おまいらのクラス定義は全部グローバルやんwww
CakePHPは名前空間を使ってないグローバルなフレームワークやんwww
なにを今さらグローバル気にしてんねん
PHP5の最新機能全然使えてないじゃん こんなグローバル指向なフレームワーク使うんやったら 自分でフレームワーク作った方がマシやろ
グローバル変数がよくないのであって、 クローバスクラス定義は普通のもの。
グローバル変数がよくないって 全く無いのもダメだろ要はバランス CakePHPのような最初から骨組みが決定してるものは 仕様方針と骨組みが多少異なれば はみだしたこともしないといけない
PHP4自体がグローバル多様を考えて作られてる 要はスクリプト言語のメリットを活かし プログラム言語のような複雑化を避けるため グローバルを気にして設計するなら Javaとかに移るべき PHPはグローバルを使うことでメリットのある言語
PHPは言語的にまだまだオブジェクト指向向きではない それなのにRailsの影響でフレームワーク化してるけど PHPの方が全く追いついてない状態
おかしいなぁ。CakePHPを使ってから、 global ってキーワードを使った記憶がないんだが?
CakePHPがしっかりとしたオブジェクト指向だから グローバル変数なくても作れるね。
CakePHPでしっかりしたオブジェクト指向作るのは不可能 なぜならPHP自体がしっかりしてないんだから グローバル変数使いまくりの方がPHPにはメリットがある Railsのマネするなら Rubyみたいにしっかりとしたオブジェクト指向言語じゃないと
CakePHPはデフォでかなりののグローバル変数が定義されてるんですが・・・ 小さい掲示板つくるだけで、こんなに余計なグローバル変数定義されるのかよ
まじ?聞きしに勝るゲロ以下さだなwww symfonyなんて律儀に使った変数をunsetしていくのにwww
CakePHPは定数の量も半端なく異常
食ったら腹壊すwww
>>893 お前、PHP知らないだろ?w
PHPではグローバル変数を使うときには、
global って書かないといけないんだよ。
だから使っていて、知らないということはありえない。
CakePHPでは、globalを使わなくて作れるのは事実。
CakePHPのコアライブラリをglobalという単語で検索したが、 一箇所しか、使っていなかったな。 その一箇所も、ADODB用のデータベースライブラリで ADODBの動作モードを変更するためのだけのコード。
>>898 897がCakePHPでは、globalを使わなくて作れるのは事実。
クラス外で変数(ローカル変数じゃないよね?)定義するのはOKてこと?
クラス外ってどこで定義するんだよ?
グローバル変数の意味をわかってない奴が多い グローバル変数 変数にはスコープと呼ばれる有効範囲があります。 スコープの最も外側の部分、 スクリプト中でどの関数にも含まれていない部分で 定義された変数をグローバ ル変数とよびます。
>>901 スコープの最も外側の部分、 スクリプト中でどの関数にも含まれていない部分
>>901 たとえば、コントローラクラスなどの
<?php
class XXXController extends AppController {
}
?>
の<?php と classの間とか。
まあ、普通はこんなところに、書かないよね?
>>904 クラス外に変数定義することは普通にあるよ
>>905 どこか間違っているか?
CakePHPでは、作るコードのほぼすべてを
クラスとしてつくり、普通の作り方をすると、
グローバル変数なんか使わないだろ?
関数内でグローバル変数を参照するとき、 global 変数名 ってしないと参照できないって仕様、 最初はウザイと思っていたが、グローバル変数使わなくなってからは どうでもよくなったな。これもCakePHPのおかげかな?
>>909 それはCakePHPのおかげというのがよくわからない・・・
クラス外変数(グローバル変数?)の定義ファイルで 変数宣言してる行数 2000行見つけたんですが! ちなみに変数名は $config これって各クラスでグローバル参照できる変数だよね
>>910 CakePHPというオブジェクト指向のフレームワークのおかげで、
クラスを使ってコアのクラスを継承して実装することが求められ、
必要な値が、クラス変数に格納されるから、しっかりした作り方ができる。
>>911 変数名でグローバルかどうかなんてわかるはずないだろw
それがどのファイルに定義されていたのか
なぜ、それをいえない?
本来、一つ宣言すれば十分なグローバル変数が 「変数宣言している行数2000行、その変数名は$config」の時点で 嘘だとばれるだろ。常識で考えて。
確かにcasefoldingフォルダの中に 恐ろしいほどスコープに括られてない変数(グローバル変数?)がある
きっとそれをグローバル変数だと勘違いしているのだろうが、 簡単に言うと、このようにローカル変数として展開されている。 class ??? { function ??? () { include(そのファイル) } } 一見、ファイルだけを見て、それがクラスの中にないからといって、 それがグローバル変数だとは限らないんですよ。 アフォが自滅して終わりです。ちゃんちゃん。
string.php
extract.php これはクラス外で宣言してるのは何で?
cakeが黒こげwww
>>920 そのファイルも、ほかのクラスの関数から
読み込まれているからローカル変数になっている。
それがグローバル変数だと思ったら、どこかの関数で
global その変数名; って書いて、実際にその変数を参照できるか調べろよ。
(別に関数じゃなくても、変数定義されている、そのファイル自身と
そのファイルの呼び出し元関数以外ならどこでもいいが)
できないからさ。
>>922 どのクラス関数から読み込まれてるんだ?
調べたが、どのクラス関数からも呼び出されてないぞ
>>922 クラス定義されてるファイルを
クラスから呼び出すということは
クラス内でクラスを作るということになるんだが?
a.inc
<?php
$a="a";
class A{
}
?>
class A {
include "a.inc";
}
>>923 i18n.phpのvar $tasks = array('DbConfig', 'Extract');変数設定により、
フレームワークから読み込まれていますが?
フロントコントローラで作られたPHP製のアプリで globalキーワードがついていない、変数定義は ほぼすべて、グローバル変数ではないと思っていい。 フロントコントローラとは、要するに、どのアドレスでアクセスしても、 まず最初に、index.php といった決まった、phpスクリプトが呼ばれる。 そこからユーザーが作ったコードは、関数の中から呼び出された関数の そのまた中の関数から呼ばれた関数の・・・といくつかの関数(当然メソッド含む)を経て実行される。 つまり、ほとんどが、関数内に読み込まれるファイルとして成り立っているので、 その関数内スコープで、グローバル変数を定義するには、globalキーワードが必要不可欠。 globalキーワードを使わずに、グローバル変数を作るには、どの関数からも呼ばれていない index.php ぐらいで定義するしかない。
>>925 それは変数に値を入れてるだけじゃん
どうやって読み込んでるの?
>>924 だからなに?
クラス&関数と変数では、話が違うの知らないの?
>>927 そのクラスの継承元クラスが、その変数の値を見て、
その名前からファイル名に変換して、
そのファイルを呼び出す関数に渡して、その関数が読み込んでいます。
意味、わかりますか?
>>928 クラス内でクラスをincludeするって
内部クラスが利用できるってこと?
>>930 マニュアルぐらい嫁。
http://www.php.net/include/ ファイルが読み込まれるとそのファイルに含まれるコードは、
include()もしくはrequire()が実行された 行の変数スコープを継承します。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
しかし、読み込まれたファイル内で定義されている
関数やクラスはすべて グローバルスコープとなります。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>929 >>904 でいう普通書かれないコードが
extract.phpに書かれてますが、これは何なんでしょう?
>>904 が間違いってだけの話。
正確に言えば、こフレームワークのことは忘れて、
そういうコードがあったとして、そのファイルをURL指定で
直接アクセスされた場合、確かにグローバル変数になる。
しかし、CakePHPではフロントコントローラ。
つまり、
>>904 のファイルは、index.phpを基点として
いくつかの関数を経て呼び出されるから、
それがグローバル変数になることはない。
>>933 configure.php の App クラス の import メソッド
もうそろそろ、あらかたやっつけたかな?
>>935 i18n.phpのどこに書いてあるんだ?
>>938 i18n.phpの親クラスのshellにrequire_onceって書いてあるだろ。
App::importは使ってないなw
>>940 App::importだけだろ。
でお前の反論は、それで終わりか?
反論になってないがな
で、結局グローバル変数なの? 違うよね? じゃあ。俺の言っていることは 最終的にただしかったんじゃんか。 CakePHPはちゃんとしたオブジェクト指向。 当然グローバル変数もほぼ使わずに作られている。
>>942 じゃあグローバル変数を1個でも見つけたら俺が正しいの?
なんかお前ら暇なのな
このケーキってカビだらけなんですね
たとえコアにグローバル変数が山ほど使われていたとしても デベロッパにそれを意識させず開発できるのなら問題ないと思うんだけど…
問題と思うなら放置しろよ釣られすぎだぞ
問題無いと・・ の間違いだふ
Cakeとは関係ないんだけど、質問させてください。 DBからデータを持ってくるんだけど、画面によって表示するデータがちょっと違う時ってどうしてますか? 1 - データを取得するメソッドを1個作って、後はViewで調整(使わないデータを持ってくるのがもったいない) 2 - Viewごとにデータを取得するメソッドを複数作る(コードが増える、DBの仕様が変わると作業量が増える) 考え方をお聞かせください。
前者 引数でconditionsなりfieldsなり変えればいいんじゃね
>>949 どっちもいいと思う。
だけど view で調整のが楽かなぁとも思うし、モデルに書いておいた方が楽なような。
>>949 条件がちょっと違うってだけじゃなんともいえん。
もっと具体的な例でないと
953 :
nobodyさん :2008/03/12(水) 15:16:31 ID:AyOV8gPT
hasManyでアソシエーションしている場合(A : 1/B : 多) で、Bの hoge というフィールドが n の場合という条件を WHERE句にいれる場合は findAll でどうやればいいのでしょうか?
954 :
953 :2008/03/12(水) 15:22:10 ID:???
>>953 ちなみに、モデルで conditions を指定するやり方ではなくて
B.hoge = n に該当する Aレコードを取得したい、ということです。
>949 必要なテーブルだけ関連付けてviewで調整してる テーブルの中のカラムは富豪的に全部持ってきてもバチ当たらないだろ >953-954 findする前にbindmodelでくっつけてやるのれす あとそのままだとleftjoinだからinnerjoinにでもしてやればいいんじゃないのかな でもそんなの調べてる間にSQL書いちゃう方がはえーよたぶん
書き込み、削除、編集、表示 をワンセットでやりたい場合はアソシエーション機能を使うのが便利だけど テーブル結合させたカウントランキング表示みたいな 表示だけにしか使わない複雑なものはSQLで書いた方が効率いいのかな? これって書き込み編集削除で再利用できないし
SQLで書いた方がというより、普通にfindでいいんじゃないの?
なんでgroup by 正式にサポートしないんだろ? conditionsに書けばできるのは知っているんだが、 へんな書き方をしないといけないし。
960 :
nobodyさん :2008/03/13(木) 01:15:18 ID:Kbjia7Gd
質問です。 EntryモデルとUserモデルという、2つのモデルがあるとして、 以下のようなことをすると、 -------------------- [1] Entryのデータを編集(/entries/edit/1) ↓ [2] Entryのデータを確認(/entries/index、/entries/view/1) ↓ [3] Userから確認(/users/myentries) -------------------- [2]では即時に[1]での編集内容が反映されるのですが、 [3]では反映されず表示が古いままなんですが、これって何のキャッシュですか? アクセス元(?)のモデルが違うだけなのにどうして表示される結果が違うんでしょうか? まだ始めたばかりなので、もし見当違いな質問してたら申し訳ありません、 ヒントだけでも示してもらえると助かります。
PEARみたいに外部から問い合わせて貰う為のXML-RPCを作成しようとおもっているのだけど、 Cakeの場合こういうのは何処に置いたらいいの? 通常のWebサービスと同じくコントローラ作ってそこに書くのが定石?
963 :
962 :2008/03/13(木) 04:19:53 ID:???
って書いてすぐ気が付いてしまった。 クラス外でhandleCallしたりしなきゃだからベンダーに置くしかないのかな。
964 :
953 :2008/03/13(木) 09:23:03 ID:???
>>955 ありがとです。
とりあえずINNER JOINで解決しました。
やっぱりSQL書いた方が早い&分かりやすいですねぇ。
フレームワーク初めてだから、ついつい全てルールに沿ってやろうと考えてしまう…。
複数のモデルをアソシエーションでつないだとき、 ビヘイビアのafterFindとかは、モデルごとに呼び出されるのか、 親モデルで一回だけ呼び出されるのか仕様知らない? たしか親モデルで一回だけ呼び出されるような感じなんだが、 1.2はbetaだし、それがバグなのか仕様なのかわからない。
966 :
nobodyさん :2008/03/13(木) 15:13:16 ID:ERgQfDPO
>>965 デバッグモードにして投げてるSQL分を追跡してみれば?
というアドバイスはナンセンス?
CakePHPて恐ろしくメモリ食うな 8Mじゃすぐリミットオーバーするね
規模が少しでも大きくなるとモデルファイルが凄いみにくい状態になるなw アソシエーションは便利だけど、ちょっと利用させてもうらために 無駄なSQLもくっついてくるのを我慢しないといけない
CakePHPは中規模でも使えないわ モデルまわりの統制がとれない
とてもじゃないけど、こんな高負荷なフレームワークは自社で採用したくないな 悪魔でも生産性だけを考えた外注用のフレームワークだな
このごろ定期的に、CakePHPの根拠無しに批判を していく奴がわいているなw いつも同じ感じだからすぐばれるぜwww
エラー出力ありで開発するとデザインが崩れまくりなんですが もっとよい出力場所がないのか?
希望としてはSQL出力は別画面表示してもらいたい
>>973 俺はSQL出力は、CSSとJavaScript使って折りたためるようにしているよ。
エラー(黄色い奴)はそもそも、なくさなきゃいけないものだし、
デザインが崩れるだけだからほうっておいている。
Core.phpでは Configure::write('debug', 0); と設定して エラー表示したいコントローラーのメソッドの中で Configure::write('debug', 2); これ入れたり消したりしながら作業することにした 他に楽な方法あったら教えて
あとSQLに関してはCakePHPガイドブックに書いてあった、 SQLをログに記録するコラムを参考にdbo_mysqlを継承して ログを取ることが出来るdbo_mysql_logを作った。 この本は1.1用で、1.2では少しフォルダ構造が違っているから説明しておくと 作ったdbo_mysql_log.phpは /app/models/datasources/dbo に置く。 これフォルダが無いけど、作ればちゃんと動くよ。
>>976 どうしても”SQLだけ表示”じゃないといけないのか?w
デバッグ用なんで力入れて作るものでもないから、
/app/views/layouts/default.ctp に CSSを付け加えて
display:noneで下のSQLの部分を非表示にし、同じく付け加えた
JavaScriptでON/OFFしているだけだけど。
コントローラ内で各ページで処理する関数を定義できるけど コントローラにどのページをいれるべきなのか要領がつかめない
svnの設定もできて開発環境ばっちり これからCakePHPをいじくりまわしてやるぞ
>>967 > CakePHPて恐ろしくメモリ食うな
> 8Mじゃすぐリミットオーバーするね
どっかのブログに書いてあった”間違い”を鵜呑みにするな。
バグで無限にメモリ消費しているだけだ。
>>981 967じゃないが
ググるとメモリ食うとかなり書いてあるんだけど。
素人書き込む場所ちゃうで
CakePHPの中規模以上で8Mで運営できてるやつおらんやろ?w
984 :
967 :2008/03/14(金) 14:57:46 ID:???
>>981 "Hello World!"を表示させたんですが!
8メガなんかで運用したいとか思ってる時点で、フレームワークやめろ
どうせウソだろと思って、ためしに4Mに制限して やっているんだが、普通に動くんだが? どういうことをしたらメモリが足りないのか書いてくれないと 誰も信用しない。 グーグルで検索したというのなら、当然それを見つけているはずなのだから、 どこに書いてあったかかけるはずだ。その書いてある記事を見て判断する。
>>983 質問するなよ。「俺は知らない」といっているのと同じ意味だぞw
CakePHPを使う大きな理由の一つがPHP4で動くということなんだから、 PHP4のデフォルトのmemory_limitの値、8Mで CakePHPが動かないとしたらもっと話題になってるだろ。 常識で考えて。
嘘じゃなくて僕の環境も8Mオーバーはよくしますよ フレームワークだからという結論で気にしてないのですが
googleで「cakephp メモリ」 と検索してみれば出てくるから
それで検索しても、信頼にたる情報はまったくないが?
>>991 頑固オヤジかw
素直になれよ、実際におこってるんだからしょうがないやん
まさかとは思うが、あの1行エントリが根拠とか言い出さないよな?
>>993 ブログラムの暴走じゃないのに8Mいくことがあるし
こんな現象はCakePHPだけ起こってるんだよ
PHPの実務経験8年ある俺が
暴走するプログラムつくるわけねーだろボケが
経験年数とか年がなんたらいうやつは大したことないのが世の常だが、確かにCakeはメモリーオーバーする。 大概はデバッガのせいかな。
>>994 知るかよw
cakeの肩を持つ訳ではないが。
ここは素人の集まりかよ メモリオーバーするの俺だけじゃねーだろ? おまいら見てるだけで実は作業してないんだろ
確かに私も最初にメモリオーバーしたよ 何でもプログラム暴走と決め付けるのはおかしいよ 常識的に考えて
a
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。