【PHP】フレームワーク CakePHP 11ホール目【v1.3】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/02/16(水) 21:52:35ID:zCTGjUMqCakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう
※sage推奨
※質問時もsageること
※他フレームワークとの比較等はスレ違いです
テンプレは>>1-5くらい
■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
the Bakery
http://bakery.cakephp.org/
CakeQs
http://cakeqs.org/
CheatSheet (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf
github - cakephp
http://github.com/cakephp
■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
http://book.cakephp.org/ja
0008nobodyさん
2011/02/17(木) 08:07:45ID:???マニュアルやcake辞典を読んだところ、
$this->Model->set('id',4);
$this->Model->saveField('buy_count', 3);
$this->Model->saveField('sold_out', 1);
このようにすれば、複数のフィールドを更新できるのですが、いくつものフィールドを
更新した場合、何行も繰り返さないといけない。。
こんなまどろっこしいことせずに、saveとconditionで一気に上書きするのがスマート
なやり方なのでしょうか。
0010nobodyさん
2011/02/17(木) 11:12:59ID:???いつの間にかCake風の構成にしてた。
多重配列って長くなって面倒だけど、わかりやすいよね。
0011nobodyさん
2011/02/17(木) 18:35:10ID:???バリデーション(モデル)とか
プログラム上での(コントローラー)表記を
ローカライゼーションしたい場合は
どうしたらいいの?
0012nobodyさん
2011/02/17(木) 18:39:45ID:???idを主キーにしていて
データの取り出しで
this->model->
findAllByName($hoge)
として
this->model->save($this->data)
した場合、上書き更新ではなく新レコード挿入になりますよね?
主キーでモデルのデータを取り出さない限り新レコード挿入になるのは分かるのですが、CakePHP仕様だと主キーを一つしか扱えないのでupdateAll()を使うしかないのでしょうか?
主キー以外のフィールドでの検索対象の
レコードを更新したい場合、
スマートなやり方だと、どういうやり方が一般的でしょうか?
0013nobodyさん
2011/02/17(木) 19:00:48ID:???idが$dataに含まれていれば更新になるよ
0014nobodyさん
2011/02/17(木) 20:58:03ID:???> バリデーション(モデル)とか
cakeplusというプラグインを使うか、
自分でエラーメッセージを置き換えるコードを書く。
> プログラム上での(コントローラー)表記を
コントローラーの好きなところで__()関数を書く。
0015nobodyさん
2011/02/17(木) 21:41:32ID:???idというフィールドを主キーにしていて
nameフィールドは主キーではありません。
findAllByNameしてレコードを特定していてもnameフィールドは主キーではないので、上書き更新されません。
新規レコード挿入になってしまいます。
0016nobodyさん
2011/02/17(木) 22:02:41ID:???users_codesのようにアンダーバーをつけてもいいですか?
その場合は外部からアソシエーションするときはusers_codes_idでok?
またフィールドにもbirth_dateのようにアンダーバーを使ってもいいですか?
0017nobodyさん
2011/02/17(木) 22:41:35ID:???横からだが、
$result = $this->Model->findAllByName($hoge);
これで取得できるデータには当然idが入ってるぞ。
ただ俺のほうでやったら、
$result = $this->Model->findAllByName($hoge);
debug($result); //データあり
debug($this->data) //NULL
だけどな。
>>16
試した事はないけど、users_codesの様に両方とも複数形で繋げると、
多分HABTMの中間テーブル扱いになっちゃうかもね。user_codesの様に1個目が単数系ならやったことある。
フィールドにアンダーバーはやってる。
0018nobodyさん
2011/02/17(木) 23:48:53ID:???絞り込む際のフィールドが主キーでなくても、それに合わせて上書き更新できるんですね!
ということは
$res=this->model->findAllByName($hoge);
this->model->save($result);
でいけるということですね!
普通、this->model->hoge
みたいにデータを取得しにいったら
自動的に$this->dataに結果が格納されるもんじゃなかったでしたか?
0019nobodyさん
2011/02/17(木) 23:51:37ID:???返信ありがとう!!!!
テーブルをuser_codesと名付けたとき
外部からアソシエーション組む際は
user_code_idってフォーインキーを用意してやればいいですか?
0020nobodyさん
2011/02/18(金) 01:11:29ID:???レコードが膨大な数になったときの工夫とかあるのかな?
それとユーザー写真をアップロードさせたら、どういうふうに管理すればいいですか?
データベース側はあくまでファイル名を記録しておいて、画像はwebroot/image/フォルダ内に一括して10万ファイルとかですか?
0021nobodyさん
2011/02/18(金) 05:55:46ID:???普通といわれても、やってみた結果がそうだっただけだからなぁ。
一応もっともらしい事を書くと、とあるModelのクラスのメソッドを呼んだだけで、
別のクラスであるControllerのメンバ変数に勝手に値を代入ってのは、
普通はしないと思うぞ。越権行為すぎる。
>>19
http://book.cakephp.org/ja/view/903/%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A8%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E8%A6%8F%E7%B4%84
一応、peopleテーブルはPersonモデルなのは、変な変換が入ったとかじゃなくって、
ほんとにそういう規約。
>>20
10万レコードも扱ったこと無いからわからん。
アップロード系のプラグインが英語圏製だけど一杯あるから探したらいいんじゃないかな。
プラグインが、10万レコード考慮してるかはしらんが。
最近のファイルフォーマットだと違うかもだけど、1ディレクトリ5000ファイルくらいにしといたほうがI/O的に良いんじゃない?
0022nobodyさん
2011/02/18(金) 21:20:08ID:???レコード数の多さはmysqlのチューニングの問題じゃないの?
ファイル管理はDB+非公開ディレクトリに小分けにすんのがいいんじゃないかね
0023nobodyさん
2011/02/18(金) 22:31:57ID:???非公開エリアにおいて、画像データ取得してGDで画像生成
する処理が発生するから負荷がかかるだろ。
0024nobodyさん
2011/02/18(金) 22:35:20ID:???fopen()して適切なheader()書いて出力するだけだろ。
そのほうがアクセスコントロールも出来るし。
まぁ必要なければ余計な処理だけどな。
0026nobodyさん
2011/02/19(土) 01:07:14ID:???10058.jpgは
pic/58/ フォルダの中に
17434.jpgは
pic/34/ フォルダの中にといった具合で
0027nobodyさん
2011/02/19(土) 01:23:37ID:???どうしたほうが良いかは要件と仕様しだいなんじゃないの?
ユーザーアップロードしたファイルの置き方は、CakePHPは特に関与しないし。
正解が無い部類の問題だから、
要件を満たす仕様を、見合った経験を持つアプリケーション設計者が考えるべき。
>>26 は >>20 だと思うんだけど、
この質問をするくらいのスキルなら、10万レコード・10万ファイルを扱うシステムを、
試行錯誤無しに設計するのは無理だと思うよ。
0028nobodyさん
2011/02/19(土) 01:56:06ID:???0030nobodyさん
2011/02/19(土) 03:08:31ID:???0032nobodyさん
2011/02/19(土) 07:28:08ID:???ブログでいうブログタイトルなどの、編集する可能性はあるけど複数のレコードは存在し得ない情報ってどの様にして管理すればいいのでしょうか?
単一レコードしか存在し得ないのにRDBMSで管理するのはどうなのかなぁと思い、悩んでいます。
ネイティブPHP使ってたときは、そういった設定項目を纏めたSettingsクラスというものを作り、そのインスタンスをシリアライズしてたんですが…
Cakeだとみなさんどうしていますか?
0033nobodyさん
2011/02/19(土) 09:15:09ID:???>ネイティブPHP使ってたときは、そういった設定項目を纏めたSettingsクラスというものを作り、そのインスタンスをシリアライズしてたんですが…
Configure::write('setting.title', 'ブログタイトル'); とかできるんで、
Settingsクラスというものになれているなら、bootstrapに設定を記述するのがいいのでは
0034nobodyさん
2011/02/19(土) 13:48:40ID:???setting_nameとvalueみたいな感じで
0035nobodyさん
2011/02/19(土) 14:22:36ID:???viewにstaticで書いたほうが扱いやすい気がするけど。
0036nobodyさん
2011/02/19(土) 15:19:39ID:???パスワードが自動的に暗号化後の文字長になって再入力されています。
これってエラーがあった時は常にパスワードのところだけを空にしてリセットするってのが正しいのかな?
大手サイトとかも、空リセットしてますよね?
0037nobodyさん
2011/02/19(土) 15:42:41ID:???0038nobodyさん
2011/02/19(土) 15:45:56ID:???個人ユーザーの暗号化前のパスワードは保持していないのかな?
それって普通?
結構同じパスワードをいろんなネットサービスにおいて使ってるんだけど、
サービスの運営はユーザーのパスワードは把握できない仕組み!?
0039nobodyさん
2011/02/19(土) 15:52:20ID:???漏れた時しゃれにならんぞ
0040nobodyさん
2011/02/19(土) 15:59:40ID:???0041nobodyさん
2011/02/19(土) 16:09:05ID:???0042nobodyさん
2011/02/19(土) 16:18:50ID:???例えば$js->linkとかでリンク先やパラメータに変数を渡したり
メッセージを国際化したいとかそういう時はJsHelper使ったら楽でしょ。
もちろんJsHelperだけでは足りない部分もあるから場面によって使い分ければいい。
0043nobodyさん
2011/02/19(土) 16:19:05ID:???まぁ、そういうな
>>40
通常は可逆式の暗号化をしておいて、
メール送信などで利用する時だけ
元のメアドに戻してメールするのが普通だよ。
0044nobodyさん
2011/02/19(土) 16:59:48ID:???JsHelperってjQueryなどの一部のメソッドをphpから呼べるみたいだけど、
正直jQuery書いたほうが書きやすいし、使う気にはなれないな。
普通にjQueryが書ける人ほど、あまり意味の無いヘルパーだと思ってる。
>>38
サイト運営者がユーザーのパスワード見れたらまずいだろう。
自分で運営してるほぼ個人サイトならともかく、
あまり信用できないバイトとかもスタッフに居るケースもあるんだぞ。
バイトが何かやらかしても、自分(自社)に責任が来るんだから、
パスワードの平文はやめとけ。
だから、パスワードはハッシュしか残さないのが普通だな。
非可逆なものだから、パスワードリマインダーは、
ユーザー登録と同様に、短時間有効なトークン付きの
パスワード再設定URLを、登録時のメールアドレスに送るのが良くある実装。
0046nobodyさん
2011/02/19(土) 17:42:55ID:???会員制サイト作るならまずそこから勉強するだろ。
>>45は完全独学かよ。知識なさ過ぎる。
0049nobodyさん
2011/02/19(土) 18:25:35ID:???0050nobodyさん
2011/02/19(土) 19:55:20.04ID:???テンプレートと入れ替える方法どこかに載ってないでしょうか
005132
2011/02/19(土) 20:00:34.20ID:???>>33
なるほど、専用のクラスがあるんですね。
というか、Cookbookに載ってますね。勉強不足でした。
>>34
最初その方法を考えたんですが、前述のとおり違和感があったので悩んでました。
でも結構メジャーなWordPressがその方法を取っているってことは、パフォーマンス的には良い方法なんですかね?
0052nobodyさん
2011/02/19(土) 21:05:10.89ID:???DRYを積極的に無視してクラスもなるべく作ってない。
メリットは、入り組んだクラス呼び出しや
汎化してぱっとみなんの処理か分かりにくいコードが少ない。
だからプログラミングが苦手な人でも、改造したいところを変えれば、
あまり他に影響させずに改造できる。
デザイナーなどの支持を得ての普及だね。
それもひとつのやり方だけど、
コードが読みにくいし俺はあまり好きじゃないな。
設定がDBにあるのは、そういった考えの下、
管理画面から変更できるようにするためだろうね。
WordPressは基本的に設定ファイルを変えて、アップロードとかする必要が無い。
005334
2011/02/19(土) 22:02:05.74ID:???パフォーマンス的にはSQLを一回投げる分悪くなりそうだけど、
>>52の言うように、管理画面からいろいろ設定を変えたりすることを考えると
DBで保持してた方が更新が楽な気がするなあ
「絶対固定!」って値ならファイルのどこかに書いちゃってもいいと思うけど
0054nobodyさん
2011/02/19(土) 22:18:34.42ID:???WordPressはオープンソースで配布して使うから、
ブログ名の設定が管理画面から出来る必要があるだけだし。
そういう設定なんて早々変更はしないでしょ。
開発者が設定ファイルを変更するなんて簡単だし、
DBに入れるほうが余計なトラブルの元さね。
設定をDBに入れると、開発中のデバッグで泣きを見ると思うよ。
0055nobodyさん
2011/02/20(日) 00:35:05.01ID:???0056nobodyさん
2011/02/20(日) 02:37:47.09ID:???使い回しする時に楽だからね。
サイト名とかサイト説明とかそういうのはDBで管理画面からいじれるように。
画像置き場のパス設定だとか外部APIのTokenみたいなのは設定ファイルに入れとくって感じで。
0057nobodyさん
2011/02/20(日) 02:45:57.34ID:???それならDB使わなくても管理画面から弄れる様に出来ません?
006059
2011/02/20(日) 03:31:43.25ID:???だめっぽいですね。結局DBか…。
0061nobodyさん
2011/02/20(日) 11:43:48.57ID:???定期的(?)に古いセッション情報を削除しているらしく、
そのタイミングでDB側が処理に詰まってしまう。
誰か解決方法教えてください。
0062nobodyさん
2011/02/20(日) 16:20:03.81ID:???どうやって配置すればいいんだろう?
0063nobodyさん
2011/02/20(日) 16:31:12.20ID:???へ行った時に
hoge.com/users/view/username
(usersがコントローラー、viewがアクション、usernameがパラメーター)
の内容を表示させるには
routes.phpをどのように表示させればいいでしょうか?
ここの部分以外は
http://hoge.com/controller/action/parameter
と通常の形にしたいです
0064nobodyさん
2011/02/20(日) 18:00:18.41ID:???0065nobodyさん
2011/02/20(日) 19:54:03.09ID:???usernameがパラメーターである条件が明確じゃないと
両方のパターンを共存させるのは無理くさいな
やるとしたらroutesじゃなくてrewriteの分岐だろうね
例えばusernameの先頭1文字が数値の場合はパラメータとして判別するとか
0066nobodyさん
2011/02/20(日) 21:45:26.61ID:???routesで先にユーザーページ以外のURLにマッチするパターンを羅列して振り分ければ?
あとはユーザーネームとしてあり得るパターンの正規表現を使うか
0067nobodyさん
2011/02/21(月) 00:10:51.01ID:qx7ew/PUif($this->User->validates()) {
echo "ok";
}else {
echo "ng";
}
だったときに必ずOKになってしまいます。
modelのvalidation定義で下記のようにしたらしたで、
条件を満たしてるのバリデーションエラーが出っ放しになります。
これって解決できますか?
public $validate = array(
'username'=>array(
array(
'rule' => 'alphaNumeric',
'required' => true,
'message'=>'Username has to be 10 to 20 alphaNumeric characters!'
),
array(
'rule' => 'isUnique',
'required' => true,
'message'=>'This username is already in use.'
),
array(
'rule' => array('between', 10, 20 ),
'required' => true,
'message'=>'Username has to be 10 to 20 alphaNumeric characters!'
)
),
)
0068nobodyさん
2011/02/21(月) 00:24:48.77ID:qx7ew/PUvalidationって基本的に if($this->User->save($this->data)){} と絡めて使いますよね。
他の判断条件も組み合わせた時、
入力フォームのバリデーションエラーも一緒に出力したい場合ってどうすればいいですか?
下記だと、まず他の条件を先に判定してしまうため、他の条件判断が満たされない場合は
$this->dataのバリデーションエラーが出力されません。何かスマートな方法をご教授くださいませ。
if(他の条件判断){
if($this->User->save($this->data)){
echo "saved!";
}
}else{
echo " ERROR!! 他の条件が満たされていません!"
}
}
0069nobodyさん
2011/02/21(月) 00:38:18.41ID:qx7ew/PUsaveをこういう使い方しますか?
結果としてはバリデーションも他の条件のエラーも一緒に表示されるようになりました。
ただsave関数なのにsaveしないところで記述するってのが少し解せないかんじもします。
if(他の条件判断){
if($this->User->save($this->data)){
echo "saved!";
}
}else{
$this->User->save($this->data);<<<<<<<<<<<<<<<<<<<<<<<<<<<<
echo " ERROR!! 他の条件が満たされていません!"
}
}
0070nobodyさん
2011/02/21(月) 00:46:05.47ID:qx7ew/PU「他の条件以外」を完全に満たしていて、「他の条件」を満たしていない時にsaveされてしまいますね。。。(当たり前か・・・)
0071nobodyさん
2011/02/21(月) 01:02:03.32ID:???0072nobodyさん
2011/02/21(月) 03:01:11.38ID:???CakePHPであることを隠蔽するってあったけど、どうしてもコントローラ名(URLの一部)が複数形の単語だったりで、特徴あるからすぐバレるよね?
かといって命名規則を無視出来んし
0073nobodyさん
2011/02/21(月) 04:13:38.11ID:???0074nobodyさん
2011/02/21(月) 04:29:12.00ID:???リレーション先のテーブルのモデルのphpファイルも用意してやらなきゃいけないの?
リレーション元のモデルからbelongsToとか使えば特に要らない?
0075nobodyさん
2011/02/21(月) 04:46:55.30ID:???なんでCakePHPはControllerにビジネスロジックを書いちゃうの?
MVCとかちゃんと理解して作ったとは思えないんだよね。
0076nobodyさん
2011/02/21(月) 05:56:25.75ID:???0077nobodyさん
2011/02/21(月) 08:20:26.21ID:???コントローラ名
モデル名(ただし単数系)
ビューのフォルダ名
DBのテーブル名
を統一しろ!的になってますが
UsersのDBテーブルに対して、同じ名前のコントローラー、モデル(単数系)、ビューのそれぞれを持っていたとします。
ただしhttp://www.hoge.com/registrations/として、
registrations_controller.phpとregistration.php上でメインでUsersテーブル(外部モデル)を扱うことって可能ですか?
もちろんregistrationsというテーブルは一切持たないものとして、usersテーブルのレコードを処理するためだけのコントローラーです。
0078nobodyさん
2011/02/21(月) 10:51:44.25ID:???ControlloerはあくまでModelを実行して結果をViewに渡す目的で使ってるけど。
0080nobodyさん
2011/02/21(月) 11:23:25.80ID:???0081nobodyさん
2011/02/21(月) 13:16:29.48ID:???テンプレートと入れ替える方法どこかに載ってないでしょうか
0082nobodyさん
2011/02/21(月) 13:22:14.73ID:???CakePHPの場合、どういうURLにしたいか考えずに、
テーブル/Modelから考えたほうがいいよ。
そうすると、良くある形として .com/users/registration みたいな感じになる。
で、こういう規約まんまのURLがまずいなら
routesで調節するんだ。
一応、これがセオリーだと思う。
まぁ、routesって使いこなすのに慣れが必要だから、
セオリーになりきれてないかも。
0083nobodyさん
2011/02/21(月) 13:53:20.59ID:???MVCに慣れていない最初はControllerに書いちゃいがち。Controllerは動きがわかりやすいからね。
そのうちああこんなのモデルに書いた方がいいだろ。って気がつく。
0085nobodyさん
2011/02/21(月) 18:41:10.45ID:???0086nobodyさん
2011/02/21(月) 19:09:17.15ID:???ReCaptchaは王道だけど会員にならないといかんし、
KCaptchaは地味過ぎる
Securimageが一番いいけど、他の人のブログ参考にしても、マトモに動かん
0087nobodyさん
2011/02/21(月) 20:13:42.08ID:???チェックボックスAが選択された場合テキストCが必須
チェックボックスBが選択された場合テキストDが必須
のようなvalidateはどうかけばええでしょう?
0088nobodyさん
2011/02/21(月) 20:48:44.56ID:???0090nobodyさん
2011/02/21(月) 22:51:13.06ID:???Controllerがテーブル名っておかしくね?
他のテーブル使う時どうすんのよ?
てゆーか、普通コントローラはユースケース毎に付けね?
0091nobodyさん
2011/02/21(月) 23:03:58.43ID:???ドキュメント読め
0092nobodyさん
2011/02/22(火) 01:12:43.84ID:???ControllerとModelが一対一であるとは限らないのに
Modelの名前をControllerに付けるというのが意味不明だって言ってんだよ。
意味分かる?
0093nobodyさん
2011/02/22(火) 01:56:19.29ID:???自分のやりやすい形でやればいいじゃん。
ビジネスロジックもコントローラに書くことはできるわけだし。
少なからず、コントローラとモデルの名前が一緒だったら、
このコントローラは、このモデルに関する物だなと直感的にわかる
0094nobodyさん
2011/02/22(火) 02:01:08.73ID:???無能な技術者が思いついたとしか思えんアホみたいな仕様だよな、あれ
10年後は誰も使ってなくて「昔あんなんあったよねーキャハハ」って笑われてるよ
0095nobodyさん
2011/02/22(火) 02:14:52.46ID:???0096nobodyさん
2011/02/22(火) 02:45:01.87ID:???0097nobodyさん
2011/02/22(火) 02:49:34.76ID:???select user_name from users;
から取得したデータをビューで出力する際、テンプレートで例えばですが、
<?php foreach (...): ?>
<?php echo h($data['user_name']) ?>
<?php endforeach; ?>
のような制御が必要ですよね。
Cakeって配列の命名はcamelCaps形式だと思うのですが、カラムがuser_name (アンダースコアを含む) の場合、
配列のキー名はsnakeCase形式になりますよね。
命名規則がバラけると思うのですが、その辺りどちらかに統一するとか指針はあるのでしょうか。
0098nobodyさん
2011/02/22(火) 03:14:21.97ID:???テーブル名をuser_nameじゃなくてusernameにするのがいいです。
HABTMの時に頭がごちゃごちゃになります。
無理ならInflectorを通してみて確認するといいよ。
どっかにそういうサイトもあったけど忘れた。
009998
2011/02/22(火) 03:20:23.25ID:???0100nobodyさん
2011/02/22(火) 04:00:42.68ID:???それぞれのユーザー同士で1対1の簡易メッセージの送受信をさせたい時、下記のような設計で問題無いでしょうか?
■モデルのアソシエーション
HogeUser hasOne Mailbox
MogeUser hasOne Mailbox
PogeUser hasOne Mailbox
Mailbox HATBM Message
■DB
mailboxes:
id
mailboxes_messages:
mailbox_id
message_id
sended (true=送信側, false=受信側)
opened(true=開封済, false=未開封)
messages:
id
title(件名)
body(本文)
created
*_usersテーブルはそれぞれmailbox_idフィールドを持っています。
*_usersはそれぞれ構造が全く異なるのでusersとして統一させることはできません。
0101nobodyさん
2011/02/22(火) 04:47:39.88ID:???CakePHPでキャメルケースになるのは、配列のキーじゃなくって、
モデル名だよ。
usersテーブルはUserModelが担当するんだ。
UserModel->find()したら、データは
$this->data['User'] = カラム名をキーとした連想配列 //1件の時(ってこうなるよね?)
$this->data = array(['User'] = カラム名をキーとした連想配列, ... ) //複数件のとき
こんな感じだったはず。
UserModel部分がUserという配列のキーになってる。
98の言うとおり、HABTMの中間テーブルがアンダーバーで繋ぐから、
テーブル名にアンダーバーを、それ以外で使うのはお勧めしない。
カラムには全然おk
0102nobodyさん
2011/02/22(火) 05:00:04.31ID:???設計についてはスレチだし、めんどうだから考えないけど、CakePHPとして一言。
HABTMの中間テーブルには、プライマリキーと外部キー以外はもてない。
別にカラムがあっても動くけど、その情報はきえてしまうんだ。
だからsended openedがだめ。
消えてしまうというのは、mailbox_id = 1にmessage_id = 1と2の2通のメッセージがある状態で、
新たなメッセージ message_id = 3がきた場合、
DELETE FROM mailboxes_messages WHERE mailbox_id = 1 してから、
INSERT文でmessage_id = 1と2と3を発行するんだ。
だからmessage_id = 1と2のsended openedはきれいさっぱり。
中間テーブルに何か情報を持たせたいなら、HABTMじゃなくって
hasManyとbelongsToで作るべき。
当然、HABTMじゃないからfind()の仕方も変わってくるけどね。
0103nobodyさん
2011/02/22(火) 07:55:59.50ID:???基本はキャメライズするんだけどDBテーブルは慣習的にアンダースコアだからフィールド名を配列キーとして使うときだけはそのまま
0104nobodyさん
2011/02/22(火) 12:23:15.78ID:???Userと言うモデルがあったとして、それぞれmodels、controllers、views
に入れないと行けない。viewsに関してはディレクトリを作成して。
一つのディレクトリ内にまとめて
/app
/user
└controller.php
└model.php
└index.ctp
└form.ctp
でもいい気がする。ビューが増えるならviewディレクトリ作って入れるとか。
こうすればFTPで転送する時、userディレクトリだけで良いし。
0105nobodyさん
2011/02/22(火) 13:15:54.00ID:???ドメイン下に/users/
ってつけたら、大抵ページが存在するから見破るのがラクすぎる
0106nobodyさん
2011/02/22(火) 13:17:18.37ID:???てかMVC毎にフォルダ分けるのってCakeだけじゃないというか、
その構成の方が主流じゃないのか?
むしろ他にある?
■ このスレッドは過去ログ倉庫に格納されています