【PHP】フレームワーク CakePHP 4ホール目【v1.2】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/06/20(金) 01:24:40ID:???10分で作るCakePHPアプリ for Windows
http://p4life.jp/cake/
マニュアル日本語化
http://www.cakephp.jp/doc/
Cookbook :: 1.2 Collection :: マニュアル
http://book.cakephp.org/ja
日本語フォーラム
http://cakephp.jp/modules/newbb/
あとこのへんとか(初心者向けTIPS)
http://www.avatarfinancial.com/pages/cake/
CakePHP入門リンク集
ttp://pub.studio15.jp/2007/11/13/cakephp-links/
【PHP】フレームワーク CakePHP 3ホール目【本命】
http://pc11.2ch.net/test/read.cgi/php/1205475360/
【PHP】フレームワーク CakePHP 2ホール目
http://pc11.2ch.net/test/read.cgi/php/1194976228/
【PHP】フレームワーク CakePHP
http://pc11.2ch.net/test/read.cgi/php/1163850802/
0081nobodyさん
2008/07/06(日) 02:50:57ID:???C belongsTo array('B','A');
って書いてた(汗
C belongsTo array('A','B');
にしたら、直ったっぽい
0082nobodyさん
2008/07/06(日) 14:24:50ID:???0083nobodyさん
2008/07/06(日) 14:32:55ID:???0084nobodyさん
2008/07/07(月) 22:11:14ID:???0085nobodyさん
2008/07/09(水) 18:44:09ID:???既存のデータ取得関数に影響が出るから
アソシエーションの設定は
メソッド単位、もしくはメソッド内のロジック単位で
bindModel() をした方がいいね
0086nobodyさん
2008/07/10(木) 03:21:38ID:???フリーターしか選択肢がないというのはよほど問題がある人だろう。
先天や事故で身体的に無理というならばまだしも、
精神的にとかは、もう笑うしかないな。
どれだけ甘えているのだと。
そういうのはバイトで当然だよ。
むしろ金をやる必要すら無い。
0087デフォルトの名無しさん
2008/07/10(木) 11:10:29ID:???デフォルトをチェックが入った状態にしたいのですが、以下のようにvalueを指定してもチェックが入りません。
どのように指定すればチェックが入るのでしょうか?
echo'<div>'.$form->checkbox('comset/admin',array('label'=>"",'value'=>1)).'管理者のみ表示</div>';
0088nobodyさん
2008/07/10(木) 13:01:36ID:???# ComsetsController
if (emtpy($this->data))
$this->data['Comset']['admin'] = 1;
# Views
echo'<div>'.$form->checkbox('Comset.admin',array('label'=>"")).'管理者のみ表示</div>';
じゃないかな?
0090nobodyさん
2008/07/10(木) 14:37:07ID:???ほにゃらって処理をしているんだけど、
CakePHP1.2から、$conditions => array('key =' => 'value');になったでしょ?
今まではarray_keysでkeyがあるかどうかって見ていたんだけど、
これからは'key ?'ってなっちゃって?の部分が変わるから
単純にarray_keysが使えないんだよね。
これの代わりになる便利な関数って用意されているか知らない?
009187
2008/07/10(木) 16:53:38ID:???実現できました、ありがとうございます。
立て続けで申し訳ないのですが、ラジオボタンの表示で
ラジオにチェックを入れるにはどのように指定すればよいのでしょうか?
ラジオの数が動的に変わるため、以下のようにして作成しています。
ループ内である条件に一致する場合に、ラジオにチェックを入れるようにしたいです。
一致するのはループ内で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>';
0092nobodyさん
2008/07/10(木) 17:06:37ID:???forはview内かな?
だとしたら、viewで
if (!empty($this->data['Hogeset']['hoge']) $this->data['Hogeset']['hoge'] = 初期値 ;
じゃまいか?
やりたいことを、良く理解していないから、はずしてたらすまん。
009387
2008/07/10(木) 19:50:48ID:???ありがとうございます。
$this->dataがない状態で選択しようとしたからか、
教えていただいた方法では、実現できませんでした。
いろいろ試してみた結果、
選択したい値をradio生成時にvalueで指定したらとりあえずできました。
echo '<div>'.$form->radio('ansset/ansr',$arradio,array('legend' => false,'value'=>4)).'</div>';
0095nobodyさん
2008/07/11(金) 15:46:07ID:???今、1.2betaから1.2RC2に移行しているわけだが、
変わりすぎてて俺、涙目wwwww orz
RC2 から 正式版の間ではあまり変わらない事を祈っている・・・
0096nobodyさん
2008/07/11(金) 16:03:01ID:???RC1→2はわりと早かったけど・・・
0097nobodyさん
2008/07/11(金) 17:01:52ID:???すぐに出るんだろうか?
0098nobodyさん
2008/07/12(土) 03:58:01ID:GP2h4BovBモデル->save()みたいなことしたいけど、ダメ?
コントローラ内で
Aモデルのデータとってきて
$this->Bモデル->save()するを完結するのががベストかな?
0099nobodyさん
2008/07/12(土) 03:59:50ID:GP2h4Bovモデルの自由度が凄く悪い気がするんだが・・・
0100nobodyさん
2008/07/12(土) 04:04:06ID:GP2h4Bov結局コントローラが厚くなってしまうんだよな
一通りコーディングが終わってからリファクタリングする形で
モデルを厚くしていかないと。
調べながらだと時間もったい気がする
0101nobodyさん
2008/07/12(土) 11:07:21ID:???コントローラが厚くなってしまうのが
問題って書いてあるな。
わざわざスライドにしてるってことは、
1.2で改善されるんやろか?
0102nobodyさん
2008/07/12(土) 13:48:03ID:???そういうコードを書くなってことだろう。
0103nobodyさん
2008/07/12(土) 19:30:01ID:???> コントローラだと何でも出来ちゃうから
> 結局コントローラが厚くなってしまうんだよな
似たような話。
関数作らなくても何でも出来ちゃうから
結局コードが長くなってしまうんだよな。
結局だ、単なる経験の問題。
経験をつめば自然といいコードが書けるようになるよ。
0104nobodyさん
2008/07/13(日) 07:35:50ID:yyUJjXK2ModelとControllerの厚さを同じくらいにまでしか
もっていけねえw
強引にモデルにもっていけなら別だけどw
0105nobodyさん
2008/07/13(日) 17:55:25ID:???基本的にモデルのvalidatesで全部チェックしていいんもんなんですか?
例えば、会員の新規登録でパスワード(password)と
パスワード確認(password2)を比較して同一かチェックするとか。
0106nobodyさん
2008/07/13(日) 18:01:54ID:???0107nobodyさん
2008/07/14(月) 02:01:47ID:???去年末に発売したばっかりなのになぜ?
0108nobodyさん
2008/07/14(月) 06:42:09ID:???フレームワーク本としては、かなりいい本。
0109nobodyさん
2008/07/14(月) 14:05:46ID:???1.2からbehaviorsのattach/detachができるって、
あちこちに書いてあるけど、最近仕様が変わってるっぽいね。
よく書いてあるのが、コントローラで$this->Model->attach(ビヘイビア名)。
でも今は$this->Model->Behaviors->attach(ビヘイビア名)
間に、Behaviors(BehaviorCollection)が入ったようだ。
0110nobodyさん
2008/07/14(月) 15:48:07ID:???どうも、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っているんだろうか?前のリビジョンのコードには存在しなかった。
とりあえず取ってみたが変化はわからない。
現在リファクタイリング中みたいだからそのうちどうにかされるのかもしれない。
0112nobodyさん
2008/07/15(火) 10:18:07ID:???$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')
);
0113nobodyさん
2008/07/15(火) 14:41:34ID:kKo7V/Gsそれをコントローラから参照したい場合、CSVファイルはどこに設置するのが
一番スマートなんでしょうか?
0114nobodyさん
2008/07/15(火) 14:50:47ID:???XMLファイルとか。
tmpフォルダとかかな?
0117113
2008/07/15(火) 20:00:24ID:???そうなんです、外部から見られたくはない。
いや見られても良いデータなんですけど、なんか変な感じなので。
>>114
tmpフォルダは考えたんですけど、役割的に違和感があるんですよね。
まぁ、結局DBにつっこんで今はやってみましたけど。
うーん。
0118nobodyさん
2008/07/15(火) 20:22:19ID:???appフォルダ以下にはデータは入れたくない。
cakeフォルダ以下には、データは入れるはずない。
appやcakeフォルダと同じ階層に、dataフォルダでも
作って、例えば画像ファイルとか入れられれば、
良さげに思うが。それは無理なん?
0119113
2008/07/16(水) 11:57:50ID:???あ、その方法がありましたね。
確かにそれであれば全然いける上に、スマートかも。
ありがとです。今後、検討してみます。
0120nobodyさん
2008/07/16(水) 13:11:14ID:ahXuksxuDBに入れるほどではないデータは配列にしてモデルに入れてるよ
0121nobodyさん
2008/07/16(水) 13:16:24ID:ahXuksxu0122nobodyさん
2008/07/16(水) 13:22:04ID:ahXuksxuCakePHPはデータ保存場所を考慮したフォルダ構成じゃないから
CakePHP内にデータを置くこと自体がスマートじゃ無いってことかな
0123nobodyさん
2008/07/16(水) 13:24:33ID:ahXuksxuそもそも、おかしい気がしてきたよ
0124nobodyさん
2008/07/16(水) 13:27:51ID:ahXuksxu0125nobodyさん
2008/07/17(木) 08:07:12ID:/Q3Ys2pH10年後、20年後にも、CakePHPはあるだろうか?
そもそもPHPは使われてるだろうか?
0127nobodyさん
2008/07/17(木) 08:46:29ID:???じゃあ、こう考えるんだ
10年前はどうだったかを。
それで今も残っていればあるってことになる。
って10年前はPHPそのものがなかったか。
0128nobodyさん
2008/07/17(木) 09:23:54ID:r8Tb5l59これやれば10年後安心てのはIT社会には無い
0129nobodyさん
2008/07/17(木) 09:26:42ID:???フォルダ内のファイル名を読み込んだ時に
$file = readdir($dir)
だけだと日本語のファイル名が文字化けしてしまう。
部分的に関数通して文字化け回避する方法ってある?
0130129
2008/07/17(木) 09:58:29ID:???0131nobodyさん
2008/07/17(木) 16:12:51ID:hC9JNlTlAppModel::queryを使って取得したデータを
paginatorに渡す方法ってありますか?
0132131
2008/07/17(木) 16:26:20ID:hC9JNlTl0133131
2008/07/17(木) 17:05:12ID:hC9JNlTl対象のModelでpaginateをオーバーライドして、
$coditionsの中にsqlを入れて取り合えず
期待する動作は得られるようになりました。
0135nobodyさん
2008/07/18(金) 16:19:03ID:???無茶じゃなくてまっとうな方法。
Modelにpaginateメソッドは存在しないからオーバーライドではない。
Controllerのpaginateメソッドが最終的にfindする際に
Modelのpaginateメソッドが存在すれば代わりにそっちを呼ぶようにに作ってある。
0136nobodyさん
2008/07/18(金) 19:07:42ID:???DBテーブルに登録する際にバリデート内容が異なる画面が3つあった場合
DBテーブル1に対してモデルが3つ必要になるよね
Aテーブルがあったとしたら
A1モデル 使用テーブルA
A2モデル 使用テーブルA
A3モデル 使用テーブルA
それぞれのバリデート処理を実装することになるよね
0137nobodyさん
2008/07/18(金) 19:08:40ID:???CakePHPで「ログインされたかどうか」はどのように持つのが一般的なのでしょうか?
PCサイトではセッションを使うことが多かったんですが、キャリアによってセッションが使えない場合があると聞いたもので。
0138nobodyさん
2008/07/18(金) 19:11:29ID:???ひとつのモデルで完結できるのかな?
A1モデル 使用テーブルA
画面1のバリデート処理
画面2のバリデート処理
画面3のバリデート処理
0139nobodyさん
2008/07/18(金) 23:07:31ID:???0140nobodyさん
2008/07/19(土) 11:23:27ID:???自分は
セッションとクッキーの連携プレーを使ってるよ。
キャリアって携帯でしょ?
携帯の場合はセッションキーをクッキーに埋め込むのよ。
0141nobodyさん
2008/07/19(土) 13:45:27ID:???0143nobodyさん
2008/07/19(土) 16:24:22ID: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だけで管理するのしんどいよ。
0144nobodyさん
2008/07/19(土) 16:28:28ID:???どんなシステム?レスポンスどうなの?
0145nobodyさん
2008/07/19(土) 16:39:57ID:jBy/EgFSA8のようなアフィリエイトサイトだよ。
レスポンスはアソシエーションを
その都度 bindModelする方法なら悪くはないよ
重くなるとしたらSQL関連だと思うから後はcacheに頼る
0146nobodyさん
2008/07/19(土) 16:45:53ID:???0147nobodyさん
2008/07/19(土) 16:58:22ID:jBy/EgFS30個あるモデルは使用するDBテーブルは同じでバリデートの内容が若干違うので
モデルを複数分けした。
なのでモデルの数だけコントローラを増やすというのもなあ・・・
ページ構成もおかしくなるし
0148nobodyさん
2008/07/19(土) 17:03:55ID:jBy/EgFSモデルの数はバリデートのケース分、増えて行ってる
0149nobodyさん
2008/07/19(土) 17:08:42ID:jBy/EgFSコントローラが1に対してもモデルが30になる
0150nobodyさん
2008/07/19(土) 17:23:07ID:jBy/EgFS管理的にも$usesで管理するよりも
コントローラメソッドの先頭でApp::Importを宣言する方が管理しやすい気がする
デメリットはコーディング量が少し増えるくらいかな
でも、どのコントローラメソッドでも使うモデルだけは$usesに入れるから
そんなにコーディング量は増えないかな
0151nobodyさん
2008/07/19(土) 17:41:39ID:???そもそも、バリデートの数の分だけ
モデルを増やすのがおかしくね?
モデルのsave()で、バリデートするかしないかのフラグがあるだろ?
これって考え方を変えれば、バリデート1(データチェックする)、
バリデート2(データチェックを一切しない)という二つのバリデートと考えられる。
だからバリデート3(一部だけチェックする)ってのも、一つのモデルに入れてしまうのもありと思うが。
あとは、Model->save()の前に、Model->バリデートタイプ = '一部チェック';
なんてやっておいて、Modelのvalidateメソッドあたりで、バリデートタイプをみて
チェック項目を変更すれば良いんじゃね?
Modelのvar $validate、やったことないけど、
コードの中からでも変更できるんじゃね?
0152nobodyさん
2008/07/19(土) 17:45:08ID:???なんか変な感じ。
0153nobodyさん
2008/07/19(土) 17:51:24ID:???いや、使ったこと無いし情報も見つからなかったからよく知らんが。
ちなみに非推奨になったloadModel関数ではなく、
コントローラのメソッドのloadModel()だから。
0154nobodyさん
2008/07/19(土) 17:55:57ID:jBy/EgFS$validate1
$validate2
$validate3
という風に複数使えれば
バリデート分モデルを増やす必要は無いけど
バリデートタイプをみてチェック項目を変更ていうのは
変更項目が多いとコードが複雑に肥大化するのがなあ・・・
0155nobodyさん
2008/07/19(土) 18:04:40ID:???やろうと思えば、できるとおもうけど?
コントローラで、$model->save()呼び出し前に
$model->validate_type = 'type1';
モデルのどこかで、$this->validate = $this->{'validate_' . $this->validate_type};
そうすりゃ、$validate_type の条件でチェックしてくれるよ。
具体的にどこのメソッドでやるのがふさわしいかは
ちょっとやってみないとわからないけど。
0156nobodyさん
2008/07/19(土) 18:05:53ID:???そうすりゃ、$validate_type1 の条件でチェックしてくれるよ。
0157nobodyさん
2008/07/19(土) 18:19:45ID:jBy/EgFSその方法で出来るのなら、ちょっと試してみます
0158nobodyさん
2008/07/19(土) 18:24:34ID:jBy/EgFSApp::Importよりも、Controller::loadModel()の方がよくね
理由は何でしょうか?
どう違うのですか?
0159nobodyさん
2008/07/19(土) 18:36:14ID:???$usesの代わりと考えるのならば、
$usesで指定したのと同じ状態になるのが良い。
App::Importは単にクラスを読み込むだけ。
$this->Model にインスタンスを生成したりしない。
コードをざっと見ただけの意見だが、
コントローラの初期化処理で、$usersを見て値が入っていれば、
Controller::loadModelを呼び出してモデルを生成している。
loadModelはクラス生成以外にもなんかやってる。
だからloadModelを使ったほうがトラブルが少なくなりそうだと思った。
でも使ったことは無い。loadModelは外部から使うべきものじゃないかのうせいもある。
(普通は使うべきじゃないのなら _loadModelになっているはずだとは思うが)
0161nobodyさん
2008/07/19(土) 19:07:40ID:jBy/EgFSなるほど、よくわりました。
_loadModelてのは何ですか?
0162nobodyさん
2008/07/19(土) 20:12:00ID:???loadModel()に、_が付いていない以上、普通に呼び出して良い(ことが窺い知れる)
http://api.cakephp.org/class_controller.html
0163162
2008/07/19(土) 20:14:27ID:???特定のactionでしか使わないModelなんかは、これで動的に呼んだ方が良さそうだね。
修正しよっと
0164nobodyさん
2008/07/19(土) 23:06:40ID:jBy/EgFSコントローラ内でattach関数を使って読む込むyamlファイルを動的に選択させることで
モデルを増やさずにバリデーションyamlファイルだけ増加させることで解決できた
0165nobodyさん
2008/07/19(土) 23:10:53ID:jBy/EgFS0166nobodyさん
2008/07/20(日) 07:59:18ID:???フレームワークを使っている人が作っている感がでてる。
0167nobodyさん
2008/07/23(水) 16:23:08ID:???0168nobodyさん
2008/07/23(水) 20:47:49ID:???しかもsymfonyの遅い原因だったPropelも今度のバージョンで速くなったし
なんだかなー。
0170nobodyさん
2008/07/23(水) 22:31:35ID:bVhJ1Ly70171nobodyさん
2008/07/23(水) 22:32:47ID:pE/1LCdwチューンナップが進むのを期待するだな。
0172nobodyさん
2008/07/23(水) 22:39:51ID:???モッサリという感じ。
1.1はサクサクだったのに残念。
0173nobodyさん
2008/07/24(木) 01:13:17ID:v8PYU5tTデバッグモード解除してもモッサリするようなら
SQLがらみ、bindmodelで上手にやれば問題なし
0174nobodyさん
2008/07/24(木) 02:22:41ID:???0175nobodyさん
2008/07/24(木) 13:44:45ID:???0176nobodyさん
2008/07/24(木) 13:56:02ID:YLl3rq+tttp://pc11.2ch.net/test/read.cgi/php/1187333485/86
0177nobodyさん
2008/07/24(木) 18:43:29ID:???1.2のbetaの時にくらべ、デバッグ情報の量が
かなり増えているから。
0178nobodyさん
2008/07/24(木) 19:04:07ID:???Cakeが初めてのフレームワークでも、すんなり移れるフレームワークってないですか??
symfonyとかサッパリ;;
0179nobodyさん
2008/07/24(木) 19:13:11ID:???0180nobodyさん
2008/07/24(木) 19:43:19ID:???URLにセッションIDを埋める場合って
session.php内のuse_trans_sidを1にしないと使えないの?
PCサイトとプロジェクトが共通だから、なるべく共通的なところは
いじらずにやりたいと思うのだけど。
0181178
2008/07/24(木) 20:16:32ID:???さすがにライトすぎるというか;
使ってもみないで言うのもなんですが・・・
CIとかも流行ってきてますね。ちょっと気になる。。
■ このスレッドは過去ログ倉庫に格納されています