【PHP】フレームワーク CakePHP 2ホール目
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
2007/11/14(水) 02:50:28ID:???http://www.cakephp.org/
10分で作るCakePHPアプリ for Windows
http://p4life.jp/cake/
マニュアル日本語化
http://www.cakephp.jp/doc/
日本語フォーラム
http://cakephp.jp/modules/newbb/
あとこのへんとか(初心者向けTIPS)
http://www.avatarfinancial.com/pages/cake/
0002nobodyさん
2007/11/14(水) 03:12:01ID:???0003nobodyさん
2007/11/14(水) 03:25:56ID:???0004nobodyさん
2007/11/14(水) 03:26:45ID:???【PHP】フレームワーク CakePHP
http://pc11.2ch.net/test/read.cgi/php/1163850802/
0005nobodyさん
2007/11/14(水) 11:46:19ID:???>>あとこのへんとか(初心者向けTIPS)
>>http://www.avatarfinancial.com/pages/cake/
ヒント:初心者は英語読めないw
0006nobodyさん
2007/11/14(水) 12:26:42ID:???0007nobodyさん
2007/11/14(水) 16:44:29ID:???ttp://pub.studio15.jp/2007/11/13/cakephp-links/
0008nobodyさん
2007/11/14(水) 21:45:34ID:Y+NYefM3なぜ $this->set('hoge','hoge'); といちいちコントローラーからviewへ送るものを
指定する必要があるのか不思議に思うのですがいかがでしょうか。
$this->set(get_defined_vars()); を app_conrtoroller に直接書いておくというのが
一番手間かからず楽だと思うのですが、何かデメリットありますかね
ご指導、ご鞭撻のほど、よろしくお願いします。
0009名無しさん@Vim%Chalice
2007/11/14(水) 22:22:26ID:???$this->set()を拡張するって事?
そういう風に纏めても結局、コントローラとアクションの
組み合わせごとにビュー側へ渡す変数ってバラバラだよね。
変数を渡したくない時もあるし、条件ごとにセットしたりしなかったり。
そーゆー所ってのは往々にして関数で一括りにしようとすると大変な思いをする。
んで後からキモい拡張を繰り返す羽目になる。
つーかね、$this->set();をいっぱい書くのが嫌だっつーんなら
こういう書き方があるぞ
$this->set( array(
'foo' => $foo,
'bar' => $bar,
));
0010nobodyさん
2007/11/15(木) 16:51:14ID:k/tuboV7ありがとうございます。
$this->set( array(
'foo' => $foo,
'bar' => $bar,
));
といった書き方でやることにします。ありがとう!
0012nobodyさん
2007/11/16(金) 06:01:31ID:???デメリットと、
おまけでそれへの対処の一例を書いてるだけのように見えるが...
ゆとりか?
0013名無しさん@Vim%Chalice
2007/11/16(金) 08:08:28ID:???そういう風に見える?
たしかに口は悪いけど、こういう事ってひとりじゃなかなか
気付かねーと思うんだけどな
習い事でも何でもそうだけど、最初は人の真似から始まるじゃん
プログラミングだけ個人のアイディアが〜とか言ってたら
切磋琢磨できないよ
//まあ、苦労するのもいい勉強だけどな
0014nobodyさん
2007/11/16(金) 11:05:41ID:???たとえば、商品入力ダイアログボックス
検索も出来て、クリックして選択。
そういうページだけど、これは汎用。
あるページの商品入力にこのダイアログを使う。
また、違うページの商品入力にもこのダイアログを使う。
ダイアログ的な用途だけど、ウインドウポップアップで
出てくるのではない普通のページ。
0015nobodyさん
2007/11/16(金) 11:56:29ID:???0016nobodyさん
2007/11/16(金) 13:26:25ID:???> たしかに口は悪いけど、こういう事ってひとりじゃなかなか
> 気付かねーと思うんだけどな
>
> 習い事でも何でもそうだけど、最初は人の真似から始まるじゃん
> プログラミングだけ個人のアイディアが〜とか言ってたら
> 切磋琢磨できないよ
ヘタレのくせに自意識過剰じゃね?
0018nobodyさん
2007/11/16(金) 17:32:00ID:???$data[0]['Model']['column']
の形式の配列が帰ってくるんですが、これを
$data[0]['column']
の形式で取得したいんです。何か楽な方法って用意されていませんかね?
0020nobodyさん
2007/11/16(金) 17:52:26ID:???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する
0022nobodyさん
2007/11/17(土) 02:24:41ID:???都会の人はうらやましいな。本当に。
0023nobodyさん
2007/11/17(土) 02:59:12ID:???0024nobodyさん
2007/11/18(日) 00:59:28ID:???0025nobodyさん
2007/11/18(日) 19:13:19ID:???0026nobodyさん
2007/11/20(火) 01:45:08ID:???0027nobodyさん
2007/11/20(火) 08:22:30ID:???オマイラ天才だな
0030nobodyさん
2007/11/20(火) 13:01:09ID:???誤字脱字以前に最初からbakeの使い方を説明しているのはどうなんだろ。
Railsから来た人ならわかるのかも知れないけど、Cakeから始めたら
絶対に混乱すると思うんだが。
modelとか複雑な例を出してるし、コードが長すぎて理解できないっしょ。
0031nobodyさん
2007/11/20(火) 14:37:23ID:???それと実践編のサンプルの仕様が良くわからない(実践的なものと思えない)
0032nobodyさん
2007/11/20(火) 15:35:43ID:WpMCnsjrpublic_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の問題かとは思うんですが、そもそもディレクトリ配置の仕方に問題アリですか?
0033nobodyさん
2007/11/20(火) 15:49:32ID:???参考:
ttp://purazumakoi.info/blog/archives/2007/09/cakephp.html
0035nobodyさん
2007/11/20(火) 20:13:05ID:???つまり、$model->findTree('id = a1') とかやったら、
- a1
+- b1
+- c1
+- c2
+- b2
こんな感じでツリーのデータとして返してくれる感じ。
参考までにほかのO/Rマッパーの話でもいいけど。
とここでふと思ったけど、自分のモデルに対してアソシエーション設定すればうまく行くのか?
0036nobodyさん
2007/11/21(水) 02:55:26ID:???cakeもrailsみたいにコマンド一つでファイル作ってくれればいいのに
質問に答えていくのがなんか面倒
0037nobodyさん
2007/11/21(水) 08:30:39ID:Cl2dTAkZ0038nobodyさん
2007/11/21(水) 12:29:06ID:???0040nobodyさん
2007/11/22(木) 01:19:04ID:???0041nobodyさん
2007/11/22(木) 08:23:16ID:nlNH1bOEコンポーネントにすべきか、という意味?
0042nobodyさん
2007/11/22(木) 10:30:25ID:???0043nobodyさん
2007/11/22(木) 12:06:19ID:AuFQqZEI0044nobodyさん
2007/11/22(木) 18:33:00ID:???一回自分でサイト構築までやってみて、これ試すと相当やばい
PHP野郎にとっては麻薬以上にやばい
0045nobodyさん
2007/11/22(木) 19:19:37ID:???0046nobodyさん
2007/11/23(金) 01:56:02ID:???0047nobodyさん
2007/11/23(金) 02:09:41ID:???0048nobodyさん
2007/11/23(金) 12:37:53ID:???0049nobodyさん
2007/11/23(金) 13:00:29ID:???Cakeのヘルパーからこれらの世界に入っていくのは不味いですかね?
ある程度本でも何でも読んでから出直したほうが良いのかな
0050nobodyさん
2007/11/23(金) 17:34:58ID:???そういう人用のヘルパーだと思われるよ。
普通に書きたきゃ書けばいいし、ライブラリ使いたきゃ使えばいい。
まずいも何もないと思う。
0051nobodyさん
2007/11/23(金) 18:26:39ID:???あまりviewにロジック組みたくないんだが。
0052nobodyさん
2007/11/23(金) 18:38:55ID:???ログインしてなかったら一括でログイン促すページにリダイレクトだろ
おまえwebアプリ作ったことあるのか?
0053nobodyさん
2007/11/23(金) 21:16:55ID:???そうですか、助かりました。
でも少しはAjax, Javascriptの本もかじってみようと思います。
ありがとうございました。
0054nobodyさん
2007/11/23(金) 21:17:41ID:???してたら「ログアウト」を表示したいってことじゃないの?
0055nobodyさん
2007/11/24(土) 04:15:26ID:???ログインしてない時はグローバルナビのリンク先urlでも変えて、ログインフォームと新規登録リンクと個別説明ページに飛ばすか
できれば同じurlにしたかったが。
0056nobodyさん
2007/11/24(土) 04:17:02ID:???0057nobodyさん
2007/11/24(土) 07:36:32ID:???テンプレートだけ作ってコントローラから何々の部分のメッセージを設定して
renderればいいんじゃないのん
0059nobodyさん
2007/11/24(土) 14:44:27ID:+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');}
(ログインしてね♪ボックスを表示させる)
という処理でわけてますね。
わかりやすいし、いいと思いますよ。
0060nobodyさん
2007/11/24(土) 16:57:12ID:???エレメントにしておいて、コントローラで切り替えるってのはいいかも。
0061nobodyさん
2007/11/25(日) 03:26:25ID:???<?php echo $html->tagErrorMsg('Post/body', '本文は必ず入力してください。')みたいだったやつ。
Modelでメッセージ内容決められるようになったから。
あとエラーって一個ずつしか出ないけどまとめて表示とか出来ないの?
<?php echo $html->tagErrorMsg('Post/body', '本文は必ず入力してください。') ?>
0062nobodyさん
2007/11/25(日) 08:44:45ID:???$form->input()を使えばエラーも一緒に表示されるようになる。
エラー文はmodelでも指定できるし、今まで通りControllerでも
指定できるけど、tagErrorMsgは無くなったので、inputの第二引数に
messageとして渡してあげればOK。
一個のinputに対してエラーを全部表示するのはコアを触らないと
無理じゃないかな。よく知らん。
0063nobodyさん
2007/11/25(日) 20:28:15ID:???一個ずつしか出ないならJavascriptの使用を強制してエラー出してあげるしかないかな
0064nobodyさん
2007/11/25(日) 22:38:25ID:???0065nobodyさん
2007/11/26(月) 00:36:21ID:???0066nobodyさん
2007/11/26(月) 21:19:27ID:???0067nobodyさん
2007/11/26(月) 21:32:38ID:g6VI9o/i0068nobodyさん
2007/11/26(月) 22:20:15ID:???0069nobodyさん
2007/11/26(月) 22:37:57ID:9laXyXH+0070nobodyさん
2007/11/27(火) 00:22:24ID:???0071nobodyさん
2007/11/27(火) 04:42:44ID:???細かい部分で変な仕様っていうか不具合っていうか
いまいちな動作するよねえ
validationとかsaveとか
おかげでソースとにらめっこで時間かかる…
0072nobodyさん
2007/11/27(火) 07:25:54ID:q198YkJr0073nobodyさん
2007/11/27(火) 09:33:56ID:???saveはidも更新されちゃうとかか?
0074nobodyさん
2007/11/27(火) 11:12:10ID:O5dAXXRhテーブル名が「prefix_テーブル名」の時は「prefix_テーブル名_id」となるんでしょうか?
また、テーブル名は複数形ですか?
0075nobodyさん
2007/11/27(火) 21:07:05ID:???0076nobodyさん
2007/11/27(火) 21:16:36ID:???そこまでまだ使いこんでない
>>73
2は少しよさそうだね
なんかわかりにくいというか 仕様が曖昧だよね
まあ楽につくろうっていうのが趣旨だからしかたないのかもしれない
もうちょっといじってみる
0077nobodyさん
2007/11/27(火) 22:46:38ID:???日本人じゃないから仕方が無いけど、
単数と複数の意味を考えよう。
テーブルとは、レコードの集まりだ。
で、一つのレコードは、一つのもの。つまり単数だ。
だからレコードのID・・・つまり一つのもののIDなのだから
単数形_IDになる。
そしてその集まりであるテーブルは当然複数形となる。
ついでにいうと、テーブルのレコードに相当するModelは当然単数形だし、
そのモデル(単数)の一覧(複数)を表示したりするコントローラは複数形となる。
単数形と複数形の使い分けはこんな感じ、
あと残りの単語の区切りがアンダーバー区切りか頭大文字かはクラス名は頭大文字
ファイルやテーブルはアンダーバー区切りとなる。
0078nobodyさん
2007/11/28(水) 00:30:00ID:???テーブル B hasAndBelongsToMany A
のときの A のデータの編集(新規追加)画面を作ってる
Aの編集画面で、Bのデータを持ってきて表示・選択できるところまでできた
で、Aのデータをsaveするときに、Bのデータのsaveとかvalidatesは自動でやってくれるの?
この辺り、いまいちややこしいなああ
0079nobodyさん
2007/11/28(水) 01:03:43ID:???続きだけど
この場合、自前でvalidatesするときはどこでするの?
AとBを関連づけるための A_Bテーブルも作ってるけど A_Bモデルでやるのかな?
それともAモデル?
Bモデルだとデータの形式が違うから AモデルかA_Bモデルだとは思うんだが…
0080nobodyさん
2007/11/28(水) 03:05:53ID:k8OzrBLtコントローラ内で
pr($this->User->invalidFields());
とかってやるとちゃんとvalidateは行われているようなんですが・・・
0081nobodyさん
2007/11/28(水) 14:51:33ID:Zvh5a2INどうなんすか。先輩方。
0082nobodyさん
2007/11/28(水) 15:01:13ID:???ただの一枚のphpファイルだけで完結するものと
データベースにアクセスするものを比べたら
そりゃ重いのは当然だと思うが?
0083nobodyさん
2007/11/28(水) 15:18:31ID:???0084nobodyさん
2007/11/28(水) 20:51:41ID:???0085nobodyさん
2007/11/28(水) 21:56:36ID:???0086nobodyさん
2007/11/29(木) 17:42:41ID:IwtVKe0+フレームワークcakephpを使ったプログラムと
普通にベタ書きでプログラムを書くのと比べて。
0087nobodyさん
2007/11/29(木) 18:11:52ID:???0088nobodyさん
2007/11/29(木) 21:15:28ID:???0089nobodyさん
2007/11/30(金) 18:57:34ID:uOWFJHM3fatal で 30秒どうのこうの・・・というエラーが出るんですよ。
更新キーを押してもなかなか表示しなかったり。
キャッシュ使わないときついんですかね。cakephp。
プログラムのみならある程度いけるんですが、画像使うともう厳しいくらい重いですね。
なんか良い方法ないでしょうか。
0090nobodyさん
2007/11/30(金) 20:08:26ID:???0091nobodyさん
2007/11/30(金) 21:45:10ID:uOWFJHM3ありがとうございます。
今でました。
Fatal error: Maximum execution time of 30 seconds exceeded in /home/hoge/www/hoge/cake/libs/session.php on line 154
セッション周りがおかしいんですかね〜。
ちなみにcakephp1.1 サクラサーバーのプロっていうレンタルサーバーですね。
レンタルサーバーでも他のプログラムならさくさく動くんですが・・・。
0092nobodyさん
2007/11/30(金) 21:53:08ID:???0093nobodyさん
2007/12/03(月) 19:35:14ID:???0094nobodyさん
2007/12/04(火) 19:21:59ID:???0095nobodyさん
2007/12/04(火) 19:35:56ID:5jWwGUYJ0096nobodyさん
2007/12/04(火) 19:52:21ID:???話が変わってしまって申し訳ないけど、
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
0097nobodyさん
2007/12/04(火) 20:01:17ID:???$config = CONFIGS . Configure::read('Session.cookie') . '.php';
ってなってるけど
$config = CONFIGS . Configure::read('Session.save') . '.php';
の間違いじゃね?
をそんまま訳せばいいだろw
0098nobodyさん
2007/12/04(火) 21:09:42ID:???全然話違うけど、フォームの確認画面はググってすぐ見つかる方法くらいしかないんだろうか。そもそもcake使っているものに確認画面が見当たらない
0099nobodyさん
2007/12/04(火) 22:56:12ID:???運がよければいいことがあるぜ!
http://localhost/users/deletel/1
0100nobodyさん
2007/12/05(水) 01:13:52ID:???0101nobodyさん
2007/12/05(水) 13:38:48ID:???心優しい奴だな
0102nobodyさん
2007/12/05(水) 15:45:18ID:???0103nobodyさん
2007/12/05(水) 19:21:03ID:???0104nobodyさん
2007/12/06(木) 08:26:19ID:???0105nobodyさん
2007/12/08(土) 10:30:04ID:???IE6で見たらなぜかクラス一覧が表示されないんだが
これって漏れのPCだけ?
IE7とかFirefoxであれば普通に表示されるからそっちで見てるんだけど・・・
セキュリティ設定の問題かなと思って低めにしたけどやっぱ表示されねぇw
なんでや〜〜〜?
0106nobodyさん
2007/12/08(土) 11:38:27ID:???0107nobodyさん
2007/12/11(火) 11:02:44ID:???のeditのsaveの引数はなぜ
$this->dataではなく$this->data['Post']なのでしょうか?
0108nobodyさん
2007/12/11(火) 12:31:59ID:fmpEROAGタイトル:
<?php echo $html->input('Post/title', array('size' => '40'))?>
っていうのは $this->data['Post']['title'] に格納されるから。
ようは $this->data['Post'] ってのは Postモデルのデータってこと。
よくわからなければ まず pr($this->data); をやってみるとセクシーになるよ。
0109nobodyさん
2007/12/11(火) 15:27:06ID:???0110nobodyさん
2007/12/11(火) 15:43:20ID:???0111nobodyさん
2007/12/11(火) 15:53:50ID:???意図的に404エラー出したいときはどうすればいいですか?
AppController内で404エラーページを表示する共通のメソッドがあるんだけど
どうもうまくいかないっす
$this->cakeError('error404', array(array('url' => ???)));
こんな感じかなあという感じなんですけど
???の部分がわからない
$this->cakeError('error404', null);
とかにすると $param['url'] か $param['action'] がないっておこられてしまいます
デフォの404エラーページが表示できればいいんですけど
なんかいい方法ないですかあ?
0112111
2007/12/11(火) 15:55:13ID:???HTTPステータスコードが404にならないと思うので…
よい方法があればおたすけください…
0113107
2007/12/11(火) 15:58:30ID:???ありがとうございます。それは理解しているつもりなのですがaddの時は
$this->Post->save($this->data)
でeditの時は
$this->Post->save($this->data['Post'])
なのはどうしてでしょうか?実際$this->Post->save($this->data)でも
更新されるようですし。
0114nobodyさん
2007/12/11(火) 17:40:19ID:MudQMHo6うまくフレームワークとなじませられないというか・・・。
0115nobodyさん
2007/12/11(火) 18:05:21ID:???ソース見たらURLは単にメッセージ表示のために使われているだけみたいだから
こんなのでもいいんじゃないの? cake 1.2 pre-betaの場合。
$this->cakeError('error404',array(array('url'=>'アドレスバーに書いてあるURLミロ')));
0116111
2007/12/11(火) 18:17:07ID:???レスありがとうです
やっぱりそんな感じになりますかあ
AppControllerに書く場合、URLは $this->here とかでいいんでしょうか?
なんかしっくりこない気がするんですけど
他にもよい方法ありましたらよろしくおねがいします
0117nobodyさん
2007/12/11(火) 19:24:00ID:???無能
0118nobodyさん
2007/12/11(火) 21:21:49ID:???書き方の違いでしょ。
この例の場合はどちらでもOKだと思う。
二つ以上のモデルに格納するデータをフォームから送るなら
$this->dataにすべきだね。
0120111
2007/12/12(水) 00:43:10ID:???しかし決めつけはひどいな 別人だよ
>>117
おまえが無能だ
んで、フォーラムにでてるように array(array('url' => 〜)) をつかうとうまくいかない場合ある
array(array(action)) つかったほうがいい
しかし、この辺りがCakePHPはなんかいまいちスマートじゃないね
0121nobodyさん
2007/12/12(水) 13:47:30ID:fuv5QvzRcake2日目ではまってまっすん
0122nobodyさん
2007/12/13(木) 02:11:34ID:???0123121
2007/12/13(木) 10:54:35ID:???レスありがとうございます。
正規表現ではじくのは考えたのですが、NGワードをDBで管理してあとから追加や削除をできるようにしたいのです。
ヴァリデートに関数呼び出しなどを書く方法はあるのでしょうか?
言葉足らずですみませんです。
0124121
2007/12/14(金) 13:58:00ID:???validate() をオバーライドするか、別途関数を呼び出してチェックすればいいみたいです。
save()の第二引数に falseを指定すれば、save時にヴァリデートしなくなるようです。
0125nobodyさん
2007/12/14(金) 23:47:10ID:dPU6DaHz0126nobodyさん
2007/12/15(土) 02:49:30ID:???自分でModelに複雑なValidationを実装するのかな
0127nobodyさん
2007/12/15(土) 05:19:24ID:Ybu1PDKfActionScriptの方の使い方が難しくて、何かわかりやすいサンプルを探してるんだけど。
具体的にはFlexのMXMLとの連携のコードを全て公開してくれてるところ。
0128cWTrQzhwyu
2007/12/15(土) 05:32:32ID:???0129nobodyさん
2007/12/18(火) 02:17:35ID:???0131nobodyさん
2007/12/18(火) 11:36:32ID:???queryでSQL文が見えてた方が開発効率がよくね?
0132nobodyさん
2007/12/18(火) 19:39:14ID:???0133nobodyさん
2007/12/19(水) 02:24:25ID:???俺はすでにそれじゃだめだな。
CakePHPつかう以前からの話だが、
何かのデータを保存・・・時にほかのテーブルにも保存
なんて処理をやりたいことがある。
SQLでいえばトリガーでやるところなのだが、
トリガーはDBMSに依存してしまう。
そういうときにフレームワークで処理を割り込ませられると便利。
CakePHPでいうBehaviorの仕事だ。
0134nobodyさん
2007/12/19(水) 02:34:00ID:???SQL文の拡張のようなことをやっている。
たとえば・・・これは俺が実際に使っている例ではないんだが、
全文検索をするための構文はDBMSによって違う。
しかし、それがなんであれ,
$conditions = array('field' => 'FULLTEXTSEARCH ' . $keyword);
という風にFULLTEXTSEARCH キーワードを条件文に使用できる。
あとはBehaviorのbeforeFindで条件を調べて
DBMSにあわせた適切な構文に置き換えるだけ。
0135nobodyさん
2007/12/19(水) 11:09:58ID:???saveに渡す配列にフィールドのキーが存在しなければvalidationもされないし
データ更新もされないから気にしないでOK
0136nobodyさん
2007/12/19(水) 13:28:34ID:???フレームワークそのままの形だけの使い方をしている分にはいいんだけど
データ取得の命令が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]); //ページ情報
0137nobodyさん
2007/12/19(水) 19:37:24ID:nmvrwuDT例えば
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))));
とか試したけど、もう無理。
何か間違ってる?
0138nobodyさん
2007/12/20(木) 02:56:46ID:???テーブル名を複数形にしない時点で
自分で調べてなさすぎ感が伝わってきて
アドバイスしたい気持ちになれない。
01391/3
2007/12/20(木) 04:06:27ID: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件
入るよね。
01402/3
2007/12/20(木) 04:06:58ID:XdoaO4071.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件取り出されてしまうんですよ。
01413/3
2007/12/20(木) 04:07:32ID:XdoaO407$this->Blog->findAll()
でblogsテーブルの直下のhasManyは動的にアソシエーションできるんだけど、
そのさらに下のアソシエーションに関しては動的に変更できなくて悩んでるんだけど、
何か決定的に間違ってる?
普通は出来るもんなんだったら、
別のところで自分が途方も無いケアレスミスを犯しててたまたま出来てないだけだってわかるだけでも
対策考えれるからありがたいんですけど。
0142nobodyさん
2007/12/20(木) 04:10:41ID:???>>139の
> そいで最後に
> commentテーブルがCommentモデルでそれぞれ定義されてたとして。
は
> そいで最後に
> commentsテーブルがCommentモデルでそれぞれ定義されてたとして。
~~
の間違いです。
重ね重ねごめんなさい。
0143nobodyさん
2007/12/20(木) 13:00:08ID:rEyzQF0b0144nobodyさん
2007/12/22(土) 00:03:39ID:DskgbOKQダウソしようと思ったけど、有償なんだな
0147nobodyさん
2007/12/22(土) 12:56:47ID:???0148nobodyさん
2007/12/22(土) 13:17:51ID:???dom・i・na・tion
━━ n. 支配; 優勢; (pl.) 主天使.
do・na・tion
━━ n. 寄付; 献血, (臓器などの)提供; 寄贈物; 寄付[義捐(えん)]金; 【コンピュータ】シェアウェアの寄付金[使用料].
0149nobodyさん
2007/12/22(土) 16:00:24ID:???0150nobodyさん
2007/12/22(土) 18:20:28ID:???0151nobodyさん
2007/12/23(日) 03:33:51ID:???共有サーバーに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が機能しています。
どのように修正すれば良いのかご教授願います。
0152151
2007/12/23(日) 03:40:29ID:nRcoZlZo0153nobodyさん
2007/12/23(日) 03:44:49ID:w1dc6lHrRwriteBase /app → RwriteBase /cake/app
RwriteBase / → RwriteBase /cake
0154nobodyさん
2007/12/23(日) 03:56:58ID:nRcoZlZo返答ありがとうございます。
変更し、アップしてみたのですが、うまくいきませんでした。
(変更前と見た目に変化なし)
環境を追記します。
OS…Linux
Apache…1.3.37
PHP…5.2.3
MySQL…5.1.20
引き続きよろしくお願い致します。
0155nobodyさん
2007/12/23(日) 07:44:16ID:???なんじゃ、それ?
HTTPで公開してるのは、public_html ディレクトリだろ?
まず、そこに、.htaccessがなきゃ話にならんだろ。
さらに、RwriteBaseってのは、クライアント側から見えるURLを書く物で、まるで理解してない。
つか、Apacheのマニュアル読んでるの?
0156nobodyさん
2007/12/23(日) 08:29:31ID:nRcoZlZo色々な問題をごちゃ混ぜにして考えていたようです。
0から勉強しなおしたいと思います。
public_htmlにapp,cakeフォルダなどをアップし、app/webrootフォルダ内の
.htaccessに>>151のBの内容を追加したところ、
(多分)問題なく動作することを確認しました。
ご迷惑をお掛けし申し訳ありませんでした。
0157nobodyさん
2007/12/23(日) 08:41:22ID:???おい。
HTTPで公開してるディレクトリに、cakeディレクトリ以下は、"置かない"。安全性が落ちる。
"アップし"なんて書いてるとこ見ると、ローカルに開発用のHTTPサーバも持ってないのか?
それは、共有サーバを使ってる他の人にとって、"迷惑"。
0158nobodyさん
2007/12/23(日) 14:49:20ID:???0159nobodyさん
2007/12/23(日) 15:49:17ID:???0160nobodyさん
2007/12/23(日) 16:24:59ID: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
ローカルでテストしていました。
紛らわしい言い方をして申し訳ありませんでした
0161nobodyさん
2007/12/23(日) 16:26:57ID:nRcoZlZo○ドキュメントルート
0162nobodyさん
2007/12/23(日) 18:29:45ID:???しかも成功したのか
俺が間違ってるのか
0163nobodyさん
2007/12/23(日) 18:32:41ID:nRcoZlZoすいません、Rewriteでした。
最初の文章をコピペしてたのでずっとRwriteと書いていました・・
0164nobodyさん
2007/12/23(日) 18:51:21ID:???狐につつまれて(←何故か誤用)ただけだから
0165nobodyさん
2007/12/23(日) 19:41:40ID:???0166nobodyさん
2007/12/23(日) 21:14:17ID:???0167nobodyさん
2007/12/24(月) 01:16:59ID:???初心者が勉強するには挙動や仕組みが複雑すぎるし、
勉強すべきウェブアプリの流れが自分で組めない。(組まなくて良い)
0168nobodyさん
2007/12/25(火) 04:06:06ID:???0169nobodyさん
2007/12/25(火) 10:50:49ID:dm3PQI94わかる。でも、書いたあとのコードがわかりやすい。
フレームワークを使う前のコードなんて自分で書いたコードなのにゾっとする。
読めたもんじゃない。。。
0170nobodyさん
2007/12/25(火) 22:35:34ID:???位置から作るといちいち迷ってそれが占める時間が結構ある希ガス
0171nobodyさん
2007/12/26(水) 10:31:28ID:???通常、
AページでAテーブルの内容を表示(Aコントローラー+Aモデル)
BページでBテーブルの内容を表示(Bコントローラー+Bモデル)
というような感じで作ると思うんだけど、
CページでAテーブル+Bテーブルの要約内容を表示したい場合は、どうすれば?
Cコントローラーで、AモデルBモデルを使うというような考え方でいいのかな。
質問の意味が通じなそうスンマセン(´・ω・`)
サイトのトップページで、多テーブルの情報を表示させたいというような場合の話です。
0172nobodyさん
2007/12/26(水) 11:24:07ID:???var $uses => array('Amodel', 'Bmodel');
0174nobodyさん
2007/12/26(水) 12:26:56ID:???0175nobodyさん
2007/12/28(金) 00:04:04ID:???0176nobodyさん
2007/12/28(金) 01:37:12ID:???0177nobodyさん
2007/12/28(金) 02:04:26ID:???0178nobodyさん
2007/12/28(金) 09:49:34ID:???0179nobodyさん
2007/12/28(金) 09:55:56ID:???0180nobodyさん
2007/12/29(土) 15:34:55ID:???0181nobodyさん
2007/12/29(土) 15:45:50ID:???0182nobodyさん
2008/01/01(火) 02:04:43ID:???いったんわかってくるとサクサク作っていけるのが嬉しいね。
ただ、マニュアルは機能を網羅してるわけじゃないんだな。
マニュアルに載っていることが全て、だと思って進めてくと意外としょうもない所でつまずいたりしちゃうね。
まあこれはCakeに限った話じゃないけど。
0184nobodyさん
2008/01/04(金) 01:10:03ID:???マニュアルだけだと(特に1.1系)他のフレームワークに見劣りする。
1.2系はちょっと自分用に改造するとすごい使いやすい。
0185nobodyさん
2008/01/04(金) 13:24:08ID:???0186nobodyさん
2008/01/04(金) 14:28:39ID:???0187nobodyさん
2008/01/04(金) 14:59:45ID:???0188nobodyさん
2008/01/04(金) 21:12:38ID:yI22KOOz・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 の場所がかわってる(そのままでも動くが、気持ち悪いので変えた)
いまんとこ、こんな感じでした。
0189nobodyさん
2008/01/05(土) 10:59:20ID:???bakeで生成されるコードも伴って変更されてるといいな
0190nobodyさん
2008/01/05(土) 15:28:31ID:???>・何気に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と変わっていないと思うんだけど。
0191nobodyさん
2008/01/05(土) 17:30:26ID:???チェックされる(ポストされた)データが配列でわたるようになってる。
使いにくくなった。なんでだ?
0192nobodyさん
2008/01/05(土) 18:40:44ID:???$this->Post->del($id);
で、SQLエラーでちまったよ。
エリアスがユニークじゃない!とかいわれたよ・・・
どうしたもんかね?
0193nobodyさん
2008/01/07(月) 15:01:55ID:???モデルの _tableInfo変数 が _scema変数 に変わった
_scemaの構造も_tableInfoとちょっと違う
まあ、この変数は積極的に使うものじゃないけどね。
0194nobodyさん
2008/01/08(火) 12:06:39ID:???ってなっているけれど
コントローラー名がテーブル名だと、アクセスするときに変じゃない?
普通画面名とか、機能名とかつけるものだと思っていたんだけれど、
どうなんでしょう
bakeでviewを作成するときに、選択可能なリストにModelがでてくるけれど、
コントローラーだしてほしい
そういうものなのかなぁ
0196nobodyさん
2008/01/08(火) 16:24:57ID:???規約に従ったphpファイルを作ってアップロード、実行するとbakeされるように出来ないのかな。
0197nobodyさん
2008/01/09(水) 17:55:03ID:???え、url上の名前って簡単に変えられるの?
モデルの
var $name = 'Post';
ってところの名前変えれば出来るって事?
0198nobodyさん
2008/01/09(水) 18:08:04ID:???それはむしろモデルに対するテーブル名じゃまいか?
urlウンヌンは、好きな名前でアクション作れば良いかと。
0199nobodyさん
2008/01/09(水) 18:57:52ID:???コントローラで$usesを定義してやれば好きなモデルをいくつでも使うことができるから
極端な話、$usesさえあればコントローラの名前は任意で大丈夫。
つーか、コントローラ名=URL上の表記だから、コントローラ名は
アクセス側から分かりやすい名前にする方が重要だと思う。
正規化でテーブルが沢山増えた場合はなおさら。
で、$usesを定義しないとコントローラ名を単数形にしたモデルを自動で使う。
その時、PHP4はクラス名からモデル名を引っ張ってこれないから$nameを見てモデル名を決める。
$nameはその時に使う。逆に言うとPHP5以降は$nameは不要。
…だったと思うけど、情報古いかもしんないから注意してね。
0200nobodyさん
2008/01/09(水) 23:29:04ID:???前は、date型のフィールドなら日付選択のセレクトタグが出たんだが。
0201nobodyさん
2008/01/10(木) 21:31:14ID:???モデル使いたい場所で、
App::Import('Model', $model_name); //pre-betaではloadModel
$model = new $model_name();
$model->findAll();
とかやってるw
やばいかなぁ。
0202nobodyさん
2008/01/11(金) 00:37:03ID:edIhawVfちょいやばですね
0204nobodyさん
2008/01/11(金) 20:24:44ID:???0205nobodyさん
2008/01/12(土) 01:07:43ID:???コントローラ以外で、モデルを使う方法他に何がある?
0206nobodyさん
2008/01/12(土) 07:06:39ID:???0207nobodyさん
2008/01/12(土) 09:24:00ID:???それをBehaviorにしてBehaviorで使うこともありますし、
テーブルに保存されたデータをもとに値を返すComponentも考えられますし、
コントローラ以外のどこででも、モデルを使うことって考えられますよ。
0208nobodyさん
2008/01/12(土) 21:32:01ID:4ugQnDqA少なくとも
「早く開発できる」
も大切ですけど、
「規約に沿った開発」
を心がけた方が最終的には良いかと思いますが、いかがでしょうか。
0210nobodyさん
2008/01/13(日) 01:41:55ID:???こういうやつとは仕事したくないな。
汚いソースを読まされそうだ。
0211nobodyさん
2008/01/13(日) 10:00:42ID:???1つのアクションでしか使わないモデルを、
コントローラ全体から呼び出すのはどうなのかな?
あまり、変わらなければ、規約に沿ったほうがいいね。
0212nobodyさん
2008/01/13(日) 14:32:44ID:???さすがにテンプレートやヘルパーでモデル呼び出しはしないけど
ヘルパーのようにモデル同士が連携したくなる場合なんてざら。
開発規則で決めればコンポーネントからモデル呼び出しも十分
視野に入るだろ。
そもそもコントローラの責任範囲はあまりに広すぎる。
save()時に関連キーの値を意識しなきゃいけないとかアホだろ
モデルに任せとけよそんなもん。
0213nobodyさん
2008/01/13(日) 19:43:12ID:???本当にそう?
たとえば、xoopsなんかにある、”ブロック”
メインのページの左右に表示され、ページの中のコンテンツとは
直接関係無いような情報(もちろんデータはデータベースにある)を
表示するとき、それをどのように作る?
0214nobodyさん
2008/01/13(日) 19:47:23ID:???悪いことは言いたくないが、一つだけ言わせてくれ。
function foo($v1=null, $v2=null, $v3=null) {
if($v1がなんたらだったら) {
$v1 = $v2;
$v2 = $v3;
}
}
こういうコードはやめてくれ。引数とコードがわけがわからなくなる。
0216nobodyさん
2008/01/13(日) 20:39:16ID:???0217nobodyさん
2008/01/13(日) 21:12:12ID:???0218nobodyさん
2008/01/13(日) 21:52:00ID:???Cakeだからといって特別なことはございません。
0219nobodyさん
2008/01/13(日) 22:26:54ID:???トランザクションに関してはデータベースごとに構文が違うわけで、
データベースの違いを吸収するCakePHPには
当然トランザクションの機能があってしかるべきでは?
0220212
2008/01/14(月) 03:54:21ID:???http://bakery.cakephp.org/articles/view/transaction-behavior
0221nobodyさん
2008/01/14(月) 03:54:41ID:???0223nobodyさん
2008/01/14(月) 11:48:41ID:???しょぼーん
0224nobodyさん
2008/01/14(月) 13:10:50ID:???1.2はbakeでそこそこいけるぞ
0225nobodyさん
2008/01/14(月) 14:59:49ID:p06mFmgfcake1.2用って書いてあってサンプルコードまで載ってるのに、これ以上どうしろと。
0226nobodyさん
2008/01/14(月) 22:01:03ID:qwz7LRgA0227nobodyさん
2008/01/15(火) 02:37:42ID:???0228nobodyさん
2008/01/15(火) 11:58:53ID:???こういうの誰か作って配布してたりする?
0229nobodyさん
2008/01/15(火) 18:18:48ID:???0230nobodyさん
2008/01/15(火) 21:44:26ID:???0231nobodyさん
2008/01/15(火) 21:49:55ID:???利用者レベルじゃ使用できんだろ。
コードはいた後、コードいじらないと使い物にならないんだから。
0232nobodyさん
2008/01/16(水) 00:10:13ID:???例えば、「モデルが無いですよ」とかエラーを吐いてくれるとこで、作るべきファイル名やコードをブラウザが表示してくれてるけど、それを手動で作る代わりに「(デフォのでいいから)作成」ってボタンがあったら嬉しいじゃない?
0233nobodyさん
2008/01/16(水) 00:42:46ID:???0234nobodyさん
2008/01/16(水) 00:46:04ID:???0235nobodyさん
2008/01/16(水) 03:05:48ID:???0236nobodyさん
2008/01/16(水) 08:37:03ID:???0237nobodyさん
2008/01/16(水) 08:57:12ID:???まあそれによってフレームワーク自体が肥大するのは困るけど、これはそこまでたいした話じゃない。
0239nobodyさん
2008/01/16(水) 11:33:15ID:???0240nobodyさん
2008/01/16(水) 11:49:22ID:???app/config/bootstrap.php に今はベターっと書いてるんだけど
これだとアプリごとに書く必要があって かといってcake/bootstrap.phpに書いちゃうと
バージョン上げる時に忘れて上書きしちゃいそう
0242nobodyさん
2008/01/16(水) 12:14:38ID:???コンポーネントはいちいち利用宣言するのがめんどくさくて
ほとんどapp_controllerに書いちゃってるけど、まずいかな?
0243nobodyさん
2008/01/16(水) 14:48:27ID:???bootstrap.php で読み込ませてる
0244nobodyさん
2008/01/16(水) 15:53:09ID:???汎用的な関数は、app/config/bootstrap.php に書いてる。
app以下にあるし、空ファイルだし、そのために作られたファイルだろ?って思ってる。
汎用的なクラスは、vendersにおいて使ってるけど。
0245nobodyさん
2008/01/16(水) 15:56:29ID:???間にもう一層入れたい場合どうやる?
Controller
↑
AppController
↑
MyController
↑
FooController
このとき、
class FooController extends MyController
ってすると、MyControllerがいませんっていわれちゃう。
0247nobodyさん
2008/01/17(木) 10:34:58ID:???何で作る?コンポーネント?
このクラス、モデルデータを必要とするんだよね。
何で作ればいいんだろう?
0248nobodyさん
2008/01/17(木) 11:22:09ID:???vendors/oreore.inc.php に書いて
app/config/bootstrap.php から vendor('oreore.inc');
で読み込むことにしますた さんくす
0249nobodyさん
2008/01/17(木) 11:54:11ID:???app/config/core.php
define('DEBUG', 2);
この状態で、特定のページだけデバッグ情報を出さないようにって出来ないものかな?
1)XMLを出力するプログラム
2)それを受け取って処理するプログラム
1の方はもう出来上がってて、デバッグが出力されると構文が崩れて困る。
かといって、define('DEBUG',0);にすると、2の方の開発が困る。XMLは動的なものを使いたい。
0250nobodyさん
2008/01/17(木) 13:27:06ID:???App::import('Contoller', 'MyController'); //昔はloadController
class FooController extends MyController
ってすればいいんじゃないの?
0251nobodyさん
2008/01/17(木) 16:34:27ID:2woYNb+hヒント、
function beforeRender()
{
if ($this->layout=='ajax') Configure::write('debug', 0);
}
これでわかったら、スーパーひとしくんプレゼント!
0253nobodyさん
2008/01/17(木) 18:42:25ID:???詳しく聞いて無いから間違いかもしれないけど、
たぶんそれは設計ミス。
モデルとコントローラーとビューは疎結合にあるべき。
答えとしてはコンポーネントにモデルインスタンスを渡せば良いと思う。
ビューの部分のロジックは、ヘルパーに委譲。
本当にどうしてもどこでも使いたいなら、bootstrapに書くか、vendorで外部ライブラリとして読み込ませる。
0255nobodyさん
2008/01/18(金) 13:06:23ID:???DBのテーブル名やカラム名で溢れてくるんだけど何か間違ってる?
JAVAもRORも途中でめげたんで他との比較は出来ないけどMVCってこういうもんなん
0256nobodyさん
2008/01/18(金) 13:10:12ID:???0258nobodyさん
2008/01/18(金) 16:28:03ID:???調べるついでにマイナーだと思われるものを書いていくよ。
ざっくり調べただけだから間違いがあるだろうが許せ。
というか、誰か補足してくよ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 ・・・ ようはオブジェクトがどこからでも見れる? グローバル変数的なので使い方に注意。
0259nobodyさん
2008/01/18(金) 16:30:18ID:???フィールドの型に応じたフォームが自動で出てくるけど、
これって、ヘルパーがモデルを見てるってことだよね?
それって設計的にありなん?
0260nobodyさん
2008/01/18(金) 17:24:57ID:???結局無かった(しかもおそらく見つけられなかっただけでどっかにある)時の徒労感ってなかなかいいよね
英語弱いからなあ
0261nobodyさん
2008/01/18(金) 17:27:59ID:???リファレンス本欲しいな。
0262nobodyさん
2008/01/18(金) 19:38:04ID:/74lUS2rどういう風にやるのがスマートでしょうか?
0263nobodyさん
2008/01/18(金) 20:11:24ID:???多言語対応のあれなのかようやくわかったありがとう
0264nobodyさん
2008/01/18(金) 21:09:17ID:???0265nobodyさん
2008/01/18(金) 21:10:28ID:???どこみてんだ。
0266nobodyさん
2008/01/18(金) 21:40:04ID:???レス先走りすぎだ。
1.INSERT ... ON DUPLICATE KEY UPDATEしたいんですが、
↓
2.直接SQL文発行しる!
↓
3.標準でO/Rマッパー無いの?
煽るのならこの順番だろうがw 2番を飛ばすな
0267nobodyさん
2008/01/18(金) 21:43:48ID:???前どっかで同じことをいってたやつがいたな。
CakePHPか忘れたけど。
設計とか詳しくないからただの一つの意見だけど、
便利だからまぁいいんじゃないかなと思う。
疎結合っていう観点からはよろしくないのかもね。
Railsも同じ機能ついてたきがす
0268262
2008/01/18(金) 22:44:42ID:???0269nobodyさん
2008/01/19(土) 09:25:13ID:???「ケーキPHP」より「ケイクPHP」のほうが言いやすい
0270nobodyさん
2008/01/19(土) 10:53:43ID:???0271nobodyさん
2008/01/19(土) 11:44:58ID:???0272nobodyさん
2008/01/19(土) 11:57:21ID:???それともこれってなんか変な設計?
0273nobodyさん
2008/01/19(土) 12:10:58ID:???ファイル名:/app/views/test.php
<?php
class TestView extends View {
}
?>
あとは、コントローラで
var $view = 'Test';
と書く。
これって、公式な仕様だっけ?
0274nobodyさん
2008/01/19(土) 15:04:12ID:???requestActionでURL形式でコントローラを呼び出して
コントローラ経由でモデルにアクセスしてデータ参照?
どう考えてもパフォーマンス悪すぎるだろ?
ヘルパーにコントローラからモデルデータを直接与える方法がないから
一旦コントローラからビューにモデルの値をsetして、
ビューがヘルパーの関数を呼び出すたびに引数にデータをセットするのか?
何でこんなに結合度が高いんだ?
0275nobodyさん
2008/01/19(土) 16:45:02ID:???ヘルパーごときがモデル様のデータを直接欲しいとか100年早いぜ。
欲しいならコントローラさんに話を通して、コントローラさんに必要な分を最初っから揃えてもらいな。
ってコンポーネントさんが言ってた。
0276nobodyさん
2008/01/19(土) 17:32:36ID:???とか、
<?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タグだとソース上から見えちゃうしーー
0277nobodyさん
2008/01/19(土) 17:37:03ID:by/o8aKs日本人ならonigiriだと思うんだが
0278nobodyさん
2008/01/19(土) 18:27:05ID:???http://thumb.uploda.org/file/uporg1209264.jpg
0279nobodyさん
2008/01/20(日) 00:56:33ID:???> ヘルパーごときがモデル様のデータを直接欲しいとか100年早いぜ。
> 欲しいならコントローラさんに話を通して、コントローラさんに必要な分を最初っから揃えてもらいな。
それが簡単にはいかないんだよ。
ヘルパーがどのタイミングで作られるか知ってる?
コントローラのrenderの中でビューのrenderに処理がわたり
ビューがヘルパーを作っている。
つまりコントローラが動いているときは、ヘルパーはまだ生まれてないんだよ。
そしてヘルパーにはコントローラを知る方法が無い。
0280nobodyさん
2008/01/20(日) 03:36:20ID:???0281nobodyさん
2008/01/20(日) 07:04:04ID:???ソースとかある?
0282nobodyさん
2008/01/20(日) 16:34:25ID:???配列まみれで思った以上に見づらい書きづらいなこれ
テキストエディタでちまちま書いてるからarrayのどっかおかしくてもパッと見わかんないし
0283nobodyさん
2008/01/20(日) 18:12:40ID:???そりゃ呼出しごとに、関数呼び出しの前に、
URL文字列から関数判断して、
コントローラを初期化して使えるようにしてから
読んでいるんだから遅いでしょ。
0285nobodyさん
2008/01/21(月) 02:34:59ID:???0286nobodyさん
2008/01/21(月) 08:20:37ID:T79KO08khttp://groups.google.com/group/cake-php/msg/39c1ed08657b19c1
何かヒントあるかも。
0287nobodyさん
2008/01/21(月) 17:56:41ID:64B8kuvtrequestAction を 同じページで6箇所使ったら使い物にならないくらい重くなったよ。
できるだけ、使わないほうがいい。
それで僕は、設計を書き直しました。
0288nobodyさん
2008/01/21(月) 18:30:58ID:???Cake1.2にはConfigureというクラスがある。
これはいろんな場所(コントローラだったりビューだったり)で、
設定を読み書きできるクラス。読み書き先はファイルだ。
これの保存先をデータベースにして、普通のテーブルと同じように
設定できるようにする。そのとき、データベースを使ったConfigureを
どのように作るべきか?
普通に考えてConfigureの中身を変えるだけになるだろう。
つまり、Configureはグローバルに参照できObjectを継承しただけのクラス。
ゆえに、Configure内部で、App::import('Model', 'Configure');を
使って、内部でモデルのインスタンスを生成するしかない。
コンポーネントやヘルパーにしたり、
コントローラでモデルを渡したりと言ったことはしない。
クラスが直接モデルを扱う。
きっとこれが正しい設計だと思うが、反論はあるかな?
0290nobodyさん
2008/01/22(火) 04:15:11ID:???そのへん全部ヘルパーに押し込むのが理想だけどめんどい
0291288
2008/01/22(火) 18:12:32ID:???こういうときは普通こうするだろ!って煽りまってたのに!
結局データベースを参照する設定クラスのようなものは
フレームワーク的なやり方ってないのね。
App::importで直接モデルを操作するしかないのか。
あとログもテーブルに格納するようにしようかなとか
思っているんだが、なんかこれも同じ道をたどりそうだ。
0294nobodyさん
2008/01/22(火) 21:16:39ID:???Model->transactional = true;
にしてコミットしたいところで
Model->transactional = false;
にすればいいの?そんな簡単にはいかないか
0295nobodyさん
2008/01/22(火) 21:29:30ID:???一つ、または複数のモデルへの複数の操作を
一つにするものなのだから、
モデルにtransactionalなんてのが
あるのはおかしいと思いませんか?
0296nobodyさん
2008/01/23(水) 02:25:43ID:???0297nobodyさん
2008/01/23(水) 12:24:04ID:???じゃあ、商品の在庫が入った商品データモデルと
注文されたときに作られる注文データモデル。
注文データを作って在庫を減らすという処理を一つのトランザクション
にするとして、いったい誰がどのモデルをコミットするんだい?
そして、そのモデルがコミットするべきだという理由は?
0298nobodyさん
2008/01/23(水) 14:04:39ID:???0299nobodyさん
2008/01/23(水) 15:17:23ID:???無いよ?
0300nobodyさん
2008/01/23(水) 15:55:49ID:???association使えって事だろう
0301nobodyさん
2008/01/23(水) 16:07:07ID:z/2JwMmbはずかしながら comit とか考えたことないな。
データばぐらなくない?テキストファイル、CSVデータなら書き込んだりするとバグるときあるんで
ファイルロックはするけど。
0302nobodyさん
2008/01/23(水) 16:18:03ID:???0303nobodyさん
2008/01/23(水) 16:18:45ID:???0305nobodyさん
2008/01/23(水) 19:01:29ID:???使ったこと無いの勧めて悪いけど これでも使ってみれば
Transaction behavior | The Bakery, Everything CakePHP : Articles
http://bakery.cakephp.org/articles/view/transaction-behavior
0306nobodyさん
2008/01/25(金) 20:52:16ID:???この作業がはてしなくつまらん…
0307nobodyさん
2008/01/26(土) 01:02:57ID:???極端に表示に時間がかかるようになってない?
俺が何か悪い事しているのかなぁ?
ちょっとコアいじってるし。
0308nobodyさん
2008/01/26(土) 11:36:05ID:???0309nobodyさん
2008/01/26(土) 20:23:58ID:???1.2で標準搭載されたわりには(日本語)情報が少ないような気がするんだけど…
"1.2のAuthComponent" フォーラム - CakePHP Users in Japan
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=706&forum=14&post_id=1780
0310nobodyさん
2008/01/26(土) 21:15:38ID:???なんでだろ?特に使わない理由があったわけじゃないんだが、
認証=顧客管理機能の一部として、顧客管理機能を作っていたら
結果的に組み込んでしまったって感じ。
突き詰めると、データベースにあるキーにマッチするかどうかの判定だけだしね。
会員の登録、退会、パスワード再発行などの機能にくらべればたいした事じゃないし。
0311nobodyさん
2008/01/26(土) 21:24:09ID:???この辺もコンポーネントであったりするの?
0312nobodyさん
2008/01/26(土) 21:28:19ID:???0313nobodyさん
2008/01/26(土) 21:38:31ID:???0314nobodyさん
2008/01/26(土) 21:42:24ID:???0315nobodyさん
2008/01/26(土) 21:57:48ID:RSZTbZiz俺の場合全てにおいて時間かかる。
$hoge = '';
ってやっとけばエラーでないからこうしとけばいいんじゃない?
0316nobodyさん
2008/01/26(土) 22:02:53ID:???やっぱりそうなんか。
pre-beta以前はこんなに時間がかからなかったんだけどねぇ。
> $hoge = '';
> ってやっとけばエラーでないからこうしとけばいいんじゃない?
俺は基本的に変数はちゃんと宣言するんだけど、
問題は間違って$hogeを$hageとか書いちゃった場合。
ケアミスバグなんだが、そのために数十秒無駄になるorz
0317nobodyさん
2008/01/27(日) 00:37:27ID:???普通のソフトだと、ベータテスト段階まで来たらバグ取りが主で、
大きな仕様変更は無いんじゃないかと思ってるんですけど、
Cakeはどうなんでしょう?
0318nobodyさん
2008/01/27(日) 02:53:40ID:???0319nobodyさん
2008/01/27(日) 13:39:39ID:HXUAcytA自分はpre-beta 以前からも時間がかかった・・・。
やっぱりキャッシュ機能は必須なのかな。
>>317
目だったバグはないと思うよ。今使ってるけど。
しいて言えば html ヘルパーが フォームヘルパーになったりしていてバリデータエラーの
取得方法が 1.1 と変わっているのでそこが迷うくらい。
0320nobodyさん
2008/01/27(日) 14:20:46ID:???さっき落とした状態の1.2でやってみたんだけど、
変数宣言していなくても時間がかかることはなかった。
きっとどこかで何かをやっているのだろうがソースは会社なのでw
そういやバリデーション部分でひとつ不満が。
たとえば、1から5までの値を受け付けるバリデーションを作ったとして、
エラーメッセージを、「1から5まで数値を指定してください。」って
表示することはできないよね?
もちろん、1から5までという数値はパラメータで変更可能。メッセージも同じく。
0321nobodyさん
2008/01/28(月) 01:30:21ID:???Router::connect('/', array('controller' => 'pages', 'action' => 'display'));
て設定してる時にクッキー消して(use_trans_sid onで)
http://myapp/?CAKEPHP=e233bd9c1facda8084d8ba2f2226eb60 でアクセスすると
Error: CAKEPHPe233bd9c1facda8084d8ba2f2226eb60Controller could not be found.
そんなコントローラーねえよって怒られちゃう
Router::connectの書き方誰か教えてくらさい
0322nobodyさん
2008/01/28(月) 12:43:25ID:???クッキーを使っている場合と同様のデータの持ち方に
変換すればいいと思ったがやり方しらねw
0323321
2008/01/28(月) 22:42:45ID:???0324nobodyさん
2008/01/28(月) 23:44:38ID:???0325316とか
2008/01/30(水) 12:21:18ID:???どうやら、デバッグ機能としてエラー発生時に
わかる範囲すべての変数を出力しているみたい。
だからモデルとかヘルパーとかいろいろ使っているほど遅くなる。
/cake/lib/debugger.php の __outputの以下の行をコメントアウトすれば
時間かからないようになる。もちろんデバッガ機能は落ちるけど。
foreach ((array)$kontext as $var => $value) {
$context[] = "\${$var}\t=\t" . $_this->exportVar($value, 1);
}
0326nobodyさん
2008/01/31(木) 03:14:54ID:???beta使ってるんだけど、HTMLは良くても、rssの場合だとFFでエラーが出てしまう…
あるhelperの最後の?>のあとに改行が入っていたせいで、それが出力されていたみたい。
0329nobodyさん
2008/01/31(木) 17:50:39ID:???0331321
2008/02/01(金) 03:13:35ID:???最新のbranchならfixされてるよ って開発者のレスがついて
最新のbranchにしたけど解決しなかった
んでそのまま放置されてる 今のところ以上
0332nobodyさん
2008/02/01(金) 17:28:50ID:???基本的にclickで動作するように作られているからmouseoverで
動作させるためにはコアに手を入れなきゃいけなくなると思うんだけど。
0334nobodyさん
2008/02/01(金) 21:05:31ID:???わざと機能を制限しているので逆に使いやすいかもしれない。
自分でライブラリ作っててわかるけどあれもこれも設定できるようにすると
逆に使いづらくなるからね。
0336nobodyさん
2008/02/02(土) 00:57:26ID:???簡単に一般的な大多数の開発をサポートする事を目標としてるんだろうし。
どうしてもって言うならコンポーネントとか作ればいいんじゃね
標準で対応するには一般的じゃないって事だと思うが
0337332
2008/02/02(土) 19:02:48ID:???アクションがあるというのはけっこう使うと思うけどなあ…
しょうがないから自分で作ってやってるけど。
0338nobodyさん
2008/02/07(木) 12:02:24ID:???良くある説明ページが
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
0339nobodyさん
2008/02/07(木) 12:03:02ID:???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);
}
}
0340nobodyさん
2008/02/07(木) 12:03:45ID:Ja8AUMIGstartCase/endCaseで足りると思うんだが、setUp、tearDownは何の為に使えばいいのだろう?
で、まだ良く調べていないのが、fixturesで追加したテーブルがどうなるか。
動きを見てみると、startTestが実行する直前に毎回リセットされてるようだ。。
だからstartTest前にCREATEしてendTest後にTRUNCATEしているようだが・・・
こういうレベルでちゃんと説明しているところがほしい。
0341nobodyさん
2008/02/07(木) 12:42:55ID:???0342nobodyさん
2008/02/08(金) 15:28:07ID:???0343nobodyさん
2008/02/08(金) 17:25:37ID:???こっちがあるよ。
0344nobodyさん
2008/02/08(金) 19:11:40ID:???商品をカートに入れるとカートの画面に飛ぶ。
そこからログインをクリックしてログインページへ。
ユーザー・パス入れてログイン。
そしたらカートの画面に戻っている。
そして状態でもカートに商品は残ったまま。
ログアウトボタンをクリック。
そしたらカートから商品は削除されている。
(当然この一連の処理にクッキー・セッションが使われている。)
という一連のテストを自動化できちゃったよ。
(一度書いたら何か修正しえてもそれを実行するだけ)
0345nobodyさん
2008/02/09(土) 00:52:29ID:???0346nobodyさん
2008/02/09(土) 14:25:58ID:???dreamweaver cs3 使ってますよ。
やっぱりこれが最強じゃないですかね。
プログラム、デザインの両方に特化していますので。
0347nobodyさん
2008/02/09(土) 17:09:18ID:???0348nobodyさん
2008/02/09(土) 23:16:53ID:???0349nobodyさん
2008/02/10(日) 01:04:56ID:???って事は人気のあるスポーツはどんどんレベルが落ちてるんだな
0350nobodyさん
2008/02/10(日) 01:17:48ID:???レベルが下がってるよ。スポーツは
0351nobodyさん
2008/02/10(日) 01:37:18ID:???部外者からみてもピラミッドが見えるようにすればいい。
0352nobodyさん
2008/02/10(日) 14:24:03ID:???こんなリレーションなんですが、A->findAll()すると、Bしか付いてきません。
B->findAll()とすると、Cが付いてきます。
A->findAll()でB,C一緒に持って来たいのですが、どのようにしたらよいのか分かりません。
どなたかヒントをください。
0353nobodyさん
2008/02/10(日) 14:24:47ID:???0354nobodyさん
2008/02/10(日) 14:31:15ID:???A->findAll("","","","","",'3')
これでいけました。
0355nobodyさん
2008/02/10(日) 14:37:22ID:???なるほど。なんか納得。
web上ではプロは目立たず素人ばっか目立つから変な感じに見えるのか。
0356nobodyさん
2008/02/10(日) 15:35:17ID:???ごくわずかでそういうものに手を出す人は
詳しい人が多い。
実際は、使う人の問題なのに、
言語の問題といいはるRuby凶なんてのがいたな。
0357nobodyさん
2008/02/11(月) 00:25:02ID:???自分が何か情報を出すとライバルに盗まれるかも、とか足を引っ張られるかも、とか思ってるんでしょ。
もうちょっと余裕のある人はちゃんと次を育てていける。
いきなり素人が…とか言い出したりしないだろ普通。
0358nobodyさん
2008/02/11(月) 00:28:41ID:???新人には仕事教える立場だし。
0359nobodyさん
2008/02/11(月) 02:35:25ID:???ネットに限って言えば、プロな人がいろいろ露出するのって、ほぼ趣味なんじゃないか。
PHP界隈が、趣味でやるほどの魅力がない、仕事用の言語って感じだからじゃないの?
0360nobodyさん
2008/02/11(月) 02:54:33ID:???言語そのものが目的だからなw
0361nobodyさん
2008/02/11(月) 03:20:56ID:???0362nobodyさん
2008/02/12(火) 08:45:57ID:???一括で更新とかするSql文とか作ってるわけじゃないの?
0364nobodyさん
2008/02/13(水) 00:39:35ID:jaUT9mg5単体で使える共用のビューを作りたい時はどうすればいいの?
app/views/common/common.ctpみたいな感じ
0366nobodyさん
2008/02/13(水) 02:07:27ID:???0367nobodyさん
2008/02/13(水) 20:01:16ID:jaUT9mg5どうもありがとうございます
0368nobodyさん
2008/02/14(木) 11:30:58ID:???→最後にOKで処理実行のようなページを作るにはどうしたらいいの?
ページごとにエラーチェックしたり、前の入力項目の値を元に
次のページを決めたり、想定外のページ変移に対応したりもしたい。
0370nobodyさん
2008/02/14(木) 16:32:15ID:???まあ今はaction一つでやってるんだけど。
なんか一つにごちゃごちゃあって見にくいなぁと
それにページ間での値の参照・共有したいし
なんか良いやり方無いのかなぁ?
0371nobodyさん
2008/02/14(木) 16:35:18ID:???0373369
2008/02/14(木) 16:55:00ID:???actionも1個でやる。controller側ではページ分割されていることを意識しない。
1ページ目のpostは、2ページ目以降の項目が未入力と見做してエラー扱い。
表示の調整をviewでやる。
まあ思い付いただけなんで上手く行くかは分かりません。
0374nobodyさん
2008/02/14(木) 18:23:10ID:???一ページ目入力、ニページ目入力、三ページ目入力・・・してる途中で
一ページに戻る、一ページ目訂正、
二ページ目はさっき入れたのが表示されているからそのまま次へ。
三ページ目入力
みたいな。
0375nobodyさん
2008/02/14(木) 18:27:55ID:???> セッションでデータ保持して、ページ移動はredirectとかすればいいんじゃね
汎用的過ぎて参考にならないよw
ほぼすべてのウェブアプリはセッションかデータベースにデータ保持して
ページ移動はredirectとか使っている。
0376nobodyさん
2008/02/14(木) 18:33:04ID:???0377369
2008/02/14(木) 19:39:04ID:???マイナス1ページはプラス1ページと同じだから問題ないと思うけど、
ページを飛ばすのは処理増やさんといかんなあ。
入力値でページ分岐もややこしそうだ。
あと、未入力エラーを出すか出さないかの判断も必要か。
0378nobodyさん
2008/02/14(木) 21:58:46ID:???いかに管理しやすくするかということかな。
PHP5だと普通にインスタンスをセッション保存できるから、
複数ページで1インスタンスを共有というのもありでしょう。
0379nobodyさん
2008/02/15(金) 04:03:48ID:???もっと普通のウェブアプリ作れ。
0381nobodyさん
2008/02/15(金) 06:47:51ID:???セッションでデータ保持するのはバカだろ
0383nobodyさん
2008/02/15(金) 09:08:38ID:???0384nobodyさん
2008/02/15(金) 10:10:41ID:???いや、Cakeならそのケースでどうするかということで
フレームワークによってセッションの扱いは少しずつ異なるし。
0386nobodyさん
2008/02/15(金) 15:43:58ID:???俺ほぼ全部を受け渡してるけどな。
だってIDのみだったら他の情報がを表示するときとかっていちいちDBから拾ってくるの?
まぁ、変更するときはDBを更新する必要があるんで接続はするだろうけど。
0387nobodyさん
2008/02/15(金) 15:56:24ID:???そのくらいいいじゃん。
0388nobodyさん
2008/02/15(金) 16:55:19ID:???基本的に大量データを引っ張てくるキーだけ保存するもの
0389nobodyさん
2008/02/15(金) 16:59:50ID:???いちいちDBから拾うのが基本
セッションは会員IDなど必要最小限のデータだけ入れるべき
データ大量に保存して持ちまわすものじゃない
0390nobodyさん
2008/02/15(金) 17:01:59ID:???セッションについて何もわかってないみたいだ
0391nobodyさん
2008/02/15(金) 17:04:23ID:???0392nobodyさん
2008/02/15(金) 17:05:37ID:???0393nobodyさん
2008/02/15(金) 17:12:24ID:???セキュリティ的にもやばいし
ページの前に戻ると不具合がおこりやすい
常に大量データ持ちまわすことはメモリ、CPUに負荷がかかる
0394nobodyさん
2008/02/15(金) 17:14:11ID:???0395nobodyさん
2008/02/15(金) 17:18:54ID:???ページまたぎ処理はパラメータで引き継げよ
0396nobodyさん
2008/02/15(金) 17:27:06ID:???>セキュリティ的にもやばいし
どういうとこが?セッション固定化とかは別の話だし
>ページの前に戻ると不具合がおこりやすい
具体的にどんな不具合?
セッションでフロー管理してるからhiddenよりも厳密にできたりするんだけど
>常に大量データ持ちまわすことはメモリ、CPUに負荷がかかる
大量っていっても、多くても数kとかだし。
何かしらのキーで毎回ストレージから取得するのも処理コストあるよね
0397nobodyさん
2008/02/15(金) 17:32:39ID:???俺はセッションに入れる派。
0398nobodyさん
2008/02/15(金) 17:47:48ID:???yahooなどの超有名サイトほど、ログイン処理など
きわめて便利でないとこ以外はセッションを使ってない
0399nobodyさん
2008/02/15(金) 17:48:37ID:???0400nobodyさん
2008/02/15(金) 18:01:38ID:???データの引継ぎが途中で止まる
hidddenにデータがはいってないので
最初からページ移動のやりなおし
0401nobodyさん
2008/02/15(金) 18:13:03ID:???hiddenは値をいくらでも改竄できるからどうも・・・。
それすると挙動がおかしくなるサイトもあるし。
まぁ、それはそこの実装者が悪いだけなんだけど。
今のところセッションの方が生産性高いから、セッションで実装しちゃうな〜
0402nobodyさん
2008/02/15(金) 18:16:11ID:???セッション多様は開発者が楽するためのもので
サイト運営者、利用者にとってセキュリティリスクでしかない
0403nobodyさん
2008/02/15(金) 18:24:00ID:???0404nobodyさん
2008/02/15(金) 18:49:34ID:I3wnpJfD0405nobodyさん
2008/02/15(金) 19:08:46ID:???リクエストされたパラメータが改竄されていないかどうかをチェックするということか?
そんなことをするならばセッションにデータを格納したほうが効率が良いだろう。
悪意あるリクエストによってサーバセッションの中身を改竄するのは、
パラメータを書き換えるよりは困難だ。
他人のセッションを乗っ取ったり、MITM攻撃などでの手法はまた違う議論。
セッションを使おうが、パラメタを使おうが、適切な処理を行わなければ
どちらもセキュリティリスクになる。
どちらの方法も処理次第では脆弱になりうる。
逆に言えば、どちらの方法でも適切な処理を行えば十分安全になる。
ここでいう*十分安全*という定義はサービスの内容によって異なる。
0406nobodyさん
2008/02/15(金) 19:10:27ID:???具体的に指摘してやるからコード晒してくれ
0407nobodyさん
2008/02/15(金) 19:39:23ID:???他はログインID引き回すぐらいかな
ちなみにCAKEのデフォルト通りにIPでも(自動で)チェックしてるからドコモの人はさよならな俺のサイト
0408nobodyさん
2008/02/15(金) 20:04:49ID:???具体的に?
いや、だから、あるアクションでセッションにデータ入れて関連する他のアクションで参照するっていう、ほんとそのまんま。
コード書くまでもない。
0409nobodyさん
2008/02/15(金) 21:21:34ID:Q8bQtypzhiddenだと改ざんされてしまうし・・・。
けど、何でもかんでもセッションにってのは確かに気持ち悪いわな。
0410nobodyさん
2008/02/15(金) 21:43:28ID:???確認画面の時にバリデートして、DB登録直前にまたバリデートって面倒じゃない?(hidden値改竄の可能性があるから)
セッションだったら確認画面でセットしたデータがDB登録の時になって変わることがないからいいんだけど
0411nobodyさん
2008/02/15(金) 22:23:55ID:???個人的には、セッション変数を使うのが良いと思うが、
セッション変数は手軽に増やせるので、コードの質を低下させるのを気をつけたい。
例えば、index.phpですべてのリクエストを受けて、
$_SESSION['action']で場合分けみたいなコードを編集したことがあるけど、
$_SESSION['action']はsession_start()さえしておけば、コードのどこでも変更できるので、
きちんと規約を決めておかないと副作用で死ぬ。
フレームワークに期待するのは、そういう規約の部分なんだけど。
0412nobodyさん
2008/02/15(金) 22:28:43ID:???Javascriptからしか参照されないJSONで、
ユーザ固有のデータを出すときに、いちいちPOSTしなくて良い点。
遷移の上で孤立したアクションでユーザ固有のデータを使える。
0413nobodyさん
2008/02/15(金) 22:30:54ID:???たとえばセッションのサイズが1MBになったら、
データ読み込みに時間がかかるだろ?
↑
反論
ページ移動するたびに、
1MBものデータをhiddenでクライアントに転送し
それをまたサーバーに送信するようなことをしたら
もっとパフォーマンス悪いだろ?
0415nobodyさん
2008/02/15(金) 23:02:40ID:???0416nobodyさん
2008/02/15(金) 23:05:36ID:???セッション=ファイルなわけで、ファイルに保存するか、
データベースに保存するかの違いしかないんだが・・・
0417nobodyさん
2008/02/16(土) 00:07:09ID:???セッションIDのみでデータベースから読み出して処理するのがベストなのですか。
勉強になりました。ありがとうございます!
0418nobodyさん
2008/02/16(土) 00:20:43ID:???それで終わりだなw
0419nobodyさん
2008/02/16(土) 02:31:23ID:???0420nobodyさん
2008/02/16(土) 02:42:17ID:???なんかDBのデータ(ユーザデータとか)を全部セッションにぶちこむかどうかの議論と勘違いしてるのがいるな
途中経過のデータをセッションに入れるのはセキュリティ的によくないとか、セッションにはログインIDしか入れちゃいかんとか、その理由を述べろよ
0421nobodyさん
2008/02/16(土) 03:28:41ID:???0422nobodyさん
2008/02/16(土) 03:33:13ID:???無駄という意味か?w
0423nobodyさん
2008/02/16(土) 08:57:57ID:???大手を含め全員一致の答え、
ページ移動でもhidden内容を何でもかんでもセッションに詰め込むのは問題
・セッション変数の重複関係でバグ
・ページ移動中に他のサイト見に行ったりしたとき
・セッション変数が開放されないことによるバグ
・セッション切断による、変数の維持ができないバグ
0424nobodyさん
2008/02/16(土) 09:28:46ID:???バグが問題なだけ
>・ページ移動中に他のサイト見に行ったりしたとき
ページ移動中に他のサイト見に行ったりしたとき、
hiddenだと入力途中のデータ消えるバグ
> ・セッション変数が開放されないことによるバグ
バグが問題なだけ
> ・セッション切断による、変数の維持ができないバグ
セッション切断したのに、変数が維持されるバグ
0425nobodyさん
2008/02/16(土) 14:40:12ID:???しかも致命的バグを生む可能性が高いのはセッション
0426nobodyさん
2008/02/16(土) 14:50:25ID:???>セッションは必要最小限で使えというのは大手を含め全員一致の答え
なんで大手代表できるの?全員って?
ここの書き込み見るだけでもセッションでやってる人いるよね。
まぁせまい範囲だけど、知り合いとか知ってる会社とか、セッションで実装してるとこも多々ありますよ。
>セッション変数の重複・セッション変数が開放されない
これはバグじゃなくて、これに対処するコードを書かなきゃいけないっていうセッションのデメリット。
逆にhiddenのデメリットはhtmlに埋め込まなきゃいけない、改竄に対処するコードを書かなきゃいけないってことかな。
>・セッション切断による、変数の維持ができないバグ
セッション切断されたら変数の維持がどうのこうのじゃなく処理自体継続できない。ログアウトされるから。
ログインがないシステムだったらhiddenのほうがこの問題にはちゃんと対応できるね。
0427nobodyさん
2008/02/16(土) 14:53:57ID:???0429nobodyさん
2008/02/16(土) 15:05:46ID:???afterFindが呼び出されないバグがあるな。
behaviorで文字コード変更してたら文字化けした。
だれか報告してきてくれ。
find('count')はafterFindを呼び出す例を思いつかないが
呼び出したほうがいいのだろう? たぶん。
0430nobodyさん
2008/02/16(土) 15:07:33ID:w7he1Bjbいかに楽できるのかを考えるのが(効率の)いいプログラマなんだと思うんだが
どっちのメリット・デメリットも理解した上でデメリットに対応し、自分の楽なほうを選んでるんだからいい
何の説得力も説得材料もないそんなことしか言えないお前のほうがよっぽど低脳だ
0431nobodyさん
2008/02/16(土) 15:28:00ID:???じゃあなんでyahooはページ移動にセッション使ってないんだよ
効率悪いプログラマの集団かw
yahooにはPHP創始者もエンジニアとしているんだけどなw
0432nobodyさん
2008/02/16(土) 15:35:42ID:???やっぱり能力の低さがコンプレックスになってる奴は違う
0433nobodyさん
2008/02/16(土) 15:37:13ID:???0434nobodyさん
2008/02/16(土) 15:38:25ID:???yahooにとってはhiddenのメリットのほうが大きかったってことだろ
ちなみにデメリットの対処を考えると実はセッションの方が楽ではない
>yahooはページ移動にセッション使ってない・PHP創始者もエンジニアとしている
これは何の技術的理由にもならないことが分からんのか?
っていうか継続データのやり取りにセッション使ってないって保証はどこにあんの?
0435nobodyさん
2008/02/16(土) 15:40:00ID:???納品さえすれば、後のことは関係ないみたいなのばっか
セキュリティ0
0436nobodyさん
2008/02/16(土) 15:41:09ID:???楽天の会員登録ではセッション使っているようだが?
https://www.rakuten.co.jp/myrakuten/login.html
0437nobodyさん
2008/02/16(土) 15:43:44ID:???セキュリティもどちらが上というわけじゃないのに、
たまたまYAHOOがやっていたということを根拠にするのやめてくれない?w
ちゃんと自分の意見を言おうね。
0438nobodyさん
2008/02/16(土) 15:45:31ID:???やり方としてはどちらもありだし、
セキュリティもどちらが上というわけじゃないのに
---------------------------------------
同意
0439nobodyさん
2008/02/16(土) 15:53:34ID:???セッションよりもhiddenの方が安全に決まってるだろうがw
セキュリティで危険なのってセッション絡みが多い
hiddenで危険なのって聞かないというか
セッションだろうが最初の画面はhiddenで飛ばすし
0440nobodyさん
2008/02/16(土) 15:56:02ID:???最終画面でも総チェックした方が
セキュリティは上
セッションは書き換えられたらおしまい
0441nobodyさん
2008/02/16(土) 15:58:36ID:???おまえらもクッキーにしようぜ
0442nobodyさん
2008/02/16(土) 16:03:51ID:???他のページ行ってもどってきたらデータを引き継げない。
0443nobodyさん
2008/02/16(土) 16:04:24ID:w7he1Bjb>セッションよりもhiddenの方が安全に決まってるだろうがw
うん、だからhiddenの方が安全な理由を教えてよ
「hidden セッション」とかで検索するとhiddenのほうが否定的なんだけど
>>440
>セッションは書き換えられたらおしまい
これはセッションを(少しでも)利用してるシステム全部に言えること
継続データをhiddenにするかセッションにするかとは全く論点が違う
0444nobodyさん
2008/02/16(土) 16:05:52ID:???お前の言うことと「ipa.go.jp」のどちらを信じるか言うまでも無いw
hiddenは危険(セッション変数を利用しよう)
http://www.ipa.go.jp/security/awareness/vendor/programming/a01_05.html
0445nobodyさん
2008/02/16(土) 16:33:40ID:???安全なWebアプリ開発の鉄則 2004
http://www.soi.wide.ad.jp/class/20040031/slides/09/
2006.4.4「CSRF」と「Session Fixation」の諸問題について
http://www.ipa.go.jp/security/vuln/event/documents/20060228_3.pdf
安全なWebアプリ開発の鉄則 2006
http://www.nic.ad.jp/ja/materials/iw/2006/proceedings/T21.pdf
0446nobodyさん
2008/02/16(土) 17:02:33ID:???0450nobodyさん
2008/02/16(土) 17:52:02ID:???0451nobodyさん
2008/02/16(土) 21:16:52ID:???hidden=オナニー
セッション=セックス
0452nobodyさん
2008/02/16(土) 21:29:42ID:???個人的な雑感で言えば、セッション派だなぁ。
セッションってそもそもクライアントの送ってくるデータが信用できないから
渋々サーバ側にデータ置いて、金庫の鍵だけやんよって話なんだから(違ったらごめんね)、
データの信用度で言えば当然セッションの方が上だと思うよ。
たとえば、証券会社の登録フォームとかはセッションの上に
さらに短めの有効期限が切ってあって、入力ステップに時間が
空くと別人の入力と判断して強制的にやり直しするって形を取ってる。
要するにさ、hiddenってブラウザの画面上にレンダリングされないってだけで
普通のテキストエリア置いてあるのと全く変わりないんだから、
突っつきやすさから言ったらhiddenのが危なくないかな。
反論ぷりーず
0453nobodyさん
2008/02/16(土) 21:32:14ID:???サーバ側のファイルまで信用ができなくなるってのはやばい。
でもそれってもう入力フォームでなんちゃらって話じゃないよね。
0454nobodyさん
2008/02/16(土) 21:56:28ID:???0455nobodyさん
2008/02/16(土) 22:03:29ID:???同一セッションで、複数のウインドウ(タブ)を開かれて同じ画面を
操作された場合への対処をどうするかとか、
セッション上のデータのクリアタイミングとかをちゃんと考えてあるなら
別にセッションでもいいんだけど。
hiddenだからって、少なくとも破壊的操作が入るところではデータの
妥当性検証をするのは当たり前の話で、それをやっていないのが論外なだけ。
で、システム形態だとか対処コストを考えて実装方式を決めてください。
0456nobodyさん
2008/02/16(土) 22:05:42ID:???http://www.ipa.go.jp/security/awareness/vendor/programming/a01_05.html
これでhiddenが危険といわれてもw
会員ログインページをhiddenで判別してるんだろ?
こんなことするやつおらんやろ
テーマにしてるのは
会員ログインはセッションだけど
それ以外の確認画面や単純なページ移動でセッション多様するのを議論してる
ページ移動にかかわる、どうでもいいデータまでもセッションていうのが糞
0457nobodyさん
2008/02/16(土) 22:14:00ID:???> hiddenだからって、少なくとも破壊的操作が入るところではデータの
> 妥当性検証をするのは当たり前の話で、それをやっていないのが論外なだけ。
hiddenでデータを渡したらページごとに
同じチェックしないといけないじゃん。
そういうのは面倒だろう。
それをフレームワークで良い感じに楽にやる方法は無いのか?という話題。
0458nobodyさん
2008/02/16(土) 22:15:07ID:???どうでもいいデータまでセッションにしてると
一時的ではあってもキャッシュたくさんになるわけよ
アクセス数多いサイトだと
生産性高くても負荷的にどうなんだよ?
0459457
2008/02/16(土) 22:16:20ID:???hiddenで表示する必要もあるね。
ここんところ、CakePHPでのスタンダードなやり方ってどうすんのさ?
0460nobodyさん
2008/02/16(土) 22:22:22ID:???構築経験も小規模サイトの経験しかない
0461nobodyさん
2008/02/16(土) 22:24:24ID:???クッキー対応してないプラットフォームを無視してるよな
0463nobodyさん
2008/02/16(土) 22:30:43ID:???CakePHPのスレだからここ。
CakePHPでのやり方を聞くのは普通なわけ。
すでに他でやったことあるけど、それは自力でやっているだけなの。
フレームワークとはそれを簡単に提供するものなわけ。
あんたの言っていることは「CakePHPでPOSTした情報をどうやって取得するんだ」
という問い対して、$_POSTで取得すると答えているようなもん。
それはCakePHPのやり方ではない! (>>460へのレスでもある)
言っている意味。わかる?
0464nobodyさん
2008/02/16(土) 22:32:38ID:???煽りしか返ってこないとき、
その機能は無いと思ったほうがいいよw
無いと答えるのが悔しくて煽りに走る。
もしくは>>460が知らないだけ。
0465nobodyさん
2008/02/16(土) 22:41:28ID:???負荷的な意見には納得せざるおえない
楽だけ優先しすぎて負荷的な要素を一切考えないというのはおかしい
CakePHPがページ移動にセッションで渡せという仕様にもなってないわけだし
1.2から標準装備されたページ送りみても
セッションじゃなくてパラメータを渡す方法でページ送りする仕様だし
0466nobodyさん
2008/02/16(土) 23:04:37ID:???ページ移動にくだらんデータまでセッションで使いやがったら
2度目の依頼はまずしない!!
0467nobodyさん
2008/02/16(土) 23:04:42ID:w7he1Bjbいやいや、誰もそんな議論はしてない。
ページングとかはGETパラメータで当たり前。
>>455
>同一セッションで、複数のウインドウ(タブ)を開かれて同じ画面を操作された場合への対処
これはほんとそうで、画面識別のためのトークンを発行するなどの対処が必要。
0468nobodyさん
2008/02/16(土) 23:15:35ID:???ページングとかはGETパラメータで当たり前てw
セッション使うなら
ページングにGETパラメータを渡し続ける必要ないだろ?
0469nobodyさん
2008/02/16(土) 23:21:29ID:???なんかosCommeceやOpenPNEやEC-CUBEのスレと同じ臭いがするよね
0470nobodyさん
2008/02/16(土) 23:23:05ID:???楽だからセッション使うなら
ページングもセッションつかったら楽だろうが
ページングだけセッション使わないて何でや?
検索条件増えるたびにページリンクにパラメータ記述するの面倒やろが
0471nobodyさん
2008/02/16(土) 23:27:04ID:???それは何かというと、URLをコピーしておいて、後でそれを貼り付ければ
同じ内容を表示できるという点。
URLをメールで送って他の人に同じものを見てもらうとかね。
POSTもしくはセッションだと、同じ条件で検索し直したり
ページ移動し直さないといけなくなるけど。
0472nobodyさん
2008/02/16(土) 23:31:30ID:???おまえ画面識別のためのトークン発行なんてしてないだろ?
楽しようとするやつがそんなセキュリティ的なことするわけないやんw
0473nobodyさん
2008/02/16(土) 23:53:21ID:???0474nobodyさん
2008/02/17(日) 00:04:35ID:???/branches/1.2.x.x/cake/libs/model/model.php (log) - CakePHP : The Rapid Development Framework for PHP - Trac
https://trac.cakephp.org/log/branches/1.2.x.x/cake/libs/model/model.php
ざっくり Revision Log見た感じChangeset 6315ってのがその修正なんじゃね?
ろくに読んでないしというか読んでも正直よくわかんないから違ったらドンマイ
0475nobodyさん
2008/02/17(日) 00:39:48ID:???してるよと言われても
セッションに関するセキュリティ対策を具体的にどうやってるのか
全く書かれてないので説得力がない
対策してるのは画面識別のためのトークン発行だけ?
これは具体的にどうやってるの?
0476nobodyさん
2008/02/17(日) 01:24:22ID:???セッションそのものの話だから。
一応それの対応は、ログイン時にセッション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は実行不可。
こんな感じでやってる。
0477nobodyさん
2008/02/17(日) 01:32:49ID:???>そうすることで処理2,3,4に直接行くのを防ぐ。
1から3とか、4から3とかを防ぐ。
0478nobodyさん
2008/02/17(日) 03:23:34ID:???毎回入れるの面倒だけど、なんとかならんのかな
0479nobodyさん
2008/02/17(日) 11:13:38ID:???そういう汎用的だが面倒な処理ってのは、フレームワークでやってほしいね。
Cakeにはそんな機能無いの?
なければそういうコンポーネントとか。
0480nobodyさん
2008/02/17(日) 11:18:29ID:???おー。それであってる。branches以下を見ればよかったのか。
意図したところにちゃんとコード入ってるよ。
find('count')には入ってないけど、やっぱcountで
afterfindを呼び出す必要は無いのかな?
0481nobodyさん
2008/02/17(日) 13:03:45ID:???とはじめは思ったけどcountは
$results = $this->__filterResults($results, true);
省いても結果変わらないから別によくね?
初心者丸出しですいません
0482nobodyさん
2008/02/17(日) 23:54:36ID:???どうやってる?
モデルみたいに簡単にかく方法用意されてないのかな?
0483nobodyさん
2008/02/18(月) 04:05:14ID:???0484nobodyさん
2008/02/18(月) 04:06:19ID:???どうすれば動くの?
例)
c_userテーブル
0486484
2008/02/18(月) 04:56:56ID:???メンバ変数名に[$]が自動的についてしまうのが原因かな
もっと詳しく調べてみよう
0487nobodyさん
2008/02/18(月) 04:58:45ID:???0489484
2008/02/18(月) 05:05:59ID:???bakeでつかって作ると
var $helpers = array('Html', 'Form', '');
helpers配列の最後に空の値が自動的に入るクサい
空の値をとったら動いた
0490nobodyさん
2008/02/18(月) 05:14:55ID:???c_usersテーブル
app/models/c_user.php
CUser
app/controllers/c_users_controller.php
CUsersController
じゃなかったっけ試してないけど って解決したならいいや
0491484
2008/02/18(月) 05:20:30ID:???helperのときの質問でライブラリ名指定するとこで
そのままエンターしたから
空の値がはいっちゃったくさい
0492nobodyさん
2008/02/18(月) 06:19:30ID:???でリンク作成できるみたいだけど
リンクを新しいウィンドウで開かせたい場合はどうしてますか?
0493492
2008/02/18(月) 06:45:36ID:???array('target'=>'newwin')
でよかったんだ
0494nobodyさん
2008/02/18(月) 07:28:02ID:???激的に作業スピードが変わるということはないな
0496nobodyさん
2008/02/18(月) 09:47:10ID:???まあ、もとからそれが目的なのだろうから仕方ないかwww
0497nobodyさん
2008/02/18(月) 11:10:35ID:???cakeユーザはある意味凄いと思うよ
0498nobodyさん
2008/02/18(月) 11:17:26ID:???今まで沢山のサイト作ってきたので
0から作るようなサイトはあまりないよ
それを壊してフレームワークにするとかアホらしい作業
0500nobodyさん
2008/02/18(月) 14:50:14ID:???ブラックボックスの割に 穴だらけなのが困る
フレームワークの意味ねえよw
0501nobodyさん
2008/02/18(月) 17:24:44ID:???穴?
何の話?
0502nobodyさん
2008/02/18(月) 19:28:56ID:???後方互換取ろうとするもんだから、メソッド内での引き回しが地獄
0503nobodyさん
2008/02/18(月) 20:31:27ID:???それには同意。引数の名前の通りに使ってくれと思う。
でも、それを理由に他のフレームワークを調べてみたんだが、
どうもCakeほど総合力で勝っているものが無い・・・
もう無くてもいいかもしれんが個人的にPHP4、PHP5コード互換と
アソシエーションとかデータベース周りが一番実用的なんだよなぁ。
※PHP4、PHP5コード互換とはPHP4用とPHP5用で同じコードが使えるという意味。
CodeIgniterはPHP4対応だが、コンストラクタがPHP4とPHP5でのやり方が違って拍子抜け。
0505nobodyさん
2008/02/18(月) 20:44:06ID:???0506nobodyさん
2008/02/18(月) 20:52:34ID:???0507nobodyさん
2008/02/18(月) 21:34:20ID:???大きなデータベースをガシガシ使う予定があるんだけど、
やっぱりPDO使う場合に比べてCakePHPでシステム作ると
データ処理とか重くなりますか?
0508nobodyさん
2008/02/18(月) 21:59:37ID:???なんでわざわざフレームワークの穴埋めする必要があるのかとw
0509nobodyさん
2008/02/18(月) 22:05:30ID:???0511nobodyさん
2008/02/18(月) 22:16:09ID:???そういうのは、言い出した人が証明する義務を持つってのが
世の中の常識だってわかってる?
まあわかっていたらそんな中途半端なこと言わないと思うが。
0512507
2008/02/18(月) 22:19:43ID:???やっぱそうですよね…
体感で明らかに違うくらい差がありますかね?
少しでも軽いシステムを作る場合は、Cakeは避けた方が無難
なのかな…便利そうで使ってみたかったけど…
0513nobodyさん
2008/02/18(月) 22:23:52ID:???C言語を使ったほうがいいよ。
0514nobodyさん
2008/02/18(月) 22:24:12ID:???>少しでも軽いシステムを作る場合は、Cakeは避けた方が無難
そうじゃない
少しでも軽いシステムを作る場合は、フレームワークは避けた方が無難
「少しでも」が何と比較してなのかはわからんが
0515nobodyさん
2008/02/18(月) 22:39:15ID:???静的HTML吐いたりとか検討すべきだし
0516nobodyさん
2008/02/18(月) 22:41:31ID:???システムを作ってさい。
0517nobodyさん
2008/02/18(月) 22:54:50ID:???俺俺関数はすべてc言語でPHP拡張モジュールにして利用してるよ
高速化と利便性を意識してやってる
0518nobodyさん
2008/02/18(月) 23:09:21ID:???証明するもなにも使えばすぐわかる
セキュリティホールが簡単にできてしまう
基本的なDB関係やパラメータの受け渡しで穴がある
もちろん気をつければいいんだが
フレームワークでそんなとこに気をつけなきゃいけない
というのがちょっといまいち
素人がセキュリティホールだらけのサイトつくりまくって
PHPの糞さを助長しなければいいのだが
0520nobodyさん
2008/02/18(月) 23:10:50ID:???規則に統一性がなく 中途半端な感じ
まあオープンソースの宿命といえばそれまでだけどね
0522nobodyさん
2008/02/19(火) 00:55:22ID:???例えばtable1、table2ってテーブル名があったら、
table1s、table2sってしても大丈夫?
0523nobodyさん
2008/02/19(火) 01:27:54ID:???証明しないとわからない人間が使うとどうなるか…
PHPは糞言語っていわれるのがおちだなあ
1.3くらいでもうちょい使いやすくなってるといいな
0525nobodyさん
2008/02/19(火) 01:56:18ID:???0526nobodyさん
2008/02/19(火) 02:14:54ID:???つくづく英語の複数形という考え方はすごいと思うよ。
0528nobodyさん
2008/02/19(火) 03:30:47ID:???まったく違う名前にだろうが自由自在。
0529nobodyさん
2008/02/19(火) 04:19:11ID:???table1 なら TableFirsts
table2 なら TableSeconds
table3 なら TableThirds
になるらしい
0532nobodyさん
2008/02/19(火) 14:11:35ID:twNHgR++ホラっ、そんなこと言っちゃダメっ!w
0534nobodyさん
2008/02/19(火) 21:00:41ID:???SQLという言語には穴があるといわれている。
0535nobodyさん
2008/02/19(火) 21:33:04ID:???要するにフレームワーク自体にSQLインジェクションの脆弱性があるって事?
kwskkwsk
0537nobodyさん
2008/02/19(火) 23:27:20ID:???0538nobodyさん
2008/02/20(水) 08:44:17ID:???http://www.1x1.jp/blog/2007/07/cakephp_operator_injection.html
0540nobodyさん
2008/02/20(水) 10:16:32ID:???超典型的なSQLインジェクションの穴だし、たしかに低レベルだなw
ちなみにh()もhtmlspechalcharsに丸渡ししてるから、
htmlエスケープの穴も塞がれてない
0541nobodyさん
2008/02/20(水) 13:04:12ID:???笑うのは、これを穴といっている奴のことな。
たとえば、SQLインジェクションを、SQLの穴という奴はいない。
SQLを使って作った奴の問題。
世の中のRDMS用のどのライブラリ・フレームワークもSQLを直接実行できる。
だから、すべてのライブラリ・フレームワークに穴がある。といったら
馬鹿にされるぞ。
余りにも低レベルな奴だとな。
0542nobodyさん
2008/02/20(水) 22:13:50ID:???0545nobodyさん
2008/02/21(木) 00:58:38ID:???あぁ。穴といっているやつがね。
0547nobodyさん
2008/02/21(木) 01:36:27ID:???それもそだねえ
h関数も同様
少なくとも この辺りの対策はフレームワークに組み込まれるべき部分
でなければ自分で書くのと大差ないわけだし
他にもDBが外部から更新されるパターンがけっこうあるよねえ
低レベルとか言っているやつがいるが
その低レベルな穴をふさぐのもフレームワークの役目
同じことやるなら 自分で書けばいいんだしな
問題なのは 独自の変なルールくっつけているわりに
そういう部分に手抜きがあるということ
そして 手抜きがあるところもあれば きちんとしているとこもある
ようは 今のCakePHPは中途半端なのね
ZendやCIのほうが変なルールがない分 作りやすいかもねえ
できたコードも見通しいいしね
0548nobodyさん
2008/02/21(木) 01:46:39ID:???なんぼほど覚えることが増えんねん、いい加減にせーよボケ!!
0549nobodyさん
2008/02/21(木) 02:44:48ID:???それとも仕事で嫌々使わされてるクチか?
0550nobodyさん
2008/02/21(木) 08:17:06ID:???Cakeで外部キーはテーブル名単数形_id(例えばuser_id)とする、といったルールになってるけど、
例えばusersテーブルのidじゃなくて、usersテーブルのuseridをuser_idに引っ張ってきたいときは
どうしたらいいですか?
usersテーブルのプライマリキーをidからuseridに手動変更するとか?
それでもuser_idに自動的に引っ張ってこれますか?
0552nobodyさん
2008/02/21(木) 09:46:20ID:???必死だなw
これは穴とは言わない。これが穴なら他のフレームワークにもあると
何度も言われてまだわからないのかw
0554nobodyさん
2008/02/21(木) 12:43:43ID:???証明する義務は、穴があると言い出した側にある。以上。お前の頭は異常w
0555nobodyさん
2008/02/21(木) 13:06:05ID:???0556nobodyさん
2008/02/21(木) 13:10:53ID:???ちゃんと言わないと相手にしてもらえないよ。
お母さんに教えてもらわなかった?
0557nobodyさん
2008/02/21(木) 13:22:36ID:???今必死にファイル検索中・・・・
見つからなかったから遠吠え↓
0558nobodyさん
2008/02/21(木) 14:57:01ID:???ただの煽りあいでどっちも荒らしにしか見えませんよ。
0559nobodyさん
2008/02/21(木) 19:07:43ID: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の情報を取り出すといった事はやりたくないですし。。
どなたかご教授頂けないでしょうか。
0560nobodyさん
2008/02/21(木) 20:12:27ID:???なんだから手っ取り早くやるなら
User->Favorite->recursive = 2;
User->Favorite->findAll('user_id = '.$userID);
でいいんじゃないの
ていうかユーザーとお気に入りがhasManyでお気に入りとアイテムがhasOneな
気がしないでも無いけど
0561nobodyさん
2008/02/21(木) 20:13:15ID:???ざっと読んで答えるが、
お気に入り->アイテム->お店
ってアソシエーションも逆から設定しておけばいいんじゃないの?
お気に入りをテーブルから取り出したら、芋づる式に取り出せるように。
0562nobodyさん
2008/02/21(木) 20:15:21ID:???アイテムがお気に入りをhasManyでお気に入りがアイテムにbelongだ
0563nobodyさん
2008/02/21(木) 21:06:15ID:9HKLO2wF>アイテムがお気に入りをhasManyでお気に入りがアイテムにbelongだ
レスありがとうございます。確かにお気に入り、アイテムの関係でみるとそうなりますね。
ただお気に入りにはアイテムのIDが当然格納しているので当然belongsの設定が出来ますが、
アイテムにはfavorite_idは持ってないのですが、hasManyの設定って出来るものなのですか?
後データとして取得したいのは$data[*]['Company']という形なのですが
教えて頂いた方法を実践したとしても$data[*][Item]['Company']という形になりませんか?
だとすると受け取ったCompanyデータは重複する可能性がありますのでその辺制御してやらんと
駄目だと思うのですが、間違ってますでしょうか。
関係ないのですが
$this->User->Favorite->findAllって書き方出来るのですね。初めて知りましたorz
0564559
2008/02/21(木) 21:11:32ID:???0565nobodyさん
2008/02/21(木) 21:33:52ID:???あとどういうデータで返って来るかは自分でdebug($data);でも書いて確認するんだ
気に入らない形だったら自分で整形しろ
それで得たノウハウはここか自分のブログにでも書けばみんなしやわせ
0566nobodyさん
2008/02/21(木) 23:04:08ID:???0567nobodyさん
2008/02/21(木) 23:22:30ID:???というか引っ張り出すデータを軽くしたい時はそうしてる。
0569559
2008/02/22(金) 01:11:47ID:???>566
私もイラっと来てquery使おうとしてたんですが、ページングしたかったので
とりあえず今はpaginateにWHERE句の後ろ全部渡す形にしちゃってますorz
皆様どうもありがとう。
0570nobodyさん
2008/02/22(金) 01:16:58ID:???>567
設計上可能ですし私もそれ考えたのですが、
なんかそれをやると負けた気がして迷走してましたw
0571nobodyさん
2008/02/22(金) 01:31:38ID:???正しいか分からんけど、ロジックシンプルになるし、データも少なくなるしそれでいいんじゃん?
あとはmysql(ver5.1以上)のviewを使うのもありかもね。
0572nobodyさん
2008/02/22(金) 05:41:42ID:???CakePHPのアソシエイト部分が小規模向けに設計されてる
GoogleCodeSearchで中規模程度のソースを結構見たが
大規模化するとかアソシエイト部分が、かなり複雑になっていて
とてもチーム分担できるようなソースでは無くなっている
symfonyはここが簡潔でわかりやすい
0573nobodyさん
2008/02/22(金) 09:25:21ID:???だからCakePHPでアソシエイトを使わなければいいだけの話。
0575nobodyさん
2008/02/22(金) 11:55:57ID:???CakePHP的にはどうするのが一番いいの?
モデルからコンポーネントを無理やり使う?
ビヘイビアってライブラリというよりか
フックを入れるものだからちょっと感じが違うよね。
0576nobodyさん
2008/02/22(金) 12:22:47ID:???0577nobodyさん
2008/02/22(金) 13:09:39ID:???たとえば、ファイル読み書きライブラリを使うとして、
$handle = $model->fopen($file)
$model->fputs($handle, $data);
とか気持ち悪いとか思わない?
継承関係になってないんだよね。
$model->findAll (このモデルのデータを検索する)
$model->save (このモデルにデータを保存する)
$model->fopen (このモデルとは関係ないが、ファイルをオープンする)
$model->fputs (このモデルとは関係ない、ファイルに保存する)
0578nobodyさん
2008/02/22(金) 13:47:10ID:???ファイルの読み書きだったら一個モデル作ればいいんじゃね?
モデルってデータの入出力であってモデル=DBのテーブルってわけでもないし
0579578
2008/02/22(金) 14:02:56ID:???0580nobodyさん
2008/02/22(金) 14:48:32ID:???今回はファイルを例にしたけど、
そういう汎用的なライブラリって使うでしょ?
そういうのはどうやって使うのがCakePHP的なのかなぁって。
vendersに入れるってことは、
vendor('aaa/bbb');
class MyModel extends AppModel {
function foo() {
$lib = new Lib();
}
}
こんな感じで使うってこと?
0581nobodyさん
2008/02/22(金) 14:58:48ID:???コンポーネントいらないんじゃね?と思えてきた。
コンポーネントは何の為に使うんだろう?
呼び出したコントローラを参照する必要がある場合?
すると汎用的なライブラリはvendorを使ったほうがいいのかな。
たとえばメール送信(1.2のEmailComponent)は
コンポーネントではなく、vendorにするべきじゃないかと思えてきた。
バックグラウンド的にモデルに変更があったらメールするなんて用途もあるだろうし。
そういう場合でもモデルを変更するコントローラで一旦変更を感知して
そこからメールするのがいいのだろうか?
0582nobodyさん
2008/02/22(金) 15:02:32ID:???vendorsプロパティがほしいな。
class My extends ? {
var $vendors = array('Aaa', 'Bbb', 'Ccc');
function foo() {
$this->Aaa->foo();
}
}
あとpluginsってフォルダを使っている例を見たことが無い。
0583nobodyさん
2008/02/22(金) 16:17:35ID:???それがめんどくさいなら無節操にvendors使えばいいだろ
0586nobodyさん
2008/02/22(金) 18:13:20ID:???0587nobodyさん
2008/02/22(金) 19:13:52ID:???モデルでコンポーネントを使うという意味?
でも、フォルダからしてコンポーネントはコントロールの下にあるし、
なによりモデルでコンポーネントを使う方法が無いでしょ?
App::importで強制的に読み込むしかない。
0589nobodyさん
2008/02/23(土) 09:31:23ID:???将来性無いなと判断する決め手になった
後はデータがオブジェクトじゃなくて配列処理してるとこね
これも、かなり小規模を前提として設計してるよね
0590nobodyさん
2008/02/23(土) 09:40:42ID:???PHPフレームワーク主流になると思う
有名どころの大手ならCakePHPはいれない
これは断言できる、
少人数、小規模設計だから当然
半年くらいCakePHPでコーディングしてきたけど捨てるよ
CakePHP指定の案件が将来望めない
symfony案件が増加するのは間違いない
0591nobodyさん
2008/02/23(土) 10:34:07ID:???http://cakephp.seesaa.net/article/31425210.html
0592nobodyさん
2008/02/23(土) 13:14:45ID:???だね
途中荒らしてるやついたが
なんであんなに必至なのかな
まあ初心者には簡単だしおすすめだけど
cakephpのサイト探すと穴空いたままで公開してるとこ多いな
0593nobodyさん
2008/02/23(土) 14:17:27ID:???0595nobodyさん
2008/02/23(土) 14:22:47ID:???$db =& ConnectionManager::getDataSource('default');
$db->query('select * from table', false); ←二つ目の引数はキャッシュを使わないという意味
0596nobodyさん
2008/02/23(土) 16:47:47ID:???そりゃ単に調査不足だろ
0597nobodyさん
2008/02/23(土) 21:18:01ID:???何かやり方間違ってますか?
例えば
配列を書いたファイル: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 ) ;
}
}
0598nobodyさん
2008/02/23(土) 22:31:22ID:???たとえるなら、携帯の掲示板レベル
0599nobodyさん
2008/02/23(土) 22:33:28ID:???そうなればsymfonyが敵なし状態だろうな
0600nobodyさん
2008/02/23(土) 23:06:46ID:???0601nobodyさん
2008/02/24(日) 14:48:47ID:???チンポニーでも禅度でも好きなの使え。
0602nobodyさん
2008/02/24(日) 21:59:28ID:???0603nobodyさん
2008/02/24(日) 23:00:15ID:???0604nobodyさん
2008/02/25(月) 04:09:58ID:???xmlの処理ってどこで実装するのが良いの?
viewにべた書きは嫌なんだけど
0605nobodyさん
2008/02/25(月) 11:49:58ID:???0606nobodyさん
2008/02/25(月) 17:42:18ID:6F5pnXqdMVCの奥でデザインパターンみたいな構造にしたいんですけど。
0607nobodyさん
2008/02/25(月) 20:05:46ID:???0608nobodyさん
2008/02/25(月) 20:18:02ID:???URL/データ/データ
このような感じでデータだけを送ることはできませんか?
0611nobodyさん
2008/02/26(火) 00:24:55ID:???>>610
アドバイスありがとうございます。
http://hogehoge/sales/1
というページから、
http://hogehoge/sales/1/2008/02
みたいにフォームを利用してさらに期間を絞り込むようなことをやりたかったのですが、
結局新しい別のビューでやることにしました。
0612nobodyさん
2008/02/26(火) 12:54:22ID:???vendor?
0613nobodyさん
2008/02/27(水) 10:41:56ID:pFPJf0/n0614nobodyさん
2008/02/27(水) 12:51:45ID:???$model->readを実行すると、$model->data に読み込んだデータが入る。
$model->findByIdだと$model->dataの値はそのまま。
確認したし、多分あっていると思うが、
これの違いを明確に書いてあるところあるかな?
0615nobodyさん
2008/02/27(水) 13:12:36ID:???1.2しか知らないけど
controller
$this->set('hoge','aiueo');
view
echo $hoge;
0616nobodyさん
2008/02/27(水) 13:30:21ID:pFPJf0/nすいません。間違えました。
コントローラからヘルパーにパラメータをわたす方法でした。
0617nobodyさん
2008/02/27(水) 15:08:46ID:???ソース見たまんまだけど
0620nobodyさん
2008/02/27(水) 17:54:15ID:???ヘルパー
function test($hoge){
echo $hoge;
}
コントローラー
$this->set('hoge','てんこもり');
これでとりあえずビューにわたるだろ?
んで、ビューからヘルパーを呼ぶと。
$helper->test($hoge);
こんで $hoge の内容が表示されますよっと。
0621nobodyさん
2008/02/27(水) 19:02:44ID:???<?php $helper->init($settings); ?>
初期化命令を毎回呼べと?
0622nobodyさん
2008/02/27(水) 19:23:49ID:???ってビューに渡しておいてビューの頭で
$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();とか手動でやってやればよかったのかな
そのときは思いつかなかったからやってないけど
0623nobodyさん
2008/02/27(水) 20:00:22ID:pFPJf0/n自己解決しました(笑)
0624nobodyさん
2008/02/27(水) 20:01:37ID:WlN8JrV2それぞれの印象を聞いてみたいです。
俺もCakePHPを使い始めた当初からSmartyを使ってきてる一人なのですが、なんだか
実は結構めんどくさかったりする割に従来のPHP記述でのビューに比べてあんまり
パフォーマンス良くない気がしてきたもので。(例えば、ヘルパーに配列を渡す場合
Smartyでのビューだと細々とめんどくさかったり)
0625nobodyさん
2008/02/27(水) 20:29:10ID:???0626nobodyさん
2008/02/27(水) 21:24:24ID:WlN8JrV2なに?おれおれフレームワークって?
知り合いがZend FrameworkのMVC(この場合はV)をCakeで使ってたけど、あれは意味ねえなあ
0627nobodyさん
2008/02/27(水) 21:25:22ID:pFPJf0/n家に帰るのでIDかわるから、あきらめて説明すると、
コントローラで
$this->params['hoge'] = $data;
に値設定。
ヘルパーからも、$this->params['hoge']にアクセスできる。
$this->paramsを受け渡しに使うのってどうよ?と思うかもしれんが、
paginationもにたように、params['paging']を使っているからいいだろう?
他にClassRegistryを使ったやり方があって、FormHelperとかは
これを使っているみたいだが、なんかグローバル変数あつかっている感じがして却下。
もう一つ、Viewを継承した独自のビューでごちゃごちゃ変数わたしても
できるかもしれんが、余計なものを作らないといけないので却下。
0628nobodyさん
2008/02/27(水) 21:49:42ID:???0629nobodyさん
2008/02/28(木) 02:37:50ID:???$model->findAll()するとき、有無を言わさずjoinしてるみたいなんだけど
これってなんとかならんのかね。
railsだとfind(:all,:include = ...)で指定したときだけjoinとかするじゃん。
0632nobodyさん
2008/02/28(木) 15:35:27ID:???0634nobodyさん
2008/02/28(木) 20:45:21ID:???0635nobodyさん
2008/02/29(金) 08:40:00ID:???時間の無駄やろ。
0636nobodyさん
2008/02/29(金) 08:42:38ID:???頭のいい人間が少人数しかいないから
正しい方向に行くのは常に少人数
0637nobodyさん
2008/02/29(金) 09:13:18ID:???主流になっている罠w
0638nobodyさん
2008/02/29(金) 09:16:04ID:???0639nobodyさん
2008/02/29(金) 09:21:43ID:???反日感情が大衆を間違った方向へ進ませている
CakePHPも同じ
0640nobodyさん
2008/02/29(金) 09:25:37ID:???小規模フレームワークは乱立しやすく
次から次へと良いフレームワークが出来る
大規模フレームワークはやはり規模がでかいから
乱立しにくい
どうせなら覚える量は少ない方がいい
そう賢い人間の選ぶ答えはsymfony
0641nobodyさん
2008/02/29(金) 09:26:48ID:???フレームワークの数分という意味だからね
0642nobodyさん
2008/02/29(金) 09:29:16ID:???CakePHPも同じ道に行くのはわかるだろう
小規模フレームワークの世代交代は1年単位なんだよね
0643nobodyさん
2008/02/29(金) 09:32:31ID:???簡単な掲示板レベルのものしか作れないね
だから今後も有名どころのCakePHP採用実績はありえないよね
だから廃れるのも速い、その理由からも今年で終わりクセー
0644nobodyさん
2008/02/29(金) 09:35:28ID:???> firefoxのアドオンがおいてある、あのサイトが実はCakePHPで作られていたんだそうです。
0645nobodyさん
2008/02/29(金) 09:40:00ID:???以前は活気のあったmojaviスレが廃れてるのを見れば
お前の好きなフレームワークも同じ道に行くのはわかるだろう w
0646nobodyさん
2008/02/29(金) 09:50:18ID:???アマチュアも使えるきちんとしたFWなら生き延びるだろうけど・・・
CIに期待
0647nobodyさん
2008/02/29(金) 10:14:57ID:???Viewでヘルパーのコンポーネントの呼び出し宣言出来ないとか
Viewで直接モデルをコントロール出来ないとかね
0648nobodyさん
2008/02/29(金) 10:21:05ID:???複雑なロジックはコンポーネント化して呼び出し
複雑なロジックでかつ断片性が内容によってかわるならCakePHPはどうすんの?
0649nobodyさん
2008/02/29(金) 11:20:41ID:???なに、この便利な機能
CakePHP利用してからsymfony使うと
豊富な便利機能にただただ関心
0650nobodyさん
2008/02/29(金) 11:22:31ID:???作者やる気がないから将来性もクソもないがね
やる気のない社長がいる会社の株を買ってるのと同じだね
0651nobodyさん
2008/02/29(金) 11:23:29ID:???いつ開発中止するかわからんフレームワークをよく使えるなwww
0652nobodyさん
2008/02/29(金) 11:24:22ID:???アマチュアには敷居高いからね
流行らなければ廃れていくのは同じ
0653nobodyさん
2008/02/29(金) 11:43:03ID:???フレームワークを次々乗り換えるんじゃなくて
期間的に長く使えるフレームワークしかいらない、
一見、CakePHPは効率よく見えるが
過去資産になりにくい時間の使い方は、非効率
0654nobodyさん
2008/02/29(金) 11:50:01ID:???0から作る案件はかなり少ない
スパゲッティソースでも
今までの過去資産をカスタマイズする方が圧倒的に速い
0655nobodyさん
2008/02/29(金) 12:45:25ID:???0656nobodyさん
2008/02/29(金) 14:26:26ID:???ただ知名度が優先して使ってる人が多くなってるだけ
0657nobodyさん
2008/02/29(金) 14:31:12ID:???フレームワークが主流にならないと
初心者がフレームワーク出来ますとか
調子いい事を言うからな
初心者と経験者の差をはっきりさせて
初心者がすぐに食える状態を無くして欲しい
0658nobodyさん
2008/02/29(金) 14:32:41ID:???高級志向の大人のフレームワークがsymfony
0659nobodyさん
2008/02/29(金) 14:46:43ID:???さびれてんだからさwww
13: フランチョスとsymfony (36)
http://pc11.2ch.net/test/read.cgi/php/1201177567/l50
0660nobodyさん
2008/02/29(金) 14:51:07ID:???http://pc11.2ch.net/test/read.cgi/php/1204113475/l50
一時期 symfony か CakePHP かって時期あったけど
これほどにまでsymfony 廃れてるとは知らんかった。
まあ、どうでもいいけど。
0661nobodyさん
2008/02/29(金) 14:51:22ID:???> 長い目で見れば、流行だけで中身の薄いものは確実に消える
それ具体的に何年後?
そりゃいつかは何もかも消えるだろうなw
そのときに、ほら消えた。俺の言っていたことは正しかったんだ。と
言えない様に、今何年後に消えるのか言ってもらおうか。
それまでに消えなければ、お前の言っていることは間違いだとはっきりする。
そのとき俺がおまえのことを思い出すことは無いだろうが、
少なくともおまえ自身は、自分の予測が外れたことを身にしみて感じるだろうw
0662nobodyさん
2008/02/29(金) 14:59:47ID:???0663nobodyさん
2008/02/29(金) 20:34:53ID:???0664nobodyさん
2008/02/29(金) 23:39:58ID:???core.phpに書いてるんだけど、これで問題ないですか?
0665nobodyさん
2008/03/01(土) 00:37:40ID:???app/core.phpはcakeの動作を変えるために設定を変えるだけで
自分で値を追加しないものと感じる。
もっとも「すべてのページで使うような変数」の内容によっては、
AppControllerにかいたりvendors以下にファイル作ってそこに書いたりする。
とここで、ふと、自分の作っているのを見たらapp/core.phpにも書いていたwww
といっても、ユニットテストのための追加設定だけどね。
0666nobodyさん
2008/03/01(土) 12:28:11ID:uin8SgpQデータベースの値として、0が入ってしまうんですが、
これをNULLで代入させる方法ありませんか?
もちろんデーターベースのフィールドはNULL値が入るようになっています。
データベースはMySQL。クエリーとしては、
INSERTとかUPDATE 〜〜〜 number_field = '' という文が発行されています。
たしかデータベースによっては(Oracle?)、こういう場合null値を入れるやつも
あった気がしますが、汎用的な方法としてやりたいな。
0667nobodyさん
2008/03/01(土) 14:35:44ID:???0668nobodyさん
2008/03/01(土) 14:43:32ID:???使ったこと無いので勉強したほうがいいのかなと思いまして。
先輩方、ご指導ください。
0669nobodyさん
2008/03/01(土) 15:07:46ID:uin8SgpQそれがですね。nullを入れてもだめなんですよ。
同じところで4989を代入したら強制的に値を4989に出来たので
間違いないと思うんですが。
0670nobodyさん
2008/03/01(土) 15:20:41ID:???0671nobodyさん
2008/03/01(土) 15:21:09ID:???使っていると今までの手動テストがいかに怠けていたかがわかるよ。
今ユニットテストでやっているテストを手動でやれといわれたら泣く。
設計が固まってなくて大幅に変更するときとか、安心していじれるようになる。
ある操作をしてエラー → プログラム修正 → データ消してテストデータ入れる → もう一回同じ操作。
これを手動で何度もやらなくてすむ。操作が複雑になって、前提データが
複雑になると、もう一回同じ状態に戻して操作なんてやってられない。
あとちょっと変則的だけど、データベースの定義&その他の設定をYAMLを
使ってやっているのだが、そのスキーマのチェックにも使っている。
スペルミスとか細かいエラーに悩まされなくていいよ。
本当は、YAMLスキーマバリエータを使うべきなんだろうけど。
PHP用なさそうだし、どこまで出来るのか不安だったので。
(たとえば、名前規約、複数形でなければならないとか
このフィールドは違う設定ファイルに定義されてなければならないとか)
0672nobodyさん
2008/03/01(土) 15:23:37ID:uin8SgpQ多分、それもあるとは思います。
しかし、同じ設定のまま、phpMyAdminではnullを入れられます。
もちろんこのときに発行されるSQL文は、
INSERTとかUPDATE 〜〜〜 number_field = null ですね。
MySQL側で設定できたとしても設定は変えられないと思われるので、
アプリ側で対処したいのですが。
0673nobodyさん
2008/03/01(土) 15:30:04ID:???今、このようなアドレスにいるとして、
ここから、以下のようなアドレスを作り出す
一番シンプルな方法は何でしょうか?
(param1の内容だけを変えたいということです。)
/controller/action/1/2/param1:z/param2:b?c=test1&d=test2
URL文字列形式じゃなくて、params配列形式でもOKです。
むしろこっちのほうがいいです。
0675nobodyさん
2008/03/02(日) 01:41:30ID:???今それでやってますけど、これぐらいフレームワークが用意していてもよさそうじゃない?
関数名($this->params, array('named'=>array('param1'=>'z')))
ってな感じ。
0677nobodyさん
2008/03/02(日) 12:37:53ID:???ドキュメントが少ないからソース解析しながら大変だけど
この作業がわりと楽しい
理解を深めながらコーディングできる。
ちょっとした不具合でもデバッグ文でググるんじゃなくて
まずソース解析、こっちの方が正しくて速いことに気づいた
0678nobodyさん
2008/03/02(日) 12:40:00ID:???Akelos自体にドキュメント無くてもRoRと照らし合わせれば
ドキュメントが要らないくらい、完全コピーされてるw
0679nobodyさん
2008/03/02(日) 12:42:47ID:???なんで流行してないのかわからないwww
ドキュメント量が少ないと何も出来ない人が多いからか?
0680nobodyさん
2008/03/02(日) 12:47:14ID:???これ見ると、もう萎える
どんだけブームでもOOPじゃないフレームワークはいらない
0681nobodyさん
2008/03/02(日) 13:03:23ID:???キティガイすぎワロタ
0682nobodyさん
2008/03/02(日) 13:05:31ID:???function findAll($conditions = null, $fields = null, $order = null, $limit = null, $page = 1, $recursive = null) {
0683nobodyさん
2008/03/02(日) 13:06:44ID:???0684nobodyさん
2008/03/02(日) 13:09:50ID:???嘘つくなら、せめてコンマだけはちゃんといれようなw
null,null と打ってそれを適当な回数コピペしたのばればれだから。
0685nobodyさん
2008/03/02(日) 13:14:03ID:???Akelosはメソッドの引数がオブジェクトなん?
$params = new Parameter()
$params->setConditions(・・・);
$params->setFields(・・・);
$params->setOrder(・・・);
findAll($params)
いくら引数が少なくてもこんなのはいやだw
0686nobodyさん
2008/03/02(日) 14:03:11ID:???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の投げやりな引数は少しずつ改善されつつある。
頭の悪い愚痴ばかり垂れる暇があったら記事読めば?
0687nobodyさん
2008/03/02(日) 15:43:01ID:???0688nobodyさん
2008/03/02(日) 15:43:59ID:???0689nobodyさん
2008/03/02(日) 15:50:03ID:???readは違う。モデルのインスタンスはテーブルの一行に当たるんだが、
readは、この一行のデータをモデルに読み込むもの。
具体的に言うと、$model->dataが変更されるもので、
find系メソッドはクラスメソッドのような扱いで、
インスタンスの状態は変えずに、値を取得するもの。
0690nobodyさん
2008/03/02(日) 17:48:14ID:???こんな感じでgroup by使って集計ランキング作りたいときfind使ってる?
0691nobodyさん
2008/03/02(日) 18:32:01ID:???$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
よええ…
0692nobodyさん
2008/03/02(日) 18:59:37ID:???0693691
2008/03/02(日) 19:11:42ID:???がどうにかなるのかなと思ったんだよ
もちろんこっちのヌルヌルならSQL通るよ
0695nobodyさん
2008/03/02(日) 20:45:48ID:???こちらは結局今までどおりヌルヌルで書くしかないってこと?
0696nobodyさん
2008/03/02(日) 21:22:14ID:???0697nobodyさん
2008/03/02(日) 21:28:46ID:???nullが一個多いぞ。お前使ってないで文句言ってるだろw
で、たった四つの引数でなにごちゃごちゃいってんの?w
0698nobodyさん
2008/03/02(日) 21:31:13ID:???カラム名をasで別名で使う場合は
直接SQL書かないとダメなんかな
select ここがカラム名だけじゃない複雑な場合 from test
は直接SQLがいいのかな
0699nobodyさん
2008/03/02(日) 21:34:46ID:???これがオブジェクト指向なん?wwwwwwwwwwwwwwwwwwwwwwwwww
0700nobodyさん
2008/03/02(日) 21:35:58ID:???0701nobodyさん
2008/03/02(日) 21:43:22ID:???>>686で書かれているfind系の新しい記述法がfindBy系に適用されるのかどうか
単に確認したいだけなんだけど
現状のCakeだと、findBy系の使用が推奨されること多かったから使ってる人も多いだろうし
0704nobodyさん
2008/03/02(日) 23:48:57ID:???自分のFWのスレいって有用な情報で賑わせればいいのに(´・ω・`)
0705nobodyさん
2008/03/03(月) 00:12:48ID:???そうか、1年前以上も前からはじめてたんだな。
このスレ立てて正解だった。
あれから俺もずいぶんと成長したな。
いまじゃユニットテストもちゃんと使えるようになったし。
Akelosは名前もすっかり忘れていたが、こっちも俺が立てたんだったなw
こっちは残念ながらぜんぜん伸びず。
たぶんね。俺がつかって色々書いているからスレ伸びてるんだと思うよ。
Symfonyはたぶん、4月ぐらい?から俺が使うから伸びると思うよ。
PHP4対応を考慮しなくて良い、個人的なソフトで使う。
それまで、我慢してくれよ。
0706nobodyさん
2008/03/03(月) 00:17:28ID:???0707nobodyさん
2008/03/03(月) 00:27:38ID:???引数は全部ひとつだけしかない。
foo(array('hiki1'=>1, 'hiki2'=>2, 'hiki3'=>3))
0708nobodyさん
2008/03/03(月) 01:08:53ID:???それについていくしかない。
英語が言語的に最低でも、みんな英語使ってるなら使うしかない
0709nobodyさん
2008/03/03(月) 01:50:22ID:???0710nobodyさん
2008/03/03(月) 01:51:11ID:???0711nobodyさん
2008/03/03(月) 01:58:44ID:???0712nobodyさん
2008/03/03(月) 02:57:27ID:???0714nobodyさん
2008/03/03(月) 13:22:21ID:???設計的にどうなん?
0715nobodyさん
2008/03/03(月) 13:37:57ID:???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では一度読み込んだ設定ファイルをどっかに溜めてたりするのかな?
教えて下さい偉い人!
0716nobodyさん
2008/03/03(月) 14:32:56ID:???そこでなんですが、ループで回しやすいように配列を整えると思うのですが、この作業はどこでやるのが正しいんですか?
コントローラ/ビュー/ヘルパーどこがよいのでしょう。
0717nobodyさん
2008/03/03(月) 16:40:58ID:???っていうかそればMVCの基本だよね?
0718nobodyさん
2008/03/03(月) 17:36:05ID:???コントローラーはバリデーションして、モデルからデータを取得して、ビューに変数をセットするだけなんじゃないの。
0720nobodyさん
2008/03/03(月) 19:05:23ID:???0721nobodyさん
2008/03/03(月) 19:21:11ID:???MingやGDのような外部ライブラリと、それを操作する関数群をCakeに持ってくる場合
ライブラリは当然app/vendorsフォルダに入れれば良いと思うのだけど、
関数群の方はどうしてやるのが良いんだろう?
呼び出し元が二か所になるので、呼び出し側のコントローラにベタでは書きたくないので
そうするとこいつもvendorsの中に入れてコントローラ内でvendor()で呼ぶのか
それとも専用コントローラを作るのか。はたまたコンポーネント?
ちょっと知恵を貸して下さい。
0722nobodyさん
2008/03/03(月) 21:01:55ID:???0723nobodyさん
2008/03/03(月) 21:06:07ID:???コンポーネントってMVCでいうところのコントローラなんだから
そこからモデルを直接参照しないで何するんだ?
$Component->Controller->Modelだときもちわるくね?
0724nobodyさん
2008/03/03(月) 23:13:06ID:???> 基本はコントローラ以外にロジックを書くべきじゃないと思ってる。
> っていうかそればMVCの基本だよね?
ぷっ。3ページ目のBad Cakeそのものですねwwww
http://cakephp.org/files/OCPHP.pdf
0726721
2008/03/04(火) 03:21:21ID:???レスサンクス。やっぱりそれが妥当なんですね。
つかまだCake使い始めだからってのもあるのだけど、
こういう事する場合、あれでもこれでも出来るじゃなくて、
あれの場合はこういう手続きで。みたいなのきちっと一本化して欲しいなぁ。
こういう答えが明確でない事で悩む時間がかなり多い。。
もちろん関数とパラメータの意味を調べる為にソースにらめっこにも時間が取られるわけですが。。
社内ライブラリ群でやってる同規模の案件の倍以上かかってるよorz<当然残業コース。。トホホ
0727nobodyさん
2008/03/04(火) 03:35:17ID:???コンポーネントの意味がわかってねーなwww
Mコンポーネント
Vコンポーネント
Cコンポーネント
コンポーネントはMVCのそれぞれにあるんだよwww
低フレームワークをいじってるやつの基礎知識の無さは半端ねーな
0728nobodyさん
2008/03/04(火) 03:41:25ID:???フレームワーク覚えながら仕事できるっていい会社ですね
基本的に勉強は勤務外だから
とろとろ覚えながらやるなんて、まず無理
0729nobodyさん
2008/03/04(火) 09:30:35ID:???だからぁ
Mコンポーネント…Behavior(同じ処理に振る舞いを付ける時)
Vコンポーネント…Helper(表示に関してロジックが必要な時)
Cコンポーネント…Component(手続きを纏めて再利用する時)
Cakeの中ではCコンポーネントの事を単にコンポーネントって
呼んでいるんだから、いかに的外れな事を言ってるのか分かってね。
>>723
直接参照で問題ないでしょ。
データソースを扱いたいためにコンポーネントが
コントローラに依存し出したらそれこそ意味不明。
>>714
何が問題だと感じているの?
0731nobodyさん
2008/03/04(火) 10:25:20ID:???> 何が問題だと感じているの?
>>729
コントローラに追加していないモデルを
どうにしかしてコンポーネントで使うということです。
0732nobodyさん
2008/03/04(火) 11:34:34ID:???> フレームワーク覚えながら仕事できるっていい会社ですね
> 基本的に勉強は勤務外だから
家では仕事しない主義なんでw
0733nobodyさん
2008/03/04(火) 11:46:57ID:???現実の構成から考えると、Cakeのコンポーネントはあくまで
コントローラに書く記述の共通化用だからな
コントローラをインジェクションして使うものだと割り切った方がいいのでは?
0734nobodyさん
2008/03/04(火) 12:23:27ID:Oi3CmVe3http://api.cakephp.org/1.2/auth_8php-source.html#l00674
ClassRegistry::init('名前')でモデルを使用可能にしているみたいだけど。
0735nobodyさん
2008/03/04(火) 12:24:43ID:???コンポーネントに渡すなんてことをしないで、
コンポーネント内部で、uses()を使って
モデルを直接読んでいいですかね?
0736nobodyさん
2008/03/04(火) 13:39:48ID:???コントロール=コンポーネントていう考えがおかしい
M
V
C
コンポーネント
まったく別物だからwww
=で考えるなよバカwww
0737nobodyさん
2008/03/04(火) 13:42:36ID:???確かにコントローラとコンポーネントを=で結びつけるのは変だね
0739nobodyさん
2008/03/04(火) 14:08:44ID:???Vコンポーネントの中にはVの処理をカプセル化したもの
Cコンポーネントの中にはCの処理をカプセル化したもの
だからCコンポーネントの中にMやVの処理を入れてはダメ、Cの処理だけ
複雑化したら、それはコンポーネントといえない
なぜなら再利用化に適さないから
コンポーネントは複雑な処理じゃなくて、出来るだけ単純化したものを書くべき
0740nobodyさん
2008/03/04(火) 14:09:38ID:???CakePHPでは
Controllersフォルダ中にComponentsフォルダがあるの知ってる?w
Modelsフォルダの下behaviorsフォルダ。
Viewsフォルダの下にHelpersフォルダ。
どうせ知らなかったでしょ? 勉強してでなおしなさい。ば〜かば〜か
0741nobodyさん
2008/03/04(火) 14:12:50ID:???誤解の元だから。
なんでCコンポーネントていえないのかね
0742735
2008/03/04(火) 14:15:36ID:???生成しちゃうのってどうなんでしょうか?
>>734がネタばれしちゃったけど、標準の一部のコンポーネントでは
直接生成しているのよね。
それなら設計的にはコンポーネントにもusesプロパティが
あってもいいと思うんだけど、実際には無い。
コンポーネントにusesプロパティが無いのがおかしいのか、
それともコンポーネントでモデルを直接生成している
一部のコンポーネントの方がおかしいのか。
0743nobodyさん
2008/03/04(火) 14:16:14ID:???0744nobodyさん
2008/03/04(火) 14:17:22ID:???ここはCakePHPスレなので、Componentで問題ありません。
誤解のもの? あなた誤解していたんですかw
0745nobodyさん
2008/03/04(火) 14:18:20ID:???0746nobodyさん
2008/03/04(火) 14:19:09ID:???生成するてのは再利用化に欠けるんだよ
MとCにそれぞれコンポーネント作って
つなげればいいじゃんか
0748nobodyさん
2008/03/04(火) 14:22:37ID:???シーコンポーネントなんて恥ずかしい言い方は論外として
コントローラコンポーネントでぐぐったらStrutsが出てきた。
どうやらJava厨かw
CakePHPスレでStruts用語使わないでくれないかな。誤解の元だから。
0749nobodyさん
2008/03/04(火) 14:23:59ID:???単にお前の用語の使い方が間違っているんだよ。
Cコンポーネントなんて用語はCakePHPにはでてこない。
0751nobodyさん
2008/03/04(火) 14:26:28ID:???0752nobodyさん
2008/03/04(火) 14:27:29ID:???その質問は強烈すぎw
Cake知らない人には答えられないし、
答えたとしたら、自分のマヌケさを露呈することになるw
答えまだかな?逃げるかな?♪
0755nobodyさん
2008/03/04(火) 14:32:35ID:???behavirosの下ならそれはコンポーネントじゃなくてビヘイビアだろw
0756nobodyさん
2008/03/04(火) 14:36:12ID:???外注先で赤っ恥かきそうだなw
0757nobodyさん
2008/03/04(火) 14:37:01ID:???0758nobodyさん
2008/03/04(火) 14:37:38ID:???0759nobodyさん
2008/03/04(火) 14:39:02ID:???0760nobodyさん
2008/03/04(火) 14:44:18ID:???誰がつなぐのでしょうか?
コントローラからモデル内部のビヘイビアは
普通直接見るもんじゃないですよね?
コントローラで、コンポーネントとモデルをつなぐというのならわかるのですが?
あとここはCakePHPスレなのでCakePHP用語で話してください。
0768nobodyさん
2008/03/04(火) 14:58:04ID:???そもそもAuthComponentはコンポーネントで実装するものなのか?
AuthComponentはコンポーネント内部で、呼び出しもとの
コントローラが知らないモデルを、直接参照しているが
これは設計としてありなのか?
設計があまりよくないというのなら、こういうものを作る場合
本来はコントローラにモデルを参照させて、
コンポーネントに渡すべきなのか。
コンポーネントとビヘイビアをつなぐといっている人が
いるみたいですが、この人の頭は大丈夫なのか。
以上よろしくお願いします。
0769nobodyさん
2008/03/04(火) 15:00:26ID:???0770nobodyさん
2008/03/04(火) 15:01:32ID:???0771nobodyさん
2008/03/04(火) 15:02:08ID:???0772nobodyさん
2008/03/04(火) 15:03:58ID:???自演激しすぎwww
0773nobodyさん
2008/03/04(火) 15:04:54ID:???言っている言葉がめちゃくちゃだな
0774nobodyさん
2008/03/04(火) 15:06:34ID:???そう俺とお前が激しく書き込んでるだけだよwww
0775nobodyさん
2008/03/04(火) 15:08:17ID:???>>762と>>763の知能の差に吹いた
767 :nobodyさん:2008/03/04(火) 14:55:20 ID:???
>>766
自演乙
これ書いたの両方お前だなw
0776nobodyさん
2008/03/04(火) 15:09:59ID:???0777766
2008/03/04(火) 15:58:40ID:???CakePHPのビヘイビアは構造上モデルに依存するため
モデルを介さずコンポーネントとビヘイビアを
直接繋げるなど全く理解不能であり脳障害患者もいいところ。
って、分かってて言ってるんだろうけどね。
>>768
俺は「アリ」だと思う。
一般にMVCにおいて、コントローラはユーザからのリクエストを受け取り処理をモデルへ、表示をビューへ依頼するんだけど
モデルへのアクセスを必ずコントローラを通さなくてはならない、とは規定されていない。
現にMVCモデル図などググって見てみると表示担当のはずのビューからすらモデルへ矢印が引かれているだろ?
CakePHPのコントローラは「便利だから」簡単にモデルアクセスする機能が実装されているけど
それを理由に「コントローラ以外はモデルに触っちゃダメ」とは言っていないよね。
つまりコンポーネントからのモデルアクセスは設計的に十分可能であり、後はプロジェクトのコーディング規約次第。
心情的に、あっちこっちからモデルが参照されるとコ汚い感じがするよねって話なら同意。
AuthComponentはコンポーネント内で完結するには結構無理したよねって話も同意。
あれはCakePHPの開発チームが
「コントローラに$components = array('Auth')って書くだけで認証機能組み込めちゃうんだぜー!」
って言うために詰め込んだと思うんだ。アメはそういうの大好きだし。
>>775
>>776
ちげーよこの馬鹿ども。
0780nobodyさん
2008/03/04(火) 16:29:53ID:Zbgc5QoEパフォーマンス悪いのかな。実装にあたりPHPで書かなきゃいけなかったり、拡張子
がctpだったりと精神衛生的に気持ち悪い印象があります。
Smartyをビューコンポーネントとして使ったほうがいいのかな、結構利用者っていますかね
0781nobodyさん
2008/03/04(火) 19:28:59ID:???やっとまともなレスがw
なんかそういうサンプルレベルじゃなくて実運用レベルで
ちゃんとしたMVCになっているオープンソースのアプリ無いかな。
参考になる奴。
もう一つ別の疑問があって、Sessionはモデルではないのか?
という疑問。いろいろな理由で本来あるべき設計を崩すことに
抵抗は無いけど、本来あるべき設計というのを知りたいな。
0782nobodyさん
2008/03/04(火) 19:36:20ID:???拡張子が違うだけの生PHPだから、機能はPHPで出来ることすべてだし、
Smartyよりもパフォーマンスが悪いということは無いよ。
Smartyが使いたいのなら、それもありだと思うよ。
そういう記事結構あるし。ただやり方はいくつかあるっぽい。
どうせなら、綺麗に違和感なく組み込みたいが・・・。
0783nobodyさん
2008/03/05(水) 00:14:06ID:???Modelに保存しないので、Modelの$validate に設定する方法は使えません。
それでいながら、emailのチェックなどコントローラで
自力でやるのは面倒なので、Modelのvalidateで使える機能を
そのまま使いたいです。
0786nobodyさん
2008/03/05(水) 00:27:23ID:???Post/test
あとはコントローラーでvalidateチェックも出来るよ
0787nobodyさん
2008/03/05(水) 00:35:07ID:???$form->create(なんたら)
$form->input(なんたら)
$form->end(なんたら)
でフォームが作れて、データを送信できるのは知っています。
また、コントローラで$this->dateの入力チェックができるのもしっています。
ただ、こういうときに、validate変数に条件を定義するだけで
簡単に入力チェックができるModelの機能と
同等レベルの簡単さでコントローラで入力チェックがしたいのです。
0788nobodyさん
2008/03/05(水) 00:39:22ID:???'test' => VALID_NOT_EMPTY
って書けば出来るけど?
もうちょっと工夫してから文句言ってくれ
0790nobodyさん
2008/03/05(水) 00:51:56ID:???'test' => VALID_NOT_EMPTY,
);
0792nobodyさん
2008/03/05(水) 01:00:31ID:???じゃ、コントローラでチェックするしか無いじゃん。
しかもその縛りの理由がよくわかんね。
0793nobodyさん
2008/03/05(水) 01:02:02ID:???783 名前:nobodyさん[sage] 投稿日:2008/03/05(水) 00:14:06 ID:???
Formのバリデーションってどうやっていますか?
Modelに保存しないので、Modelの$validate に設定する方法は使えません。
それでいながら、emailのチェックなどコントローラで
自力でやるのは面倒なので、Modelのvalidateで使える機能を
そのまま使いたいです。
0794nobodyさん
2008/03/05(水) 01:06:21ID:???それすらしたくないなら、コントローラでやればいい。
0796nobodyさん
2008/03/05(水) 01:08:28ID:???0798nobodyさん
2008/03/05(水) 01:17:41ID:???0799nobodyさん
2008/03/05(水) 01:19:51ID:???最初のカキコにちゃんと書いているのに、
それを理解しないで見当はずれなレスをつけやがる。
まったく馬鹿につかまったもんだ。
ほかの人、お願いします。
どうにかモデルのバリデーション機能を有効活用できないでしょうかね?
単に関数を呼ぶだけなら簡単なんですが、そのエラーメッセージを
ちゃんと表示できるようにしようと思うと?で。
0800nobodyさん
2008/03/05(水) 01:26:17ID:???0801nobodyさん
2008/03/05(水) 01:42:45ID:???0802nobodyさん
2008/03/05(水) 01:46:23ID:???エラーを出すには、ClassRegistryあたりを呼び出さなきゃならないようだ。
そこに登録されていないと、$form->validationErrorsが設定されない。
ビューの頭で$form->validationErrorsを設定すればどうにか出せるが・・・
>>801
何度もいいますが、モデルは使いません。
0803nobodyさん
2008/03/05(水) 02:29:12ID:???その質問の仕方だと
0804nobodyさん
2008/03/05(水) 02:57:49ID:???たとえばセッションに保存したいとか。
0805nobodyさん
2008/03/05(水) 03:20:25ID:???$this->Hoge->set($this->data['Hoge']);
if ($this->Hoge->validates()) {
(成功)
} else {
(Viewに戻るとエラータグにvalidateのメッセージが表示される)
}
これじゃ駄目なの?
DBとの関連が無いModelなら別に使っても問題ないのでは?
0806nobodyさん
2008/03/05(水) 03:33:48ID:???だからセッションに保存するだけで、DBに保存しなくても。
モデルのバリデートを使用する事は出来るって答えもあったじゃん。
なんか根本的にコミュニケーションが上手くいって無いというか、もっと柔軟に考えたら?
自分が分かるからって他の人が分かるとは限らないし、目的が分かれば違うアプローチもあるかもしれないし。
まぁ、こんだけ答えてもらってありがたいと思わないんだから何言っても無駄だろうけど。
0807nobodyさん
2008/03/05(水) 04:11:55ID:???まともなのはないのか?
0808nobodyさん
2008/03/05(水) 04:25:34ID:???App:import('Core','Validation'); //これは多分いらんかも
$obj = Validation::getInstance();
あとてきとーにチェック
0809nobodyさん
2008/03/05(水) 04:30:30ID:???getInstanceでオブジェクト取得する必要は無さそう
Validation::ip();
とか
Validation::date();
で良いみたい
つーかこれぐらい探せば直ぐ見つかるだろうに・・・・
Model→バリデートメソッド検索→バリデート部分をざっくり読む→
Validationクラスが見つかる
0810nobodyさん
2008/03/05(水) 04:46:50ID:???因みに調べたcakeのバージョンは1.2の方ね
1.1は見てみたら仕様が糞過ぎるので自分でやった方が早い
0811nobodyさん
2008/03/05(水) 08:19:49ID:???エラーセットしてくれないしコントローラーでValidation::chibi($debu, $hage);を使うのは意味無さ過ぎね?
equalToなんてもう最高だよね
0812nobodyさん
2008/03/05(水) 09:35:38ID:???Model用に作ったFormのデータからカラム毎にvalidateしているのはModel自身
それなのにModel使うのが無理矢理とか言ってるんだから、後はもう自分で作れば?w
ていうか少しぐらい自分でソース読めよ
0814nobodyさん
2008/03/05(水) 10:30:12ID:???0817nobodyさん
2008/03/05(水) 13:11:50ID:???ここで聞く方がメンドクサイ。
0818nobodyさん
2008/03/05(水) 13:27:00ID:???一つのフォームで二つのテーブルにデータ格納するときとか、
どういうコードで保存して、それでちゃんとエラーメッセージを
出すようにするとかわけわからん。
単純な例では便利なのはわかるけど、コントローラからビュー(というかFormHelper)への
値(エラーメッセージ含む)のセットや「モデルのデータ型から適切なフォーム生成」の
所が見えないところで行われているからぜんぜん流れがつかめない。
0819nobodyさん
2008/03/05(水) 13:51:38ID:???0820nobodyさん
2008/03/05(水) 14:18:03ID:???>>781
CakePHPだと実運用しているサイト自体がまだ少ない上、バージョンによって仕様が激変するため
これだけは入れとけor見とけ!というキラーアプリはまだ出ていないな。YOU作っちゃいなよ。
まー何だかんだ言ってAuthComponentもかなりいいと思うぞ。例えば
----
アカウント名とパスワードを使ったログインが済んでいて、顧客区分がXXXまたは###かつ女性のユーザのみが
アクセスできるコントローラだが、%%%のアクションにだけはアクセスさせたくない。
----
…と頭の痛くなるアクセスコントロールなども少し頑張れば出来る。
モデルはデータの入出力を司るんだから、セッションもモデルの一部じゃね?という話なら理解できる。
データソースがあって、そこへの入出力があるからね。
俺は、モデルの扱うデータソースをほぼRDBMSに限るってルールは単純に歴史的なものだと思うぞ。
セッションは大量検索しないし、接続ごとに切れる特殊性があるだろ!とか言われるかもしれないんだけど
そもそもSQLを使うRDBMS自体が特殊で他と相容れないものなんだから、情報の入出力という観点で取捨選択した結果
最もコスト対効果の大きなものの(=RDBMS)サポートに専門化したんじゃないかな。
今後、XMLDBやODBMSやらが高速かつ手軽に投入できたり、誰かが言ってた
ステートフルWebアプリケーションとやらが台頭してきたら状況が変わってくるかもしれないけど。
つーかモデルってデータの出し入れだけじゃなくて、もっと広義の意味だとビジネスロジック全般を書く所なんだから
何でもかんでもコントローラに詰め込む最近の風習ってちょっと違和感ないか?
コントローラって要はユーザリクエストの受け口じゃん。
0821nobodyさん
2008/03/05(水) 14:20:05ID:???まずいケーキだってケーキ様が言っている。
http://cakephp.org/files/OCPHP.pdf
0822nobodyさん
2008/03/05(水) 14:26:43ID:???0823nobodyさん
2008/03/05(水) 14:35:10ID:???ソースコード見た?
さわりだけじゃなくて、完全に近いマニュアルが無い以上
ソース見なきゃいけないんだけど、$options[?]に何が使えるのか
混沌としすぎている。がんばれば出来るのかもしれないが、
あんなのとがんばるのはもう嫌だ。
もう俺は自作ヘルパーに置き換えたからどうでもいいけど、
管理画面はともかく、あれで思い通りに作るのは無理だろう。
たとえば、データベースの一行だけでなく、複数行をいっぺんに表形式で入力したい。
ここまでは質問&答えがあったきがするけど、
そのとき、どこか一行でもエラーがあれば全部保存しない(それはトランザクションで解決)
で、入力エラーがあったフィールドの下にエラーメッセージを表示させる。
自作のはさらに、同じテキストフィールド入力フォームでも
表形式の場合と通常の状態でプロパティ一つで形を変えられるようにしたり、
ビューのviewとeditでほぼ同じコードが使えるように、入力可能状態と
閲覧状態をフィールド名を指定することで切り替えたりする機能があるけどね。
0825nobodyさん
2008/03/05(水) 15:18:23ID:???0826nobodyさん
2008/03/05(水) 15:19:23ID:???便利だよ。仕事で作っている奴だからあげられないけどw
作っているアプリでFormHelperを使っていたところあったけど、
いろいろ修正する必要があって、それでもFormHelperでがんばっていたけど
あまりの使いにくさに、自作のヘルパーに置き換えちゃったw
これは作りこんでいる人じゃないとわからないだろうね。
上のほうでモデルを使わない状態でのバリデーションの話をしている人がいるけど、
自作の奴はモデルの有無に依存しない
(データおよびエラーメッセージをコントローラで設定する)
ので、そういう用途にもちょっとの修正程度で使えるだろう。
0827nobodyさん
2008/03/05(水) 15:20:16ID:???AuthComponentは使えない。オレオレ的な使い方がしにくい
認証後の飛び先を認証直前の画面に設定できない
だからAuth系はできるだけ単純な方がいい
AuthComponentは柔軟な拡張には向かない
0828nobodyさん
2008/03/05(水) 15:21:35ID:???> たとえば、データベースの一行だけでなく、複数行をいっぺんに表形式で入力したい。
> ここまでは質問&答えがあったきがするけど、
> そのとき、どこか一行でもエラーがあれば全部保存しない(それはトランザクションで解決)
> で、入力エラーがあったフィールドの下にエラーメッセージを表示させる。
少なくともこれが出来たら、「既にあるもの」と認めてもいいけど?
0829nobodyさん
2008/03/05(水) 15:27:50ID:???この自作ヘルパーしなくても普通に出せるやん。
入力エラーがあったフィールドの下にエラーメッセージを表示させる。だろ?
0831nobodyさん
2008/03/05(水) 15:39:35ID:???文章が読めないのか、都合が悪い所を見ようとしないのか。
0833832
2008/03/05(水) 16:04:24ID:???複数行一括入力は俺も試したけどFormHelperつかえねーよな。
少しでも手を入れようと中身を見ると余計な機能ばっかり大量に付いてて振り払う手間の方がかかる。
粒度の感覚がないんだろうな。もっと乱暴に言うと、おもてなし精神がねえ。
わかるよね言いたいこと。
0834nobodyさん
2008/03/05(水) 16:12:26ID:???0835nobodyさん
2008/03/05(水) 16:18:08ID:???Helperの癖に、モデルに依存しまくりなんだよな。激しく意味がわからんし。
たとえば、FormHelper::createだけどこんなコードになっている。
$currentModelってなに? ClassRegistry::getObject($currentModel);ってなに?
ClassRegistryって何をするもの? レジストリってことは誰かがどこかでその名前で登録するわけ?
> is_a($currentObject, 'Model')
モデルかどうかって何でそんなの調べるの? って感じだからね。
0836nobodyさん
2008/03/05(水) 16:18:35ID:???$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;
}
}
}
0837nobodyさん
2008/03/05(水) 17:38:57ID:???モデルは乗ってるんだけど、コントローラーのやり方がいまいちわからない。
このスレに神がいたらブログにまとめてアップしてくれたらうれしいです。
・・・願ってます。
0838nobodyさん
2008/03/05(水) 18:30:03ID:???こいつが書く文章だけ、やけに読みにくい
データベースの一行だけでなく、複数行をいっぺんに表形式で入力したい
コミュニケーション能力無いやろ?
0840nobodyさん
2008/03/05(水) 18:58:46ID:???認証後の飛び先だけ自分でコントロールすればいいだけじゃねの?
認証後の飛び先を認証直前の画面に設定ぐらい楽勝
その程度でオレオレ的っていうのか、しらんが
0842nobodyさん
2008/03/05(水) 19:41:00ID:???この説明"すら"理解できないの?
0843nobodyさん
2008/03/05(水) 19:45:29ID:???0844nobodyさん
2008/03/05(水) 20:17:33ID:???理解が出来る出来ない問題じゃなくて例えが悪すぎるよな
こういやつの書くコードは、どういうコード書くかなんとなくわかる
自分にしかわからないコードしか書かないよな
0845nobodyさん
2008/03/05(水) 20:53:16ID:???認証にこけて認証ページにリダイレクトする前にurlをセッションに入れて
認証完了後にそのurlに飛ばせばいいだけじゃね
0846nobodyさん
2008/03/05(水) 21:02:22ID:???0847nobodyさん
2008/03/05(水) 22:44:19ID:???意味がわかんないのに、”できる”と断言しちゃうやつ。
こいつのほうがよっぽどアフォだろ。
0850nobodyさん
2008/03/06(木) 02:45:38ID:???理解能力とかより、わかりにくい文章でも度が過ぎるよな
特に>>820と>>823
普通のコミュニケーションでもよく聞き返されるやろ?
もっと簡単な文章にできないか?
密度の薄い内容のクセに長文になってんだよwww
0853nobodyさん
2008/03/06(木) 09:43:53ID:???勝手に同一人物にするなw
理解能力も無い、この程度の長文(?)も読めない、コミュニケーション能力も無い。
その上妄想で他人をあおることしかできない。
0854nobodyさん
2008/03/06(木) 09:54:29ID:???長文というか80%が駄文だし
そんな駄文を理解しようとする為に無駄なパワーを使いたくないから
もっと楽に読める内容の濃いわかりやすい文章にしろよ
0855nobodyさん
2008/03/06(木) 10:45:54ID:???YOUの部分を日本語に訳せばいいのかな。
個人的には、MVCの役割分担の考え方についてはフレームワーク自体の根深い部分だと思うから
他の人の話もききたかったりする。Cakeの実装の是非とか。
0856nobodyさん
2008/03/06(木) 11:06:31ID:???理解力が無いというより、単に実戦経験が無いのだろうな。
実戦経験があれば、表形式での入力とか、
セッションもモデルの一部じゃね?(という疑問)とか
そういうのは、これだけ書いてあっていても、あーあのことねって
わかると思うんだが。
0857nobodyさん
2008/03/06(木) 11:22:57ID:???> 誰か simpletest でコントローラをテストする方法教えてください。
コントローラのテストは少なくとも二つのやり方がある。
一つは、CakeTestCase::testAction($url, $params = array()) で
actionを呼ぶ方法。
もう一つはCakeTestCaseの代わりにCakeWebTestCaseを継承したテストクラスを作り
CakeTestCase::get(アドレス)、CakeTestCase::click、CakeTestCase::clickLinkById、
CakeTestCase::setFieldByName、CakeTestCase::clickSubmitById
CakeTestCase::assertPatternなどで、あたかもブラウザを操作しているかのごとく
ページを移動していきながらテストする方法。
> このスレに神がいたらブログにまとめてアップしてくれたらうれしいです。
まとめたいのは山々なんだが、時間が・・・。
0858nobodyさん
2008/03/06(木) 11:26:31ID:???普通のテストではテスト用のデータベース設定が使われるわけだが
(つまりtest_suite_というプリフィックスがついたテーブルを使用する)
CakeWebTestCaseはブラウザでアクセスしていることになるので、
テスト用のデータベース設定が使われない。
これじゃいろいろまずいので↓ここの記事ではCookieを設定することで対応している。
http://gignus.com/blog/posts/view/13
一方俺は、CakeWebTestCase::addHeader を利用した。
0859nobodyさん
2008/03/06(木) 15:18:52ID:???>>858
おぉ〜!神様、仏様。
ありがとうございます。
simpletestじゃなさそうですが、コントローラーはsimpletest でテストできないってことでOKでしょうか。
cakewebtestcase 見てみます!ありがとう。
0860nobodyさん
2008/03/06(木) 17:08:09ID:???駄文が多いだけで、意味のあることがひとつも書いてない
あとは自作ヘルパーの自慢?
悪いけどオナニー的な文章になってるんだよ
気づいてない?
>>856
自演乙
0861nobodyさん
2008/03/06(木) 17:14:50ID:???だろう運転と会話は事故の元
誰もが自分と同じ思考をし理解してくれるなんてありえない。
しまいには相手を馬鹿にして切り捨てる。
個別の技術的な話っていうより、文章の分かりにくさと対応がつっこまれてるんだと思うよ。
0862nobodyさん
2008/03/06(木) 17:21:49ID:???どう考えても他の人の話を聞く姿勢ではないよな!
攻撃的な姿勢でどうやって有意義な情報を聞き出すことが出来るんだよ
0863nobodyさん
2008/03/06(木) 17:30:26ID:???脳障害患者とかな!
一言で言えば嵐に近い。
最近は>>777が常駐して荒らしてるだけだから
0865nobodyさん
2008/03/06(木) 18:00:39ID:???simpletestだよ。
というか、まさかと思うけど、CakePHPはsimpletestに対応していて
simpletestをvendorだっけ?にインストールして、
/test.php にアクセスするとテスト環境になるってこと知らないとか?
1.2の話だけど、1.1でも同じじゃなかったかな?
で、simpletestにはブラウザのようにアクセスするWebTestCaseってのがついている。
CakePHPはそれを継承してCakeWebTestCaseにしているだけ。
0867nobodyさん
2008/03/06(木) 19:28:46ID:???0868nobodyさん
2008/03/06(木) 21:33:38ID:???ありがとうございます。simpletest なのですね。
test.php でアクセスするとできるのも見ました。
勉強します。ありがとうございます!
0869nobodyさん
2008/03/06(木) 22:57:57ID:???└857 >>837 > 誰か simpletest でコントローラをテストする方法教えてください。 コ...
└859 >>857 >>858 おぉ〜!神様、仏様。 ありがとうございます。 simpletestじ...
└865 >>859 simpletestだよ。 というか、まさかと思うけど、CakePHPはsimpletes...
└868 >>865 ありがとうございます。simpletest なのですね。 test.php でア...
テストの仕方ってあんまり情報無いよね。
どこかにまとまってないのだろうか。
0871nobodyさん
2008/03/07(金) 13:19:14ID:TbKF7E3aWindows & cake1.2 です。
app/config/bootstrap.phpに下記のような記述をしました。
$myDefines['aaa']['bbb'] = array(
'a' => 'あ',
'b' => 'びー',
);
これをビューやコントローラーで使用したいのですがどうすれば。。
現状、pr( $myDefines); とかやると定義されてないよnoticeエラーがでる。
0872nobodyさん
2008/03/07(金) 14:59:15ID:???教えて頂いたお礼に 頑張ってまとめてアップしてみたいと思います。
CakeWebTestCase ← これいいっすね。
0874871
2008/03/07(金) 16:43:55ID:???function temp(
return $myDefines['aaa']['bbb'] = array(
'a' => 'あ',
'b' => 'びー',
);
);
0876871
2008/03/07(金) 18:59:05ID:???うへぇ
enum型の表示名とかがおもです。
define使えば問題なく使えるんですが、配列で欲しいわけです。
globalなんてしたくないし・・・。
ダメですかねーん?
0877875
2008/03/07(金) 19:48:19ID:???言った本人が言うのもなんだけど、どうなんだろう?
どうも最近そういうグローバルな値なんて使わないもので、
enum型もほしいと思ったことが無いんだよな。
そういうのは大体クラス内部で収まっているし。
設定ファイルに書いて、必要な箇所(関数の頭かクラスのコンストラクタ)で
読み込むことが多いし。でも確かに少量ならbootstrapに書いたほうがいい気もする。
なんだろう。このもやもや。
0878nobodyさん
2008/03/07(金) 20:35:01ID:???0881nobodyさん
2008/03/08(土) 16:58:13ID:???http://book.cakephp.org/view/39/configuration
0883nobodyさん
2008/03/09(日) 07:54:39ID:???グローバルな値はCakePHPがデェフォでかなり埋め込んでるけどな
グローバルを全く使わないって発想はCakePHPを否定してるよな
0884nobodyさん
2008/03/09(日) 08:01:58ID:???おまいらのクラス定義は全部グローバルやんwww
CakePHPは名前空間を使ってないグローバルなフレームワークやんwww
なにを今さらグローバル気にしてんねん
0885nobodyさん
2008/03/09(日) 08:24:21ID:???こんなグローバル指向なフレームワーク使うんやったら
自分でフレームワーク作った方がマシやろ
0886nobodyさん
2008/03/09(日) 10:41:20ID:???クローバスクラス定義は普通のもの。
0887nobodyさん
2008/03/09(日) 19:37:33ID:???全く無いのもダメだろ要はバランス
CakePHPのような最初から骨組みが決定してるものは
仕様方針と骨組みが多少異なれば
はみだしたこともしないといけない
0888nobodyさん
2008/03/09(日) 19:42:05ID:???要はスクリプト言語のメリットを活かし
プログラム言語のような複雑化を避けるため
グローバルを気にして設計するなら
Javaとかに移るべき
PHPはグローバルを使うことでメリットのある言語
0889nobodyさん
2008/03/09(日) 19:45:41ID:???それなのにRailsの影響でフレームワーク化してるけど
PHPの方が全く追いついてない状態
0890nobodyさん
2008/03/09(日) 19:51:46ID:???global ってキーワードを使った記憶がないんだが?
0891nobodyさん
2008/03/09(日) 20:04:12ID:???グローバル変数なくても作れるね。
0892nobodyさん
2008/03/09(日) 20:08:55ID:???なぜならPHP自体がしっかりしてないんだから
グローバル変数使いまくりの方がPHPにはメリットがある
Railsのマネするなら
Rubyみたいにしっかりとしたオブジェクト指向言語じゃないと
0893nobodyさん
2008/03/09(日) 20:32:06ID:???小さい掲示板つくるだけで、こんなに余計なグローバル変数定義されるのかよ
0894nobodyさん
2008/03/09(日) 20:48:54ID:???symfonyなんて律儀に使った変数をunsetしていくのにwww
0895nobodyさん
2008/03/09(日) 21:00:06ID:???0896nobodyさん
2008/03/09(日) 21:20:15ID:???0897nobodyさん
2008/03/09(日) 21:21:07ID:???お前、PHP知らないだろ?w
PHPではグローバル変数を使うときには、
global って書かないといけないんだよ。
だから使っていて、知らないということはありえない。
CakePHPでは、globalを使わなくて作れるのは事実。
0898nobodyさん
2008/03/09(日) 21:27:54ID:???一箇所しか、使っていなかったな。
その一箇所も、ADODB用のデータベースライブラリで
ADODBの動作モードを変更するためのだけのコード。
0900nobodyさん
2008/03/09(日) 21:57:23ID:???0901nobodyさん
2008/03/09(日) 22:00:31ID:???0902nobodyさん
2008/03/09(日) 22:02:01ID:???グローバル変数
変数にはスコープと呼ばれる有効範囲があります。
スコープの最も外側の部分、 スクリプト中でどの関数にも含まれていない部分で
定義された変数をグローバ ル変数とよびます。
0904nobodyさん
2008/03/09(日) 22:04:30ID:???たとえば、コントローラクラスなどの
<?php
class XXXController extends AppController {
}
?>
の<?php と classの間とか。
まあ、普通はこんなところに、書かないよね?
0907nobodyさん
2008/03/09(日) 22:08:05ID:???どこか間違っているか?
CakePHPでは、作るコードのほぼすべてを
クラスとしてつくり、普通の作り方をすると、
グローバル変数なんか使わないだろ?
0909nobodyさん
2008/03/09(日) 22:21:11ID:???global 変数名 ってしないと参照できないって仕様、
最初はウザイと思っていたが、グローバル変数使わなくなってからは
どうでもよくなったな。これもCakePHPのおかげかな?
0911nobodyさん
2008/03/09(日) 22:37:41ID:???変数宣言してる行数
2000行見つけたんですが!
ちなみに変数名は
$config
これって各クラスでグローバル参照できる変数だよね
0912nobodyさん
2008/03/09(日) 22:38:56ID:???CakePHPというオブジェクト指向のフレームワークのおかげで、
クラスを使ってコアのクラスを継承して実装することが求められ、
必要な値が、クラス変数に格納されるから、しっかりした作り方ができる。
0913nobodyさん
2008/03/09(日) 22:40:31ID:???変数名でグローバルかどうかなんてわかるはずないだろw
それがどのファイルに定義されていたのか
なぜ、それをいえない?
0914nobodyさん
2008/03/09(日) 22:45:26ID:???「変数宣言している行数2000行、その変数名は$config」の時点で
嘘だとばれるだろ。常識で考えて。
0915nobodyさん
2008/03/09(日) 22:51:21ID:???恐ろしいほどスコープに括られてない変数(グローバル変数?)がある
0917nobodyさん
2008/03/09(日) 22:59:32ID:???簡単に言うと、このようにローカル変数として展開されている。
class ??? {
function ??? () {
include(そのファイル)
}
}
一見、ファイルだけを見て、それがクラスの中にないからといって、
それがグローバル変数だとは限らないんですよ。
アフォが自滅して終わりです。ちゃんちゃん。
0919nobodyさん
2008/03/09(日) 23:03:54ID:???0920nobodyさん
2008/03/09(日) 23:11:12ID:???これはクラス外で宣言してるのは何で?
0921nobodyさん
2008/03/09(日) 23:15:12ID:???0922nobodyさん
2008/03/09(日) 23:15:16ID:???そのファイルも、ほかのクラスの関数から
読み込まれているからローカル変数になっている。
それがグローバル変数だと思ったら、どこかの関数で
global その変数名; って書いて、実際にその変数を参照できるか調べろよ。
(別に関数じゃなくても、変数定義されている、そのファイル自身と
そのファイルの呼び出し元関数以外ならどこでもいいが)
できないからさ。
0924nobodyさん
2008/03/09(日) 23:24:41ID:???クラス定義されてるファイルを
クラスから呼び出すということは
クラス内でクラスを作るということになるんだが?
a.inc
<?php
$a="a";
class A{
}
?>
class A {
include "a.inc";
}
0925nobodyさん
2008/03/09(日) 23:28:52ID:???i18n.phpのvar $tasks = array('DbConfig', 'Extract');変数設定により、
フレームワークから読み込まれていますが?
0926nobodyさん
2008/03/09(日) 23:34:25ID:???globalキーワードがついていない、変数定義は
ほぼすべて、グローバル変数ではないと思っていい。
フロントコントローラとは、要するに、どのアドレスでアクセスしても、
まず最初に、index.php といった決まった、phpスクリプトが呼ばれる。
そこからユーザーが作ったコードは、関数の中から呼び出された関数の
そのまた中の関数から呼ばれた関数の・・・といくつかの関数(当然メソッド含む)を経て実行される。
つまり、ほとんどが、関数内に読み込まれるファイルとして成り立っているので、
その関数内スコープで、グローバル変数を定義するには、globalキーワードが必要不可欠。
globalキーワードを使わずに、グローバル変数を作るには、どの関数からも呼ばれていない
index.php ぐらいで定義するしかない。
0929nobodyさん
2008/03/09(日) 23:37:22ID:???そのクラスの継承元クラスが、その変数の値を見て、
その名前からファイル名に変換して、
そのファイルを呼び出す関数に渡して、その関数が読み込んでいます。
意味、わかりますか?
0931nobodyさん
2008/03/09(日) 23:42:19ID:???マニュアルぐらい嫁。
http://www.php.net/include/
ファイルが読み込まれるとそのファイルに含まれるコードは、
include()もしくはrequire()が実行された 行の変数スコープを継承します。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
しかし、読み込まれたファイル内で定義されている
関数やクラスはすべて グローバルスコープとなります。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0934nobodyさん
2008/03/09(日) 23:45:59ID:???正確に言えば、こフレームワークのことは忘れて、
そういうコードがあったとして、そのファイルをURL指定で
直接アクセスされた場合、確かにグローバル変数になる。
しかし、CakePHPではフロントコントローラ。
つまり、>>904のファイルは、index.phpを基点として
いくつかの関数を経て呼び出されるから、
それがグローバル変数になることはない。
0936nobodyさん
2008/03/09(日) 23:51:57ID:???0939nobodyさん
2008/03/10(月) 00:00:57ID:???i18n.phpの親クラスのshellにrequire_onceって書いてあるだろ。
App::importは使ってないなw
0942nobodyさん
2008/03/10(月) 00:09:38ID:???違うよね? じゃあ。俺の言っていることは
最終的にただしかったんじゃんか。
CakePHPはちゃんとしたオブジェクト指向。
当然グローバル変数もほぼ使わずに作られている。
0944nobodyさん
2008/03/10(月) 00:12:04ID:???0945nobodyさん
2008/03/10(月) 01:51:21ID:???0946nobodyさん
2008/03/10(月) 01:54:01ID:???デベロッパにそれを意識させず開発できるのなら問題ないと思うんだけど…
0947nobodyさん
2008/03/10(月) 01:56:29ID:???0948nobodyさん
2008/03/10(月) 01:57:03ID:???の間違いだふ
0949nobodyさん
2008/03/11(火) 14:09:57ID:???DBからデータを持ってくるんだけど、画面によって表示するデータがちょっと違う時ってどうしてますか?
1 - データを取得するメソッドを1個作って、後はViewで調整(使わないデータを持ってくるのがもったいない)
2 - Viewごとにデータを取得するメソッドを複数作る(コードが増える、DBの仕様が変わると作業量が増える)
考え方をお聞かせください。
0950nobodyさん
2008/03/11(火) 14:51:27ID:???引数でconditionsなりfieldsなり変えればいいんじゃね
0951nobodyさん
2008/03/11(火) 17:42:25ID:???どっちもいいと思う。
だけど view で調整のが楽かなぁとも思うし、モデルに書いておいた方が楽なような。
0953nobodyさん
2008/03/12(水) 15:16:31ID:AyOV8gPTで、Bの hoge というフィールドが n の場合という条件を
WHERE句にいれる場合は findAll でどうやればいいのでしょうか?
0954953
2008/03/12(水) 15:22:10ID:???ちなみに、モデルで conditions を指定するやり方ではなくて
B.hoge = n に該当する Aレコードを取得したい、ということです。
0955nobodyさん
2008/03/12(水) 17:07:21ID:???必要なテーブルだけ関連付けてviewで調整してる
テーブルの中のカラムは富豪的に全部持ってきてもバチ当たらないだろ
>953-954
findする前にbindmodelでくっつけてやるのれす
あとそのままだとleftjoinだからinnerjoinにでもしてやればいいんじゃないのかな
でもそんなの調べてる間にSQL書いちゃう方がはえーよたぶん
0956nobodyさん
2008/03/12(水) 21:50:06ID:???をワンセットでやりたい場合はアソシエーション機能を使うのが便利だけど
テーブル結合させたカウントランキング表示みたいな
表示だけにしか使わない複雑なものはSQLで書いた方が効率いいのかな?
これって書き込み編集削除で再利用できないし
0957nobodyさん
2008/03/12(水) 22:19:07ID:???0959nobodyさん
2008/03/13(木) 01:07:36ID:???conditionsに書けばできるのは知っているんだが、
へんな書き方をしないといけないし。
0960nobodyさん
2008/03/13(木) 01:15:18ID:Kbjia7GdEntryモデルとUserモデルという、2つのモデルがあるとして、
以下のようなことをすると、
--------------------
[1] Entryのデータを編集(/entries/edit/1)
↓
[2] Entryのデータを確認(/entries/index、/entries/view/1)
↓
[3] Userから確認(/users/myentries)
--------------------
[2]では即時に[1]での編集内容が反映されるのですが、
[3]では反映されず表示が古いままなんですが、これって何のキャッシュですか?
アクセス元(?)のモデルが違うだけなのにどうして表示される結果が違うんでしょうか?
まだ始めたばかりなので、もし見当違いな質問してたら申し訳ありません、
ヒントだけでも示してもらえると助かります。
0962nobodyさん
2008/03/13(木) 04:04:24ID:???Cakeの場合こういうのは何処に置いたらいいの?
通常のWebサービスと同じくコントローラ作ってそこに書くのが定石?
0963962
2008/03/13(木) 04:19:53ID:???クラス外でhandleCallしたりしなきゃだからベンダーに置くしかないのかな。
0964953
2008/03/13(木) 09:23:03ID:???ありがとです。
とりあえずINNER JOINで解決しました。
やっぱりSQL書いた方が早い&分かりやすいですねぇ。
フレームワーク初めてだから、ついつい全てルールに沿ってやろうと考えてしまう…。
0965nobodyさん
2008/03/13(木) 12:37:07ID:???ビヘイビアのafterFindとかは、モデルごとに呼び出されるのか、
親モデルで一回だけ呼び出されるのか仕様知らない?
たしか親モデルで一回だけ呼び出されるような感じなんだが、
1.2はbetaだし、それがバグなのか仕様なのかわからない。
0966nobodyさん
2008/03/13(木) 15:13:16ID:ERgQfDPOデバッグモードにして投げてるSQL分を追跡してみれば?
というアドバイスはナンセンス?
0967nobodyさん
2008/03/14(金) 10:50:23ID:???8Mじゃすぐリミットオーバーするね
0968nobodyさん
2008/03/14(金) 10:59:44ID:???アソシエーションは便利だけど、ちょっと利用させてもうらために
無駄なSQLもくっついてくるのを我慢しないといけない
0969nobodyさん
2008/03/14(金) 11:01:09ID:???モデルまわりの統制がとれない
0970nobodyさん
2008/03/14(金) 11:10:06ID:???悪魔でも生産性だけを考えた外注用のフレームワークだな
0971nobodyさん
2008/03/14(金) 11:22:16ID:???していく奴がわいているなw
いつも同じ感じだからすぐばれるぜwww
0972nobodyさん
2008/03/14(金) 11:30:51ID:???もっとよい出力場所がないのか?
0973nobodyさん
2008/03/14(金) 11:32:06ID:???0974nobodyさん
2008/03/14(金) 11:38:02ID:???俺はSQL出力は、CSSとJavaScript使って折りたためるようにしているよ。
エラー(黄色い奴)はそもそも、なくさなきゃいけないものだし、
デザインが崩れるだけだからほうっておいている。
0975nobodyさん
2008/03/14(金) 11:39:28ID:???Configure::write('debug', 0);
と設定して
エラー表示したいコントローラーのメソッドの中で
Configure::write('debug', 2);
これ入れたり消したりしながら作業することにした
他に楽な方法あったら教えて
0977nobodyさん
2008/03/14(金) 11:44:06ID:???SQLをログに記録するコラムを参考にdbo_mysqlを継承して
ログを取ることが出来るdbo_mysql_logを作った。
この本は1.1用で、1.2では少しフォルダ構造が違っているから説明しておくと
作ったdbo_mysql_log.phpは /app/models/datasources/dbo に置く。
これフォルダが無いけど、作ればちゃんと動くよ。
0978nobodyさん
2008/03/14(金) 11:48:00ID:???どうしても”SQLだけ表示”じゃないといけないのか?w
デバッグ用なんで力入れて作るものでもないから、
/app/views/layouts/default.ctp に CSSを付け加えて
display:noneで下のSQLの部分を非表示にし、同じく付け加えた
JavaScriptでON/OFFしているだけだけど。
0979nobodyさん
2008/03/14(金) 11:58:52ID:???コントローラにどのページをいれるべきなのか要領がつかめない
0980nobodyさん
2008/03/14(金) 12:24:27ID:???これからCakePHPをいじくりまわしてやるぞ
0981nobodyさん
2008/03/14(金) 12:29:49ID:???> CakePHPて恐ろしくメモリ食うな
> 8Mじゃすぐリミットオーバーするね
どっかのブログに書いてあった”間違い”を鵜呑みにするな。
バグで無限にメモリ消費しているだけだ。
0983nobodyさん
2008/03/14(金) 14:54:30ID:???0985nobodyさん
2008/03/14(金) 14:59:06ID:???0986nobodyさん
2008/03/14(金) 15:08:33ID:???やっているんだが、普通に動くんだが?
どういうことをしたらメモリが足りないのか書いてくれないと
誰も信用しない。
グーグルで検索したというのなら、当然それを見つけているはずなのだから、
どこに書いてあったかかけるはずだ。その書いてある記事を見て判断する。
0988nobodyさん
2008/03/14(金) 15:24:23ID:???PHP4のデフォルトのmemory_limitの値、8Mで
CakePHPが動かないとしたらもっと話題になってるだろ。
常識で考えて。
0989nobodyさん
2008/03/14(金) 22:10:57ID:???フレームワークだからという結論で気にしてないのですが
0990nobodyさん
2008/03/14(金) 22:12:25ID:???0991nobodyさん
2008/03/14(金) 22:55:37ID:???0993nobodyさん
2008/03/15(土) 01:29:06ID:???0994nobodyさん
2008/03/15(土) 02:21:39ID:???ブログラムの暴走じゃないのに8Mいくことがあるし
こんな現象はCakePHPだけ起こってるんだよ
PHPの実務経験8年ある俺が
暴走するプログラムつくるわけねーだろボケが
0995nobodyさん
2008/03/15(土) 02:34:17ID:???大概はデバッガのせいかな。
0997nobodyさん
2008/03/15(土) 02:44:27ID:???メモリオーバーするの俺だけじゃねーだろ?
おまいら見てるだけで実は作業してないんだろ
0998nobodyさん
2008/03/15(土) 02:51:51ID:???何でもプログラム暴走と決め付けるのはおかしいよ
常識的に考えて
0999nobodyさん
2008/03/15(土) 02:53:34ID:???10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。