トップページphp
1001コメント315KB

【PHP】フレームワーク CakePHP 2ホール目

■ このスレッドは過去ログ倉庫に格納されています
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/
0118nobodyさん2007/12/11(火) 21:21:49ID:???
>>113
書き方の違いでしょ。
この例の場合はどちらでもOKだと思う。
二つ以上のモデルに格納するデータをフォームから送るなら
$this->dataにすべきだね。
01191112007/12/11(火) 22:52:21ID:???
>>117

おれのこと?
マルチなんかしてないけど?

というか他にCakePHPのスレあったっけ?
01201112007/12/12(水) 00:43:10ID:???
フォーラムにも同じような話題でてたんだな
しかし決めつけはひどいな 別人だよ

>>117

おまえが無能だ


んで、フォーラムにでてるように array(array('url' => 〜)) をつかうとうまくいかない場合ある
array(array(action)) つかったほうがいい

しかし、この辺りがCakePHPはなんかいまいちスマートじゃないね
0121nobodyさん2007/12/12(水) 13:47:30ID:fuv5QvzR
モデルのヴァリデートにNgWord判定させるにはどうしたらいいのですか?
cake2日目ではまってまっすん
0122nobodyさん2007/12/13(木) 02:11:34ID:???
正規表現でそのワード弾けばいいんじゃない?
01231212007/12/13(木) 10:54:35ID:???
>>122
レスありがとうございます。

正規表現ではじくのは考えたのですが、NGワードをDBで管理してあとから追加や削除をできるようにしたいのです。
ヴァリデートに関数呼び出しなどを書く方法はあるのでしょうか?

言葉足らずですみませんです。
01241212007/12/14(金) 13:58:00ID:???
自己解決しました

validate() をオバーライドするか、別途関数を呼び出してチェックすればいいみたいです。

save()の第二引数に falseを指定すれば、save時にヴァリデートしなくなるようです。
0125nobodyさん2007/12/14(金) 23:47:10ID:dPU6DaHz
オバーライドwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
0126nobodyさん2007/12/15(土) 02:49:30ID:???
一つのテーブルに10個のフィールドがあるとして半分ずつを別の機会にsaveしたい時は後に保存するほうは空の値を許可するにしなきゃいけないんだろうか。すべて必須項目にしたいんだが。
自分でModelに複雑なValidationを実装するのかな
0127nobodyさん2007/12/15(土) 05:19:24ID:Ybu1PDKf
CakeSWXPHPの使い方で良いサイト知らない?

ActionScriptの方の使い方が難しくて、何かわかりやすいサンプルを探してるんだけど。

具体的にはFlexのMXMLとの連携のコードを全て公開してくれてるところ。
0128cWTrQzhwyu2007/12/15(土) 05:32:32ID:???
w8dffW <a href="http://tjfirgbtchzm.com/";>tjfirgbtchzm</a>, [url=http://skatqimodaiu.com/]skatqimodaiu[/url], [link=http://bjtumegdtulp.com/]bjtumegdtulp[/link], http://uteijdlqllxz.com/
0129nobodyさん2007/12/18(火) 02:17:35ID:???
1.2系だとHABTMも標準でsaveできるようになったんな。すごい便利
0130nobodyさん2007/12/18(火) 02:25:56ID:???
>>129

諸刃の剣の悪寒
いじりたいときは返って面倒

まあそのまま使うときはよさそうだね
0131nobodyさん2007/12/18(火) 11:36:32ID:???
モデル書くときって簡単なSQLでもfindとか使わずに
queryでSQL文が見えてた方が開発効率がよくね?
0132nobodyさん2007/12/18(火) 19:39:14ID:???
返ってくるデータが予測つかない人はそうだな
0133nobodyさん2007/12/19(水) 02:24:25ID:???
>>131
俺はすでにそれじゃだめだな。

CakePHPつかう以前からの話だが、
何かのデータを保存・・・時にほかのテーブルにも保存
なんて処理をやりたいことがある。

SQLでいえばトリガーでやるところなのだが、
トリガーはDBMSに依存してしまう。

そういうときにフレームワークで処理を割り込ませられると便利。
CakePHPでいうBehaviorの仕事だ。
0134nobodyさん2007/12/19(水) 02:34:00ID:???
それから、俺は、Behaviorを使うことで
SQL文の拡張のようなことをやっている。

たとえば・・・これは俺が実際に使っている例ではないんだが、
全文検索をするための構文はDBMSによって違う。

しかし、それがなんであれ,
$conditions = array('field' => 'FULLTEXTSEARCH ' . $keyword);
という風にFULLTEXTSEARCH キーワードを条件文に使用できる。

あとはBehaviorのbeforeFindで条件を調べて
DBMSにあわせた適切な構文に置き換えるだけ。
0135nobodyさん2007/12/19(水) 11:09:58ID:???
>>126
saveに渡す配列にフィールドのキーが存在しなければvalidationもされないし
データ更新もされないから気にしないでOK
0136nobodyさん2007/12/19(水) 13:28:34ID:???
Paginationまわりがわかりにくいと思うのは俺だけ? 特に1.2

フレームワークそのままの形だけの使い方をしている分にはいいんだけど
データ取得の命令がfindAllがpaginate関数になったりと、
理由はわからなくは無いんだけど、どうも設計に違和感を感じる。

とりあえず、1.2用のコントローラー以外(たとえばComponent)でも
使えるような汎用的なコードを書いておくよ。といっても怪しいけどな。
変なことをしているかもしれん。まあ俺が見つけた方法ということで。

しかし、コントローラ以外からコントローラのpaginate変数を設定したり
paginate関数を読んだりするのが気持ち悪い。
もっとスマートな方法ないのかな。



※$controllerはどこからか取得

$model_name = 'Post';
loadModel($model_name);
$model = new $model_name;
$conditions = array('id' => '> 3');
$controller->paginate[$model_name] = array(
  'limit'=>2,
  'page'=>1,
  'conditions'=>$conditions);
$data = $controller->paginate($model);

pr($data); //検索情報
pr($controller->params['paging'][$model_name]); //ページ情報
0137nobodyさん2007/12/19(水) 19:37:24ID:nmvrwuDT
recursiveが2以上のアソシエーションを動的に変更する方法がよくわからない。

例えば
blog
ってテーブルがhasManyで
post
ってテーブル持ってて、そのまたさらにhasManyで
comment
ってテーブルを持ってたとする。

普段はそれぞれは一覧で表示したいのでlimitを10くらいに設定してるんだけど、
ブログの一覧からpostとそれに紐付くcommentを全て取得する際に
$this->Blog->findAll();
でコメントだけはlimitを3にしたい。

$this->Post->hasMany['Comment']['limit'] = 3;
$this->Post->bindModel(array('hasMany' => array('Comment' => array('limit' => 3))));
とか試したけど、もう無理。

何か間違ってる?
0138nobodyさん2007/12/20(木) 02:56:46ID:???
出来ないこともないが、
テーブル名を複数形にしない時点で
自分で調べてなさすぎ感が伝わってきて
アドバイスしたい気持ちになれない。
01391/32007/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/32007/12/20(木) 04:06:58ID:XdoaO407
でもblogの一覧から全てのPostとCommentを取り出すのがリs−スが勿体無いときがあったとして、
 1.Postを3件だけ取り出したい
 2.Commentを3件だけ取り出したい
とすれば、

1のPostのほうは
$this->Blog->hasMany['Post']['limit'] = 3;
なり
$this->Blog->bindModel(array('hasMany' => array('Post' => array('limit' => 3))));
なりしてやればあとは
$blogs = $this->Blog->findAll(null,null,null,null,null, $recursive = 2);
で3件だけPostを取り出せるんだけど、

2に関しては
$this->Post->hasMany['Comment']['limit'] = 3;
をやっても
$this->Post->bindModel(array('hasMany' => array('Comment' => array('limit' => 3))));
をやっても、
その後
$blogs = $this->Blog->findAll(null,null,null,null,null, $recursive = 2);
これをすると
count($blogs['Posts']['Comments']);
は10件取り出されてしまうんですよ。
01413/32007/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:rEyzQF0b
$this->Blog->Post->hasMany['Comment']['limit'] = 3;
0144nobodyさん2007/12/22(土) 00:03:39ID:DskgbOKQ
今の最新バージョンいくつ?
ダウソしようと思ったけど、有償なんだな
0145nobodyさん2007/12/22(土) 00:41:39ID:???
>>143
!!!!まさかそんな簡単な解法があったなんて!
ありがとうございます!
本当に俺の単純ポカですね。
0146nobodyさん2007/12/22(土) 11:39:21ID:???
>>144
はい有償ですが何か?
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が機能しています。
どのように修正すれば良いのかご教授願います。
01521512007/12/23(日) 03:40:29ID:nRcoZlZo
IDを出し忘れていました。よろしくお願い致します。
0153nobodyさん2007/12/23(日) 03:44:49ID:w1dc6lHr
RwriteBase /app/webroot → RwriteBase /cake/app/webroot
RwriteBase /app → RwriteBase /cake/app
RwriteBase / → RwriteBase /cake
0154nobodyさん2007/12/23(日) 03:56:58ID:nRcoZlZo
>>153
返答ありがとうございます。
変更し、アップしてみたのですが、うまくいきませんでした。
(変更前と見た目に変化なし)

環境を追記します。
OS…Linux
Apache…1.3.37
PHP…5.2.3
MySQL…5.1.20

引き続きよろしくお願い致します。
0155nobodyさん2007/12/23(日) 07:44:16ID:???
>>151
なんじゃ、それ?

HTTPで公開してるのは、public_html ディレクトリだろ?
まず、そこに、.htaccessがなきゃ話にならんだろ。

さらに、RwriteBaseってのは、クライアント側から見えるURLを書く物で、まるで理解してない。

つか、Apacheのマニュアル読んでるの?
0156nobodyさん2007/12/23(日) 08:29:31ID:nRcoZlZo
>>155
色々な問題をごちゃ混ぜにして考えていたようです。
0から勉強しなおしたいと思います。

public_htmlにapp,cakeフォルダなどをアップし、app/webrootフォルダ内の
.htaccessに>>151のBの内容を追加したところ、
(多分)問題なく動作することを確認しました。

ご迷惑をお掛けし申し訳ありませんでした。
0157nobodyさん2007/12/23(日) 08:41:22ID:???
>>156

おい。

HTTPで公開してるディレクトリに、cakeディレクトリ以下は、"置かない"。安全性が落ちる。
"アップし"なんて書いてるとこ見ると、ローカルに開発用のHTTPサーバも持ってないのか?

それは、共有サーバを使ってる他の人にとって、"迷惑"。
0158nobodyさん2007/12/23(日) 14:49:20ID:???
最近よくも悪くもCakeに初級者が入ってるが基礎をみっちりやってからじゃないと結局フレームワークに使われるぞ
0159nobodyさん2007/12/23(日) 15:49:17ID:???
初心者が、cake使って勉強すれば良いじゃないですか?
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:???
ここまでRwriteBaseだらけだがRewriteBaseじゃないのか
しかも成功したのか
俺が間違ってるのか
0163nobodyさん2007/12/23(日) 18:32:41ID:nRcoZlZo
>>162
すいません、Rewriteでした。
最初の文章をコピペしてたのでずっとRwriteと書いていました・・
0164nobodyさん2007/12/23(日) 18:51:21ID:???
あ、いや、いいんだw
狐につつまれて(←何故か誤用)ただけだから
0165nobodyさん2007/12/23(日) 19:41:40ID:???
狐につねられた?
0166nobodyさん2007/12/23(日) 21:14:17ID:???
まあ、似たようなもん
0167nobodyさん2007/12/24(月) 01:16:59ID:???
>>159
初心者が勉強するには挙動や仕組みが複雑すぎるし、
勉強すべきウェブアプリの流れが自分で組めない。(組まなくて良い)
0168nobodyさん2007/12/25(火) 04:06:06ID:???
なんか楽しようとして使ってるのにCakeの融通聞かないとこをカバーするコード考えたりしてると余計時間かかってる気がする。
0169nobodyさん2007/12/25(火) 10:50:49ID:dm3PQI94
>>168
わかる。でも、書いたあとのコードがわかりやすい。

フレームワークを使う前のコードなんて自分で書いたコードなのにゾっとする。
読めたもんじゃない。。。
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:???
Cコントローラの$usesに使いたいモデルの配列を定義汁
var $uses => array('Amodel', 'Bmodel');
01731712007/12/26(水) 11:40:51ID:???
>>172
すごいありがとう。ほんととっかかりがわからなくて。感謝!やってみます。
勉強会行きたかったな〜。
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:???
この流れの意味が分からないw
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を使い始めてみた。
いったんわかってくるとサクサク作っていけるのが嬉しいね。

ただ、マニュアルは機能を網羅してるわけじゃないんだな。
マニュアルに載っていることが全て、だと思って進めてくと意外としょうもない所でつまずいたりしちゃうね。
まあこれはCakeに限った話じゃないけど。
0183nobodyさん2008/01/03(木) 22:38:40ID:???
>>182
年明け早々に書く事か?w
いや、むしろ好意的な意味で。熱心だな。w
0184nobodyさん2008/01/04(金) 01:10:03ID:???
Cakeはベーカリーとかソースコードとか覗くと楽しい。
マニュアルだけだと(特に1.1系)他のフレームワークに見劣りする。
1.2系はちょっと自分用に改造するとすごい使いやすい。
0185nobodyさん2008/01/04(金) 13:24:08ID:???
なんで改造しちゃうの。
0186nobodyさん2008/01/04(金) 14:28:39ID:???
確かに。何の為にオープンソースのフレームワーク使ってるんだか分からないw
0187nobodyさん2008/01/04(金) 14:59:45ID:???
オープンソースだから改造できるんじゃんw
0188nobodyさん2008/01/04(金) 21:12:38ID:yI22KOOz
pre_betaからbataで変わって気づいたこと(てか、直したとこ)

・admin routesのとき、paginatorの飛び先がおかしいのがなおった
・posts/index/foo:bar が $this->params['pass'] でなくて $this->params['named'] に入る
・posts/view/20 は $this->params['pass'] に入る
・loadModel, loadComponent は非推奨 App:import('Model', 'name') にしろといってくる。
・generateList() も find('list', array()) にしろといってくる。
・webservice 使用時 $this->layoutPath をわざわざ指定しないといけなくなった。
・何気にapp_controller.php, app_model.php の場所がかわってる(そのままでも動くが、気持ち悪いので変えた)

いまんとこ、こんな感じでした。
0189nobodyさん2008/01/05(土) 10:59:20ID:???
情報乙。
bakeで生成されるコードも伴って変更されてるといいな
0190nobodyさん2008/01/05(土) 15:28:31ID:???
>>188
>・何気にapp_controller.php, app_model.php の場所がかわってる(そのままでも動くが、気持ち悪いので変えた)

* Create the same file in app/app_controller.php
* Create the same file in app/app_model.php

って書いてあるからpre-betaと変わっていないと思うんだけど。
0191nobodyさん2008/01/05(土) 17:30:26ID:???
betaでバリデーションの挙動が変わったのか、自作関数でバリデーションする場合
チェックされる(ポストされた)データが配列でわたるようになってる。
使いにくくなった。なんでだ?
0192nobodyさん2008/01/05(土) 18:40:44ID:???
MySQL4.0.25 cake1.2beta に乗り換えたら
$this->Post->del($id);
で、SQLエラーでちまったよ。
エリアスがユニークじゃない!とかいわれたよ・・・
どうしたもんかね?
0193nobodyさん2008/01/07(月) 15:01:55ID:???
じゃあ、俺も。betaで変わったとこ。

モデルの _tableInfo変数 が _scema変数 に変わった
_scemaの構造も_tableInfoとちょっと違う


まあ、この変数は積極的に使うものじゃないけどね。
0194nobodyさん2008/01/08(火) 12:06:39ID:???
cakeって、model名 = コントローラー名 = テーブル名
ってなっているけれど

コントローラー名がテーブル名だと、アクセスするときに変じゃない?

普通画面名とか、機能名とかつけるものだと思っていたんだけれど、
どうなんでしょう

bakeでviewを作成するときに、選択可能なリストにModelがでてくるけれど、
コントローラーだしてほしい

そういうものなのかなぁ
0195nobodyさん2008/01/08(火) 15:41:16ID:???
>>194
別に他の名前も付けられるんだからいいじゃん。
特にコントローラー名なんて変え放題じゃない?
0196nobodyさん2008/01/08(火) 16:24:57ID:???
bakeが、コマンドラインから叩くのめんどくさいし、環境を選ぶ。
規約に従ったphpファイルを作ってアップロード、実行するとbakeされるように出来ないのかな。
0197nobodyさん2008/01/09(水) 17:55:03ID:???
>>195
え、url上の名前って簡単に変えられるの?
モデルの
var $name = 'Post';
ってところの名前変えれば出来るって事?
0198nobodyさん2008/01/09(水) 18:08:04ID:???
>>197
それはむしろモデルに対するテーブル名じゃまいか?
urlウンヌンは、好きな名前でアクション作れば良いかと。
0199nobodyさん2008/01/09(水) 18:57:52ID:???
コントローラとモデルの紐付けは実はあんまり強くないよ。
コントローラで$usesを定義してやれば好きなモデルをいくつでも使うことができるから
極端な話、$usesさえあればコントローラの名前は任意で大丈夫。
つーか、コントローラ名=URL上の表記だから、コントローラ名は
アクセス側から分かりやすい名前にする方が重要だと思う。
正規化でテーブルが沢山増えた場合はなおさら。

で、$usesを定義しないとコントローラ名を単数形にしたモデルを自動で使う。
その時、PHP4はクラス名からモデル名を引っ張ってこれないから$nameを見てモデル名を決める。
$nameはその時に使う。逆に言うとPHP5以降は$nameは不要。

…だったと思うけど、情報古いかもしんないから注意してね。
0200nobodyさん2008/01/09(水) 23:29:04ID:???
1.2betaになって、もしかして$form->inputで出力されるタグがフィールドの種類に応じて変わらなくなったのか?
前は、date型のフィールドなら日付選択のセレクトタグが出たんだが。
0201nobodyさん2008/01/10(木) 21:31:14ID:???
俺、最近$usesすらも使わないで、
モデル使いたい場所で、

App::Import('Model', $model_name); //pre-betaではloadModel
$model = new $model_name();
$model->findAll();

とかやってるw
やばいかなぁ。
0202nobodyさん2008/01/11(金) 00:37:03ID:edIhawVf
>>201

ちょいやばですね
0203nobodyさん2008/01/11(金) 11:30:25ID:???
>>202
どういうふうにやばい?
0204nobodyさん2008/01/11(金) 20:24:44ID:???
フレームワークせっかく使ってるのに規約にそってないから、複数で開発したら異端児
0205nobodyさん2008/01/12(土) 01:07:43ID:???
でもさ。コントローラではusesでいいかもしれないが、
コントローラ以外で、モデルを使う方法他に何がある?
0206nobodyさん2008/01/12(土) 07:06:39ID:???
逆にどういう状況でコントローラ以外でモデルを使うんだ モデル内で別のモデルを使うとか?
0207nobodyさん2008/01/12(土) 09:24:00ID:???
一つのモデルに保存したら、SQLのトリガーのように別のモデルに保存することもありますし、
それをBehaviorにしてBehaviorで使うこともありますし、
テーブルに保存されたデータをもとに値を返すComponentも考えられますし、
コントローラ以外のどこででも、モデルを使うことって考えられますよ。
0208nobodyさん2008/01/12(土) 21:32:01ID:4ugQnDqA
それでしたら、 MVC が成り立たなくなるのでは?
少なくとも

「早く開発できる」

も大切ですけど、

「規約に沿った開発」

を心がけた方が最終的には良いかと思いますが、いかがでしょうか。
0209nobodyさん2008/01/13(日) 00:11:18ID:???
>>208
この程度でMVCが成り立たなくなるわけが無い。

規約を守ることが目的になっていませんか?

0210nobodyさん2008/01/13(日) 01:41:55ID:???
規約守った方がいいにきまってる。
こういうやつとは仕事したくないな。
汚いソースを読まされそうだ。
0211nobodyさん2008/01/13(日) 10:00:42ID:???
パフォーマンス的にはどうなんだろう?
1つのアクションでしか使わないモデルを、
コントローラ全体から呼び出すのはどうなのかな?

あまり、変わらなければ、規約に沿ったほうがいいね。
0212nobodyさん2008/01/13(日) 14:32:44ID:???
>>207のような状況は普通にある

さすがにテンプレートやヘルパーでモデル呼び出しはしないけど
ヘルパーのようにモデル同士が連携したくなる場合なんてざら。
開発規則で決めればコンポーネントからモデル呼び出しも十分
視野に入るだろ。

そもそもコントローラの責任範囲はあまりに広すぎる。
save()時に関連キーの値を意識しなきゃいけないとかアホだろ
モデルに任せとけよそんなもん。
0213nobodyさん2008/01/13(日) 19:43:12ID:???
> さすがにテンプレートやヘルパーでモデル呼び出しはしないけど

本当にそう?

たとえば、xoopsなんかにある、”ブロック”

メインのページの左右に表示され、ページの中のコンテンツとは
直接関係無いような情報(もちろんデータはデータベースにある)を
表示するとき、それをどのように作る?
0214nobodyさん2008/01/13(日) 19:47:23ID:???
CakePHPにはお世話になっているから
悪いことは言いたくないが、一つだけ言わせてくれ。

function foo($v1=null, $v2=null, $v3=null) {
 if($v1がなんたらだったら) {
  $v1 = $v2;
  $v2 = $v3;
 }
}

こういうコードはやめてくれ。引数とコードがわけがわからなくなる。
02152122008/01/13(日) 19:55:54ID:???
>>213
requestAction
0216nobodyさん2008/01/13(日) 20:39:16ID:???
規約に沿わずパフォーマンス云々を求めるならフレームワークなんか使うなよ
0217nobodyさん2008/01/13(日) 21:12:12ID:???
CakePHPでトランザクションの使い方を教えてください。
■ このスレッドは過去ログ倉庫に格納されています