1 名前:nobodyさん mailto:sage [2008/06/20(金) 01:24:40 ID:???] www.cakephp.org/ 10分で作るCakePHPアプリ for Windows p4life.jp/cake/ マニュアル日本語化 www.cakephp.jp/doc/ Cookbook :: 1.2 Collection :: マニュアル book.cakephp.org/ja 日本語フォーラム cakephp.jp/modules/newbb/ あとこのへんとか(初心者向けTIPS) www.avatarfinancial.com/pages/cake/ CakePHP入門リンク集 ttp://pub.studio15.jp/2007/11/13/cakephp-links/ 【PHP】フレームワーク CakePHP 3ホール目【本命】 pc11.2ch.net/test/read.cgi/php/1205475360/ 【PHP】フレームワーク CakePHP 2ホール目 pc11.2ch.net/test/read.cgi/php/1194976228/ 【PHP】フレームワーク CakePHP pc11.2ch.net/test/read.cgi/php/1163850802/
62 名前:nobodyさん mailto:sage [2008/07/02(水) 01:18:39 ID:???] >>58 なんだ。Cakeでもできることじゃんw
63 名前:nobodyさん mailto:sage [2008/07/02(水) 01:20:02 ID:???] どうせ使うのは開発かテスト環境だろうしなんでもありじゃねえの? lighttpdで別プロセスとか。apacheだったらsuEXECとか。
64 名前:nobodyさん mailto:sage [2008/07/02(水) 01:23:18 ID:???] そもそもファイル読む以外することあんの?
65 名前:nobodyさん mailto:sage [2008/07/02(水) 02:18:17 ID:???] >>60 p2みたく、ローカルで使うのを想定してるので、なんとかなると思う。 >>61 それはRailsでメシ喰ってる人への挑戦状? 私?私は素人ですけどね。 >>62 できる? cakephp.jp/doc/ch06s04.html を見ても、やっぱり配列で指定してるんだが。これを、 var $hasOne = 'Profile' ; だけに出来たら、楽だなーと。 テーブルの作成も、 $this->createTable('users', "id, name, created,updated"); ってしたら、少なくとも規約に沿ってる部分は、 idはINTの自動加算とか、createdはupdatedDATETIMEに してくれたら、楽だなーと。 ま、些細なことですけどね。ρ(-ε- )イヂイヂ
66 名前:nobodyさん mailto:sage [2008/07/02(水) 03:29:29 ID:???] なにも調べてない奴と話すのは疲れる。お前もう来るな。 book.cakephp.org/ja/complete/80/hasone <?php class User extends AppModel { var $name = 'User'; var $hasOne = 'Profile'; } ?>
67 名前:nobodyさん [2008/07/02(水) 04:28:34 ID:taRpZf8M] もっと有益な情報を話し合おうぜw
68 名前:nobodyさん mailto:sage [2008/07/02(水) 04:39:46 ID:???] >>66 普通にそこまで簡略化出来る事を知らなかった俺涙目
69 名前:nobodyさん mailto:sage [2008/07/02(水) 06:31:20 ID:???] RCになって、またAuthコンポーネントのパスワード暗号化のタイミング変わった? なんで戻したんだろ・・・
70 名前:nobodyさん mailto:sage [2008/07/02(水) 11:09:21 ID:???] >>66 CakePHPのバージョンを書かんかった俺が悪かった。 今、1.1を使ってたんだ。 つーか、ひょっとしてこのスレ、1.2限定?
71 名前:nobodyさん mailto:sage [2008/07/02(水) 12:53:32 ID:???] 1.1だろうが必須なのはモデル名だけって書いてあるんだがわからないのだろうか
72 名前:nobodyさん mailto:sage [2008/07/02(水) 17:50:07 ID:???] >>70 試してから言えと何度言われればわかるんだ?
73 名前:nobodyさん mailto:sage [2008/07/03(木) 09:53:51 ID:???] >>71 PHP5なら、モデル名すら、いらんな。
74 名前:nobodyさん mailto:sage [2008/07/03(木) 19:53:41 ID:???] >>73 そっちのモデル名のことじゃないと思うよ。
75 名前:nobodyさん mailto:sage [2008/07/05(土) 14:02:26 ID:???] ようやく試す時間が取れました>< 1.1でも、>66みたいに出来ました。 今後ともご指導ご鞭撻の程、よろしくお願い申し上げます。
76 名前:nobodyさん mailto:sage [2008/07/06(日) 01:37:16 ID:???] A,B,Cのテーブルがあって、 A hasMany B B belongsTo A , B hasMany C C belongsTo B の場合、当然、 C belongsTo A でもあるわけど。それをCのモデルに明示する方法ってありますか? C belongsTo array('A','B'); ってしたら、scaffoldingのCのviewでエラーが出た。
77 名前:nobodyさん mailto:sage [2008/07/06(日) 02:01:54 ID:???] CにA_idあんの?
78 名前:nobodyさん mailto:sage [2008/07/06(日) 02:25:50 ID:???] CにA_idありました。 もちろん、B_idもあります。
79 名前:nobodyさん mailto:sage [2008/07/06(日) 02:37:38 ID:???] エラーの内容が、 Notice: Undefined index: title in /Applications/MAMP/htdocs/cake/cake/libs/view/templates/scaffolds/view.thtml on line 52 だったので、AやCのテーブルからtitle, nameのフィールドを別名にしたら、 エラーは出なくなりました。 しかし、"title"や"name"が使えないのは痛いな。
80 名前:nobodyさん mailto:sage [2008/07/06(日) 02:44:59 ID:???] んなわけない
81 名前:nobodyさん mailto:sage [2008/07/06(日) 02:50:57 ID:???] あ・・・・・・・・解決したかも・・・・ C belongsTo array('B','A'); って書いてた(汗 C belongsTo array('A','B'); にしたら、直ったっぽい
82 名前:nobodyさん mailto:sage [2008/07/06(日) 14:24:50 ID:???] いまから作る新サイト、1.2でやるべきか悩む…
83 名前:nobodyさん mailto:sage [2008/07/06(日) 14:32:55 ID:???] どっちでもいいよ、覚悟さえすれば。
84 名前:nobodyさん mailto:sage [2008/07/07(月) 22:11:14 ID:???] hasAndBelogsToManyって、便利そうだけど、工夫がいるね。
85 名前:nobodyさん mailto:sage [2008/07/09(水) 18:44:09 ID:???] モデルのメンバ変数でアソシエーション定義すると 既存のデータ取得関数に影響が出るから アソシエーションの設定は メソッド単位、もしくはメソッド内のロジック単位で bindModel() をした方がいいね
86 名前:nobodyさん mailto:sage [2008/07/10(木) 03:21:38 ID:???] 自分の選択でフリーターはともかくとして、 フリーターしか選択肢がないというのはよほど問題がある人だろう。 先天や事故で身体的に無理というならばまだしも、 精神的にとかは、もう笑うしかないな。 どれだけ甘えているのだと。 そういうのはバイトで当然だよ。 むしろ金をやる必要すら無い。
87 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 11:10:29 ID:???] CakePHP1.2,PHP5でviewにチェックボックスを表示しています。 デフォルトをチェックが入った状態にしたいのですが、以下のようにvalueを指定してもチェックが入りません。 どのように指定すればチェックが入るのでしょうか? echo'<div>'.$form->checkbox('comset/admin',array('label'=>"",'value'=>1)).'管理者のみ表示</div>';
88 名前:nobodyさん mailto:sage [2008/07/10(木) 13:01:36 ID:???] >>87 # ComsetsController if (emtpy($this->data)) $this->data['Comset']['admin'] = 1; # Views echo'<div>'.$form->checkbox('Comset.admin',array('label'=>"")).'管理者のみ表示</div>'; じゃないかな?
89 名前:nobodyさん mailto:sage [2008/07/10(木) 13:05:38 ID:???] >>85 1.2ならContainableビヘイビア
90 名前:nobodyさん mailto:sage [2008/07/10(木) 14:37:07 ID:???] beforeFindで$queryDataを見て、特定の検索条件があったときに ほにゃらって処理をしているんだけど、 CakePHP1.2から、$conditions => array('key =' => 'value');になったでしょ? 今まではarray_keysでkeyがあるかどうかって見ていたんだけど、 これからは'key ?'ってなっちゃって?の部分が変わるから 単純にarray_keysが使えないんだよね。 これの代わりになる便利な関数って用意されているか知らない?
91 名前:87 mailto:sage [2008/07/10(木) 16:53:38 ID:???] >>88 実現できました、ありがとうございます。 立て続けで申し訳ないのですが、ラジオボタンの表示で ラジオにチェックを入れるにはどのように指定すればよいのでしょうか? ラジオの数が動的に変わるため、以下のようにして作成しています。 ループ内である条件に一致する場合に、ラジオにチェックを入れるようにしたいです。 一致するのはループ内で1回のみです。 for($i=1; $i<=$n; $i++){ $arradio[$i] = $dt_hoge['Table']['no_'.$i]."<br />"; } echo '<div>'.$form->radio('hogeset/hoge',$arradio,array('legend' => false)).'</div>';
92 名前:nobodyさん mailto:sage [2008/07/10(木) 17:06:37 ID:???] >>91 forはview内かな? だとしたら、viewで if (!empty($this->data['Hogeset']['hoge']) $this->data['Hogeset']['hoge'] = 初期値 ; じゃまいか? やりたいことを、良く理解していないから、はずしてたらすまん。
93 名前:87 mailto:sage [2008/07/10(木) 19:50:48 ID:???] >>92 ありがとうございます。 $this->dataがない状態で選択しようとしたからか、 教えていただいた方法では、実現できませんでした。 いろいろ試してみた結果、 選択したい値をradio生成時にvalueで指定したらとりあえずできました。 echo '<div>'.$form->radio('ansset/ansr',$arradio,array('legend' => false,'value'=>4)).'</div>';
94 名前:nobodyさん mailto:sage [2008/07/10(木) 20:52:53 ID:???] >>93 valueを直で指定すると、validation error のときに困るんじゃない?
95 名前:nobodyさん mailto:sage [2008/07/11(金) 15:46:07 ID:???] 今、1.2betaから1.2RC2に移行しているわけだが、 変わりすぎてて俺、涙目wwwww orz RC2 から 正式版の間ではあまり変わらない事を祈っている・・・
96 名前:nobodyさん mailto:sage [2008/07/11(金) 16:03:01 ID:???] stableっていつごろなのかな? RC1→2はわりと早かったけど・・・
97 名前:nobodyさん mailto:sage [2008/07/11(金) 17:01:52 ID:???] 1.2出たら、ポケットマニュアルも1.2対応で すぐに出るんだろうか?
98 名前:nobodyさん [2008/07/12(土) 03:58:01 ID:GP2h4Bov] Aモデルの中で Bモデル->save()みたいなことしたいけど、ダメ? コントローラ内で Aモデルのデータとってきて $this->Bモデル->save()するを完結するのががベストかな?
99 名前:nobodyさん [2008/07/12(土) 03:59:50 ID:GP2h4Bov] モデルを厚くするのがベストてCakePHPに書いてあるけど モデルの自由度が凄く悪い気がするんだが・・・
100 名前:nobodyさん [2008/07/12(土) 04:04:06 ID:GP2h4Bov] コントローラだと何でも出来ちゃうから 結局コントローラが厚くなってしまうんだよな 一通りコーディングが終わってからリファクタリングする形で モデルを厚くしていかないと。 調べながらだと時間もったい気がする
101 名前:nobodyさん mailto:sage [2008/07/12(土) 11:07:21 ID:???] 1.2のスライドにも、モデルが薄く、 コントローラが厚くなってしまうのが 問題って書いてあるな。 わざわざスライドにしてるってことは、 1.2で改善されるんやろか?
102 名前:nobodyさん mailto:sage [2008/07/12(土) 13:48:03 ID:???] 問題なのは、フレームワークじゃなくて、 そういうコードを書くなってことだろう。
103 名前:nobodyさん mailto:sage [2008/07/12(土) 19:30:01 ID:???] >>100 > コントローラだと何でも出来ちゃうから > 結局コントローラが厚くなってしまうんだよな 似たような話。 関数作らなくても何でも出来ちゃうから 結局コードが長くなってしまうんだよな。 結局だ、単なる経験の問題。 経験をつめば自然といいコードが書けるようになるよ。
104 名前:nobodyさん [2008/07/13(日) 07:35:50 ID:yyUJjXK2] どれだけ頑張っても ModelとControllerの厚さを同じくらいにまでしか もっていけねえw 強引にモデルにもっていけなら別だけどw
105 名前:nobodyさん mailto:sage [2008/07/13(日) 17:55:25 ID:???] 初歩的な質問なんだけど、WEBのフォームから渡された値って、 基本的にモデルのvalidatesで全部チェックしていいんもんなんですか? 例えば、会員の新規登録でパスワード(password)と パスワード確認(password2)を比較して同一かチェックするとか。
106 名前:nobodyさん mailto:sage [2008/07/13(日) 18:01:54 ID:???] 規約に同意するかどうか、とかもモデルのバリデーションでやってます。
107 名前:nobodyさん mailto:sage [2008/07/14(月) 02:01:47 ID:???] 「CakePHPガイドブック」ってもう廃刊なのですか? 去年末に発売したばっかりなのになぜ?
108 名前:nobodyさん mailto:sage [2008/07/14(月) 06:42:09 ID:???] 内容が基本的に1.1だからでは? フレームワーク本としては、かなりいい本。
109 名前:nobodyさん mailto:sage [2008/07/14(月) 14:05:46 ID:???] 1.2RC2の話。 1.2からbehaviorsのattach/detachができるって、 あちこちに書いてあるけど、最近仕様が変わってるっぽいね。 よく書いてあるのが、コントローラで$this->Model->attach(ビヘイビア名)。 でも今は$this->Model->Behaviors->attach(ビヘイビア名) 間に、Behaviors(BehaviorCollection)が入ったようだ。
110 名前:nobodyさん mailto:sage [2008/07/14(月) 15:48:07 ID:???] チラシの裏 どうも、RC2にしてからユニットテストでメモリ不足と言われる。 メモリ制限をゆるくすればいいのだが腑に落ちない。 それで調べてみると、なんとアサーション一つにつき40KBぐらいも消費していた。 アサーションの数が3000個だと120MB。そりゃ足りないって言われるわなw それでコードを追ってみてみると /cake/tests/lib/cake_reporter.phpの関数 (特によく呼ばれるのはpaintPass)の中のob_start();が原因。 なんか知らんが、ob_start();を一回呼び出すとそれだけで40KBも消費する。 ob_end_flush()を呼び出すとメモリは解放されるっぽいけど、 どうもこのクラスの中では呼び出していない。(どこか他で呼び出しているの?) そしてアサーション一つごとにob_startが連続して呼び出されることになる。 ob_startごときで40KBも消費するのも、変な感じだが このob_startっているんだろうか?前のリビジョンのコードには存在しなかった。 とりあえず取ってみたが変化はわからない。 現在リファクタイリング中みたいだからそのうちどうにかされるのかもしれない。
111 名前:105 mailto:sage [2008/07/14(月) 17:10:17 ID:???] >>106 そういうもんなんですね。 どもです。
112 名前:nobodyさん mailto:sage [2008/07/15(火) 10:18:07 ID:???] findNeighboursで1テーブルから前のID,後のIDを↓のように取得しています。 $where = array('hogekb =' => 1); $this->set('nei_kekka', $this->Nani_table->findNeighbours($where,"Nani_table.id",$id)); ここに1テーブルjoinさせたいのですが、 以下のように設定したjoin句はfindNeighboursのどこにセットすればよいのでしょうか? $options['joins'][]= array( 'type' => 'INNER', 'alias' => 'Hoge_table', 'table' => 'hoge_table', 'conditions' => array('Hoge_table.id = Nani_table.id') );
113 名前:nobodyさん [2008/07/15(火) 14:41:34 ID:kKo7V/Gs] DBに入れるほどではなく、CSVファイルとしてデータを持っていて それをコントローラから参照したい場合、CSVファイルはどこに設置するのが 一番スマートなんでしょうか?
114 名前:nobodyさん mailto:sage [2008/07/15(火) 14:50:47 ID:???] 俺もそれ知りたいな。 XMLファイルとか。 tmpフォルダとかかな?
115 名前:nobodyさん mailto:sage [2008/07/15(火) 16:20:51 ID:???] >>113 webroot の files フォルダ。これが一番いいと思う。
116 名前:nobodyさん mailto:sage [2008/07/15(火) 17:29:56 ID:???] >>115 外部から見られたくないファイルなのでは??
117 名前:113 mailto:sage [2008/07/15(火) 20:00:24 ID:???] >>115 そうなんです、外部から見られたくはない。 いや見られても良いデータなんですけど、なんか変な感じなので。 >>114 tmpフォルダは考えたんですけど、役割的に違和感があるんですよね。 まぁ、結局DBにつっこんで今はやってみましたけど。 うーん。
118 名前:nobodyさん mailto:sage [2008/07/15(火) 20:22:19 ID:???] バージョンアップの際、appフォルダごと入れ替えるため、 appフォルダ以下にはデータは入れたくない。 cakeフォルダ以下には、データは入れるはずない。 appやcakeフォルダと同じ階層に、dataフォルダでも 作って、例えば画像ファイルとか入れられれば、 良さげに思うが。それは無理なん?
119 名前:113 mailto:sage [2008/07/16(水) 11:57:50 ID:???] >>118 あ、その方法がありましたね。 確かにそれであれば全然いける上に、スマートかも。 ありがとです。今後、検討してみます。
120 名前:nobodyさん [2008/07/16(水) 13:11:14 ID:ahXuksxu] >>113 DBに入れるほどではないデータは配列にしてモデルに入れてるよ
121 名前:nobodyさん [2008/07/16(水) 13:16:24 ID:ahXuksxu] 画像ファイルはvendorsでいいと思うんだが
122 名前:nobodyさん [2008/07/16(水) 13:22:04 ID:ahXuksxu] 一番スマートなのはプロジェクトappと同じ階層にdataフォルダだな CakePHPはデータ保存場所を考慮したフォルダ構成じゃないから CakePHP内にデータを置くこと自体がスマートじゃ無いってことかな
123 名前:nobodyさん [2008/07/16(水) 13:24:33 ID:ahXuksxu] フレームワークの中にデータを保管しようという思考が そもそも、おかしい気がしてきたよ
124 名前:nobodyさん [2008/07/16(水) 13:27:51 ID:ahXuksxu] フレームワーク外にcsvファイルを置くのが一番ベストだ!
125 名前:nobodyさん [2008/07/17(木) 08:07:12 ID:/Q3Ys2pH] フレームワークっていつまで使えるだろう 10年後、20年後にも、CakePHPはあるだろうか? そもそもPHPは使われてるだろうか?
126 名前:nobodyさん mailto:sage [2008/07/17(木) 08:11:21 ID:???] >>125 ムリポ
127 名前:nobodyさん mailto:sage [2008/07/17(木) 08:46:29 ID:???] >>125 じゃあ、こう考えるんだ 10年前はどうだったかを。 それで今も残っていればあるってことになる。 って10年前はPHPそのものがなかったか。
128 名前:nobodyさん [2008/07/17(木) 09:23:54 ID:r8Tb5l59] その都度、旬な商売道具(今ならphpフレームワーク)使って儲けるしかない。 これやれば10年後安心てのはIT社会には無い
129 名前:nobodyさん mailto:sage [2008/07/17(木) 09:26:42 ID:???] UTF-8、PHP1.2で作ってるんだけど フォルダ内のファイル名を読み込んだ時に $file = readdir($dir) だけだと日本語のファイル名が文字化けしてしまう。 部分的に関数通して文字化け回避する方法ってある?
130 名前:129 mailto:sage [2008/07/17(木) 09:58:29 ID:???] 128はCakePHP1.2の間違いです。
131 名前:nobodyさん [2008/07/17(木) 16:12:51 ID:hC9JNlTl] CakePHP1.2を使用しているのですが、 AppModel::queryを使って取得したデータを paginatorに渡す方法ってありますか?
132 名前:131 [2008/07/17(木) 16:26:20 ID:hC9JNlTl] 任意のSQLでpaginateがしたいんです!
133 名前:131 [2008/07/17(木) 17:05:12 ID:hC9JNlTl] 無茶苦茶な方法ではありますが、 対象のModelでpaginateをオーバーライドして、 $coditionsの中にsqlを入れて取り合えず 期待する動作は得られるようになりました。
134 名前:nobodyさん mailto:sage [2008/07/17(木) 18:56:26 ID:???] >>127 PHPはあっただろw
135 名前:nobodyさん mailto:sage [2008/07/18(金) 16:19:03 ID:???] >>133 無茶じゃなくてまっとうな方法。 Modelにpaginateメソッドは存在しないからオーバーライドではない。 Controllerのpaginateメソッドが最終的にfindする際に Modelのpaginateメソッドが存在すれば代わりにそっちを呼ぶようにに作ってある。
136 名前:nobodyさん mailto:sage [2008/07/18(金) 19:07:42 ID:???] modelはDBのテーブルと1対1が想定されているけど DBテーブルに登録する際にバリデート内容が異なる画面が3つあった場合 DBテーブル1に対してモデルが3つ必要になるよね Aテーブルがあったとしたら A1モデル 使用テーブルA A2モデル 使用テーブルA A3モデル 使用テーブルA それぞれのバリデート処理を実装することになるよね
137 名前:nobodyさん mailto:sage [2008/07/18(金) 19:08:40 ID:???] ログイン形式の携帯サイトを作ってるのですが、 CakePHPで「ログインされたかどうか」はどのように持つのが一般的なのでしょうか? PCサイトではセッションを使うことが多かったんですが、キャリアによってセッションが使えない場合があると聞いたもので。
138 名前:nobodyさん mailto:sage [2008/07/18(金) 19:11:29 ID:???] DBテーブルに登録する際にバリデート内容が異なる画面が3つあった場合 ひとつのモデルで完結できるのかな? A1モデル 使用テーブルA 画面1のバリデート処理 画面2のバリデート処理 画面3のバリデート処理
139 名前:nobodyさん mailto:sage [2008/07/18(金) 23:07:31 ID:???] 普通にケースごとのvalidateメソッド書いてるけど。
140 名前:nobodyさん mailto:sage [2008/07/19(土) 11:23:27 ID:???] >>137 自分は セッションとクッキーの連携プレーを使ってるよ。 キャリアって携帯でしょ? 携帯の場合はセッションキーをクッキーに埋め込むのよ。
141 名前:nobodyさん mailto:sage [2008/07/19(土) 13:45:27 ID:???] 携帯ではクッキーが使えない機種があるだろw
142 名前:nobodyさん mailto:sage [2008/07/19(土) 15:54:19 ID:???] >>137 普通にURLにセションキー埋め込めよ。 >>140 ( ゚д゚)ポカーン
143 名前:nobodyさん [2008/07/19(土) 16:24:22 ID:jBy/EgFS] モデルの数が凄い増えてきたら モデルを使いたいコントローラメソッド内で App::Import('Model', $model_name); $model = new $model_name(); $model->findAll(); した方がいいね どのコントローラメソッドでも共通利用することの多いモデルだけ $usesに入れた方がよくね じゃないと極端な話、一つのコントローラで利用するモデルが30個あった場合 $uses=arrray('A1','A2','A3','A4','A5','A6','A7','A8','A9','A10','A11','A12','A13','A14'・・・・・・・・・) てなると$usesだけで管理するのしんどいよ。
144 名前:nobodyさん mailto:sage [2008/07/19(土) 16:28:28 ID:???] モデルが30個もあるシステムをCakeで作るとは・・・ どんなシステム?レスポンスどうなの?
145 名前:nobodyさん [2008/07/19(土) 16:39:57 ID:jBy/EgFS] >>144 A8のようなアフィリエイトサイトだよ。 レスポンスはアソシエーションを その都度 bindModelする方法なら悪くはないよ 重くなるとしたらSQL関連だと思うから後はcacheに頼る
146 名前:nobodyさん mailto:sage [2008/07/19(土) 16:45:53 ID:???] 一つのコントローラに詰め込み過ぎじゃないの?
147 名前:nobodyさん [2008/07/19(土) 16:58:22 ID:jBy/EgFS] >>146 30個あるモデルは使用するDBテーブルは同じでバリデートの内容が若干違うので モデルを複数分けした。 なのでモデルの数だけコントローラを増やすというのもなあ・・・ ページ構成もおかしくなるし
148 名前:nobodyさん [2008/07/19(土) 17:03:55 ID:jBy/EgFS] コントローラの数はDBテーブルの数と比例するくらいの量で モデルの数はバリデートのケース分、増えて行ってる
149 名前:nobodyさん [2008/07/19(土) 17:08:42 ID:jBy/EgFS] 1つのDBに対して30通りのバリデートのケースがあれば コントローラが1に対してもモデルが30になる
150 名前:nobodyさん [2008/07/19(土) 17:23:07 ID:jBy/EgFS] レスポンス的にはApp::Import('Model', $model_name);の方が負荷は軽減できるよね 管理的にも$usesで管理するよりも コントローラメソッドの先頭でApp::Importを宣言する方が管理しやすい気がする デメリットはコーディング量が少し増えるくらいかな でも、どのコントローラメソッドでも使うモデルだけは$usesに入れるから そんなにコーディング量は増えないかな
151 名前:nobodyさん mailto:sage [2008/07/19(土) 17:41:39 ID:???] >>148 そもそも、バリデートの数の分だけ モデルを増やすのがおかしくね? モデルのsave()で、バリデートするかしないかのフラグがあるだろ? これって考え方を変えれば、バリデート1(データチェックする)、 バリデート2(データチェックを一切しない)という二つのバリデートと考えられる。 だからバリデート3(一部だけチェックする)ってのも、一つのモデルに入れてしまうのもありと思うが。 あとは、Model->save()の前に、Model->バリデートタイプ = '一部チェック'; なんてやっておいて、Modelのvalidateメソッドあたりで、バリデートタイプをみて チェック項目を変更すれば良いんじゃね? Modelのvar $validate、やったことないけど、 コードの中からでも変更できるんじゃね?
152 名前:nobodyさん mailto:sage [2008/07/19(土) 17:45:08 ID:???] バリデーションでモデル分けるのか・・・ なんか変な感じ。
153 名前:nobodyさん mailto:sage [2008/07/19(土) 17:51:24 ID:???] それと、App::Importよりも、Controller::loadModel()の方がよくね? いや、使ったこと無いし情報も見つからなかったからよく知らんが。 ちなみに非推奨になったloadModel関数ではなく、 コントローラのメソッドのloadModel()だから。
154 名前:nobodyさん [2008/07/19(土) 17:55:57 ID:jBy/EgFS] Modelのvar $validateが $validate1 $validate2 $validate3 という風に複数使えれば バリデート分モデルを増やす必要は無いけど バリデートタイプをみてチェック項目を変更ていうのは 変更項目が多いとコードが複雑に肥大化するのがなあ・・・
155 名前:nobodyさん mailto:sage [2008/07/19(土) 18:04:40 ID:???] >>154 やろうと思えば、できるとおもうけど? コントローラで、$model->save()呼び出し前に $model->validate_type = 'type1'; モデルのどこかで、$this->validate = $this->{'validate_' . $this->validate_type}; そうすりゃ、$validate_type の条件でチェックしてくれるよ。 具体的にどこのメソッドでやるのがふさわしいかは ちょっとやってみないとわからないけど。
156 名前:nobodyさん mailto:sage [2008/07/19(土) 18:05:53 ID:???] 訂正 そうすりゃ、$validate_type1 の条件でチェックしてくれるよ。
157 名前:nobodyさん [2008/07/19(土) 18:19:45 ID:jBy/EgFS] >>156 その方法で出来るのなら、ちょっと試してみます
158 名前:nobodyさん [2008/07/19(土) 18:24:34 ID:jBy/EgFS] >>153 App::Importよりも、Controller::loadModel()の方がよくね 理由は何でしょうか? どう違うのですか?
159 名前:nobodyさん mailto:sage [2008/07/19(土) 18:36:14 ID:???] >>158 $usesの代わりと考えるのならば、 $usesで指定したのと同じ状態になるのが良い。 App::Importは単にクラスを読み込むだけ。 $this->Model にインスタンスを生成したりしない。 コードをざっと見ただけの意見だが、 コントローラの初期化処理で、$usersを見て値が入っていれば、 Controller::loadModelを呼び出してモデルを生成している。 loadModelはクラス生成以外にもなんかやってる。 だからloadModelを使ったほうがトラブルが少なくなりそうだと思った。 でも使ったことは無い。loadModelは外部から使うべきものじゃないかのうせいもある。 (普通は使うべきじゃないのなら _loadModelになっているはずだとは思うが)
160 名前:nobodyさん mailto:sage [2008/07/19(土) 18:47:19 ID:???] >>140 ・・・ごめん。セッションキー埋め込みだった。
161 名前:nobodyさん [2008/07/19(土) 19:07:40 ID:jBy/EgFS] >>159 なるほど、よくわりました。 _loadModelてのは何ですか?
162 名前:nobodyさん mailto:sage [2008/07/19(土) 20:12:00 ID:???] メソッド名の先頭に _ をつけると、外部からの使用を推奨していないということ loadModel()に、_が付いていない以上、普通に呼び出して良い(ことが窺い知れる) api.cakephp.org/class_controller.html