【PHP】フレームワーク CakePHP 11ホール目【v1.3】
レス数が1000を超えています。これ以上書き込みはできません。
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
0002nobodyさん
2011/02/16(水) 22:01:14ID:???0003nobodyさん
2011/02/16(水) 23:30:29ID:???0004nobodyさん
2011/02/17(木) 00:27:39ID:???とすると、Userという配列の下に情報が入っている配列を取得するのですが、
Userの部分をなくしたものを取得することはできないでしょうか?
一つ一つデータ取る時、$item['User']['api']ではなく、$item['api']だけ書くほうが楽なもので。
[0] => Array
(
[User] => Array
(
[id] => 1
[api] => google
[coupon_id] => 6113
)
)
[1] => Array
(
[User] => Array
(
[id] => 2
[api] => agi
[coupon_id] => 5982
0005nobodyさん
2011/02/17(木) 00:36:34ID:???同じような質問をしているのを見つけました。
しかし、回避方法みたいなものはないっぽいので、仕様と諦めるしかないのかな。
0006nobodyさん
2011/02/17(木) 00:39:00ID:???afterFind()をAppModelに書いて処理したらいいんちゃう?
でもFormHelperと連動しなくなるとおもうけど。
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だけじゃないというか、
その構成の方が主流じゃないのか?
むしろ他にある?
0107nobodyさん
2011/02/22(火) 13:21:44.92ID:???主流なんだけどさ、ファイル編集する時、あっちこっち見に行かないと
いけないというのが作りづらさを感じるんだよね。
ま、>>104だとファイル名が全部同じになって分かりづらいってのもあるけど。
0108nobodyさん
2011/02/22(火) 13:41:17.74ID:???0110nobodyさん
2011/02/22(火) 16:02:30.52ID:???モデルはないけどコントローラーだけ存在するとか、そういう場合にわかりづらくなる気がする
>>108
userモデルを使った場合routesで/users/usernameみたいにする人が多いってことじゃね?
cakeに限らない気がするけど。
0111nobodyさん
2011/02/22(火) 20:03:44.94ID:???belongsToとかで繋がってる先のレコードを編集できんの?
0114nobodyさん
2011/02/22(火) 21:05:25.69ID:???http://book.cakephp.org/ja
ここを全部読んでください。
何度読んでもわからなかったら、あなたにはCakePHPに向いていません
0116nobodyさん
2011/02/22(火) 21:12:51.08ID:???時間はかかりますが、全体を見ることをお勧めします
0117nobodyさん
2011/02/22(火) 21:52:12.81ID:???0119nobodyさん
2011/02/22(火) 22:39:56.66ID:???お前の稚拙な考えはmixiとかで発表してろ。
お前のようなど素人は秀丸とかでちまちまやってから
辛いかもしれんがプロはIDE使ってるんだよ。心配すんな。
0121nobodyさん
2011/02/22(火) 22:44:08.89ID:???0122nobodyさん
2011/02/22(火) 23:17:03.04ID:???0123nobodyさん
2011/02/22(火) 23:17:28.23ID:fDDX4hLaモデルのuser.php(usersテーブルを呼び出し)と
コントローラのregisters_controllers.phpと
ビューのregistersフォルダがあります。
registers_controllers.phpを下記のようにしてモデルのuser.phpを呼び出し
usersテーブルを読み込もうとするのですが
Error: The view for UserController::add() was not found. が出ます。
viewsにはregistersフォルダを用意してあり、index.ctpも配備されているのですが
なぜエラーが出るのでしょうか?
---registers_controller.php----------------------------------
<?php
class RegistersController extends AppController {
var $name = 'User';
以下略
------------------------------------------------------------
---user.php-------------------------------------------------
<?php
class User extends AppModel {
var $name = 'User';
以下略
0124nobodyさん
2011/02/22(火) 23:31:02.14ID:???var $name = 'Registers';
var $uses = array('User');
0125nobodyさん
2011/02/22(火) 23:32:12.94ID:???エラーメッセージ読めよ。
UserControllerはあるのか?
CakePHPはUserControllerがあるという認識で動いてるぞ。
0127nobodyさん
2011/02/22(火) 23:47:54.53ID:fDDX4hLaコントローラ(registers)で他モデル(user)を呼び出した後、
コントローラ内に他モデル(user)を扱う場合は
$this->User->ほにゃらら で使えますよね?
では、viewから下記のようにデータを受け取ったときはどのように
すればいいのでしょうか?純粋に
$this->register-> でOKですか?
echo $this->Form->create('Register');
echo $this->Form->input('email');
echo $this->Form->submit();
echo $this->Form->end();
0128nobodyさん
2011/02/22(火) 23:51:58.04ID:???いくら分かりにくくて間違いも多いといわれるCookbookとはいえ、
それくらいはちゃんと書いてあるぞ。
そのレベルの質問をするなら、
せめて
http://book.cakephp.org/ja/view/1528/CakePHP%E3%83%96%E3%83%AD%E3%82%B0%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB
この実務で使いそうなちょっと込み入った使い方には一切触れてないチュートリアルで
ブログ(笑 を作ってみれ
0129nobodyさん
2011/02/22(火) 23:55:07.65ID:fDDX4hLaすみません。一応このチュートリアルもACLもやったんですが、
いまだに理解できていないのが現状です。。。
0130nobodyさん
2011/02/23(水) 00:03:55.10ID:gK6lHkB0>>127でviewのForm->create()で実質ユーザーテーブルへ登録することになるけど
飛び先はそのままのページ(register.add)へ遷移させたいので
echo $this->Form->create('User',array('url'=>'.'))
としていますが、おかしいようです・・・・
0131nobodyさん
2011/02/23(水) 00:09:28.68ID:gK6lHkB0formで別モデル(User)を指定しているのでジャンプ先が必ず
hoge.com/users/registers/add になってしまいますねorz
0132nobodyさん
2011/02/23(水) 00:25:23.06ID:???うーん、やったとは思えんのだがなぁ。
> では、viewから下記のようにデータを受け取ったときはどのように
> すればいいのでしょうか?純粋に
> $this->register-> でOKですか?
http://book.cakephp.org/ja/view/1537/%E8%A8%98%E4%BA%8B%E3%81%AE%E8%BF%BD%E5%8A%A0
流石にチュートリアルやっといて$this->dataを忘れるとは思えぬ・・・
俺モデル名とコントローラー名は規約どおりにしかやったこと無いからなぁ。
初心者ならあまりトリッキーな事はしないほうが、無用なトラブルを避けられると思うよ。
0133nobodyさん
2011/02/23(水) 00:41:36.70ID:gK6lHkB0すみません。チュートリアルもやるにはやって本も400ページほど読んだのですが、
完全に把握できず、どういうものか良く分からないで何となくやってるのが現状です。
こういう理解でよいものでしょうか?
1.フォーム入力から受け取ったデータは、取り扱っているモデル名に関わらず
$this->dataという変数に連想配列形式で格納される
2.DBからのデータは $this->(モデル名)->(様々な関数コマンド)を利用して
必要な分だけを呼び出す。
もし、Modelでアソシエーションを組んでいた場合、その呼び出した際の
メインテーブルの対象レコードに紐づくアソシエーション先も自動的に呼び出される。
すなわち モデルTable1にTables2をアソシエーションで設定していたら
$str = $this->Table1->find('all');
この時点で$str[0][Table2][任意フィールド]の中に
Table1で絞られたレコードのTable2の関連レコードが格納されている
という認識でいいんですよね?
あと良く分からないのがアソシエーションを組んでるときに
$this->Table1->Table2->save()
みたいに複数のテーブルを跨いでいってる場合です。
普通に
$this->Table2->save()
じゃ駄目なのでしょうか?
0134nobodyさん
2011/02/23(水) 00:46:24.44ID:gK6lHkB0これもコントローラ名(URL)を複数形やテーブル名と同じにしなければいけないという
基本規約のせいなんです。
たとえば皆さんは会員登録もメンバーリスト参照も同じusersコントローラでするのですか?
http://hoge.com/users/register
http://hoge.com/users/view
のように
この場合、cakephpで作っているのがミエミエで攻撃されやすくなりません?
皆様のご意見も聞かせていただければ幸いです。
0135nobodyさん
2011/02/23(水) 01:09:41.82ID:???ふーむ、しょうがないのう。
> 1.
POSTに限りyes。モデルがどうなってるかは、コントローラーでdebug($this->data)とかして、
自分で見てみると良い。
あと、CakePHPでGETメソッドは上級者向けなのでなるべく使わないほうが良い。
> 2.
大体そんな感じ。このあたりは奥が深いので、
とても1レスで全てを伝えるのは無理、というか俺も把握しきれてない。
$this->Model->Model->save()はあまりしないな。
トリッキーな事をしてなければ、UsersコントローラーではUserモデルへのデータと、
アソシエーションで紐ついてるデータを保存するわけだからな。
$this->User->save()か$this->User->saveAll()で基本的には十分。
Userモデルに紐付く何かも、ViewをFormHelper使って無難に作っていれば、
$this->dataをsave()かsaveAll()すれば問題なく保存されるはず。
ただ、どういう場合にsave()かsaveAll()は俺もちょっと語れるほどじゃない。たまに試行錯誤する。
0136nobodyさん
2011/02/23(水) 01:20:15.27ID:???CakePHPではURLの見栄えはroutesで調節するのがセオリー。
ただ、これはちょっと難易度が高いのが難点。
ここでのやり取りから察するに、質問者はroutesにかなり時間をかけて取り組むことになるとは思う。
一応Cookbookはこのページだけど、なんかだらだらと書いてあって要点を得ない。
とても分かりにくい。が、しかたがない。
http://book.cakephp.org/ja/view/945/%E3%83%AB%E3%83%BC%E3%83%88%E3%81%AE%E8%A8%AD%E5%AE%9A
> 一般的な Router の他の使い方は、コントローラの別名(alias)を定義することです。通常の /users/someAction/5 という URL の代わりに、/cooks/someAction/5 でアクセスさせたいとしましょう。このようなルートの設定は、次のようにすることで簡単に実現できます。
> Router::connect(
'/cooks/:action/*', array('controller' => 'users', 'action' => 'index')
);
一応この方法でUserControllerのまま、URLを変える事が出来る。
ただ、これだと/cools/add みたいなのもUsersController->index()に行っちゃいそうな気がするけど・・・
Cookbookが間違ってるのか俺が間違ってるのか。面倒だから確認はしない。
0137nobodyさん
2011/02/23(水) 01:35:30.01ID:gK6lHkB0ありがとうございます!!!感謝感激です。
>>127の件は下記で解決できました!!!
echo $this->Form->create('Register');
echo $this->Form->input('User.email');←モデル名. をフィールド名の前へ追加
echo $this->Form->submit();
echo $this->Form->end();
>>134についてですが、皆さんは規約どおり
usersテーブルに関連するものであれば全てURLを
hoge.com/users/○○○○○
としてるのですか?
CakePHPで作ってるのを隠蔽したいのであれば、工夫などされていませんか?
0138nobodyさん
2011/02/23(水) 01:40:49.20ID:gK6lHkB0hoge.com/registers/と複数形になるのは諦めてますか?
それとも>>136さんが言うようにroutesで調整してます?
そうなれば、そもそもusersコントローラとregistersコントローラに分ける
必要はなくて最後にroutesで全て設定すればいいんでしょうか?
どういうやり方が標準なのか分からず、ごめんなさい。
0139nobodyさん
2011/02/23(水) 01:52:29.68ID:???0140nobodyさん
2011/02/23(水) 01:56:59.29ID:???そりゃたまにはコントローラーとモデルの規約に沿わない名前にすることもあるよ。
1モデルに大して2コントローラーなケースとか、その逆とかな。
ただ、それなりにCakePHPの中身を分かってるから出来るだけで、
初心者がURLに見栄え目的に規約に沿わない名前にすると、
今見たくトラブるだけさね。
CakePHPは規約に沿う事で色々と工数を省略できるようになってるわけで、なるべく沿ったほうが良い。
ただ、コントローラー名=URLだと困る事も想定はされる。
でも規約に沿わないとめんどくさくなる。
だからroutesで設定できるようになってるんだ。
別に規約に沿わなくても開発は出来るよ。
ただ、CakePHPの利点を使わないで作るから、めんどうになるし、
/register/addに遷移したいのに/users/addに遷移したりとトラブルになりやすいだけ。
FormHelperでいちいちModel.fieldにしないといけなくなったのも、規約に沿ってない弊害だな。
0141nobodyさん
2011/02/23(水) 02:06:04.37ID:gK6lHkB0懇切丁寧な解説ありがとうございます。
非常に説得力があります。
確かにこれではCakePHPのメリット(省略による開発速度)が損なわれてしまいますね
やはり、基本的には
関連するテーブルは一つのコントローラ、モデル、ビューに収めていく形式がいいのですね。
そうすると、一つのコントローラの中に多くメソッド(アクション)が入りすぎてゴチャゴチャになるという理由からもコントローラを二つにして、メソッドを分けようと思っていたのですが、そのやり方は一般的ではないんですね?
一つのコントローラ内にアクションが30個入るとか普通なのかなぁー(^_^;)
URLの見栄えの件はroutes設定で了解です。
ただ全てのコントローラ(URL)が複数形になっていますが、これを全部単数系にroutes内で弄っていくのが一般的なのでしょうか?
0142nobodyさん
2011/02/23(水) 02:06:45.51ID:???CakePHPは、元々CakePHPである特徴が多くて隠蔽しにくいフレームワークだからな。
そりゃなんのフレームワークを使っているか、隠せるなら隠したほうが良いけど、
手間対効果を考えれば、あまり気にするとこじゃないと思うんだけどな。
俺だったら、予算をくれるんならやらないこともないけどね。
予算が足りなきゃ、むりっすーって言ってつっぱねるだけだわ。
0143nobodyさん
2011/02/23(水) 02:14:02.29ID:???予算とかではないのですが海外で公開する予定なんで、
攻撃されまくりそうで怖いんですf^_^;)
Ruby on railsとかなら、こういうCakePHPの規約ならではの弊害みたいなの無いんですかねー?
0144nobodyさん
2011/02/23(水) 02:24:46.99ID:???どんなのを作ってるのか知らんからなんとも言えないとこではあるが、
1コントローラーに30アクションは多いかもね。
そんなにアクションが必要になるのを作った事が無いから、イメージわかないな。
むしろ何を作ろうとすればその数のアクションが必要になるのか、ちょっと興味があるな。
とりあえず単数形にしようと思ったことが無いからよく分からん。
複数形で別にいいじゃん。何か問題でもあるの?
それで機能しないわけでもあるまいし、意味不明なURLになるわけでもないし。
0145nobodyさん
2011/02/23(水) 02:59:23.91ID:???購入した初心者用の本の中では多用されてました。
単数系、複数形については
users/register(仮登録。ハッシュURL付きメール送信まで)
users/regcheck(仮登録後、ハッシュURLをクリックで本登録への動作)
users/list(メンバーリスト閲覧)
となるよりは
register
regcheck
list
となったほうが見た目もスッキリになるからです
0146nobodyさん
2011/02/23(水) 03:25:33.34ID:???一般的かと聞かれると、まぁなんとも言えないところはあるね。
俺自身、CakePHPの省略に悩まされる事もあったし。まぁ、好みにもよると思うよ。
例えば、UsersController で規約どおり UserModel がusesされてる場合。
/users/add.ctpにFormHelper->create()したら、
規約(これも規約って呼んで良いのかしらんが)によってcreate('User')と同じになる。
規約によってcreate()でもcreate('User')でも、
その時点で$this->Form->input('field')はinput('User.field')と同じ。
そこにアソシエーションで紐付いたUser以外のモデルのを書く場合は、input('Comment.field')と書かないならない。
これが前提として、省略はあくまで省略なので、逐一Model.fieldと書いてももちろん良い。
トラブルは避けやすいかもね。規約による楽さを捨ててるけど。
ただ、省略が出来る以上、ネット上の情報では省略されてることもあり、
規約に沿わない作り方をしてcreate()てかいて/register/addじゃなく/users/addに遷移して困るのは、
それはそれとしてって事かな。
0147nobodyさん
2011/02/23(水) 03:35:51.27ID:???まぁ、どうしても単数系にしたかったらroutesに沢山書くのがセオリーなんじゃないかな。
俺もCakePHPを完全に使いこなしてるわけじゃないから、他にも方法があるかしらんけど。
さっきも書いたけど、規約に沿うのを特に進めたのは、
質問のレベル的に、そこに手を出すのは早いんじゃないかと思ったのがあるからね。
流石に$this->dataを知らない風な質問をされたら、ね。
使いこなしてる人は色々と自分なりの使い方でやってると思うよ。
例えばコントローラじゃなくてモデルだけど、これの「4. アクション毎にModelを作る」とか
http://www.1x1.jp/blog/2010/12/thinking_abount_cakephp_mode.html
あとCakePHPの隠蔽について。後半はネタっぽいが。
http://d.hatena.ne.jp/k1LoW/20101202/1291262612
この2つはCakePHP Advent Calendar 2010でのだけど、
このイベントの記事はそこそこ良い記事ばかりだし一通り読んでみるのも良いかもね。
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=2510&forum=16
0148nobodyさん
2011/02/23(水) 09:43:30.81ID:???テンプレートと入れ替える方法どこかに載ってないでしょうか
0150nobodyさん
2011/02/23(水) 16:34:55.81ID:???0151nobodyさん
2011/02/23(水) 18:09:23.62ID:???こうするのも
{$test}
こうするのも一緒なんだけど、
後者の方がデザイナーとかには分かりやすいんじゃない?
0152nobodyさん
2011/02/23(水) 18:18:28.09ID:???囲い文字がどっちでも一緒だと思うけどね。
まぁ確かに<?php echoはちょっとめんどくさいけど。
でもSmartyはオワコン感が強いな俺の中で。
0153nobodyさん
2011/02/23(水) 21:46:12.22ID:???Smarty使わないって仕事でCakePHPを使ってない人ですよね?www
0154nobodyさん
2011/02/23(水) 22:15:58.50ID:???0155nobodyさん
2011/02/23(水) 23:02:33.16ID:???PHP自体が所謂テンプレート言語の類なのに、
その上にテンプレートエンジン構築してどうする
0156nobodyさん
2011/02/23(水) 23:19:25.45ID:???というのも繰り返し言われてきた
俺もテンプレートエンジン不要派だけど、必要だという人がいるのなら使うのもしょうがないんじゃないかなー
0157nobodyさん
2011/02/24(木) 13:43:09.42ID:???あとデザイナにPHPのコード壊されたりもしたから、基本いじらせたくないな。
0158nobodyさん
2011/02/24(木) 14:52:21.15ID:???今日日サーバーサイドに何らかのプログラムが絡む案件なんて珍しくないし、
phpに理解が無くても、HTML構造の特定のまとまりを崩さなければ、
phpコードを崩す事なんてそうそうないわけで。
それを崩しちゃう人って、
もうHTMLレベルで平気で閉じの無いタグを量産する可能性があるって事だろ。
webデザイナーとしてそれってどうなの?
0159nobodyさん
2011/02/24(木) 15:24:05.68ID:???cakeの場合はcakeの動きを知らなきゃviewを作るのは難しいと思うよ。
0160nobodyさん
2011/02/24(木) 17:03:24.16ID:???function verify($urlparam = null) {
$data = $this->Regurl->findAllByRandomUrl($urlparam);
if (!$data) {
$this->flash('Invalid URL!!','index');
}else{
if ($data[0]['User']['activated'] == 0) {
//print_r($this->data);
$this->User->id = $data[0]['Regurl']['user_id'];
$this->User->saveField('activated', 1);
$this->flash('Now activated!!','index');
}elseif($data[0]['User']['activated'] == 1){
$this->flash('Already activated!!','index');
}
}
}
コントローラUserから、外部モデルRegurlの中のrandom_urlフィールドと照合して、
一致するものがあればアソシエーション先のUserテーブルのactivatedフィールド(フラグ)を
1へ書きかえる処理です。
UserモデルではRegurlのuser_idに対しhasOneで、RegurlモデルではUserのidに対してbelongsToで
アソシエーションを設定してあります。
0161nobodyさん
2011/02/24(木) 18:06:12.76ID:???まあこの程度ならどっちでもいいって言えばどっちでもいいけど、
randomurlのチェックやらsaveFieldなんかの処理は
モデルに書くとすっきりすると思うのねん。
コントローラーは
if($this->User->checkRandomUrl()){
$this->User->activate();
$this->Session->setFlash('どったらこったら', true));
}else{
....
}
こんな感じで何やってるかわかりやすくなるっしょ。
0162nobodyさん
2011/02/24(木) 18:18:50.60ID:???0164nobodyさん
2011/02/24(木) 18:35:27.29ID:???ありがとうございます。
コントローラ内でするとしたら
どういう書き方がスマートになりますでしょうか?
0166nobodyさん
2011/02/24(木) 22:04:42.87ID:???1.3で、bootstrap.php内に
App::import('Vendor', 'ecw/Lib3gkCarrier');
$carrier = Lib3gkCarrier::get_instance();
if($carrier->is_ktai()) {
App::build(array(
'views' => array(ROOT . DS . APP_DIR . DS . 'views' . DS . 'm' . DS)
));
}
って記載したのですが、振り分け出来ないです。
他にすることってあるんですか?
0167nobodyさん
2011/02/24(木) 22:42:35.95ID:???モデルにコーディングするしたら、どのように書けばスマートかを、コントローラへの記述とのセットで見せていただければ幸いです。
初心者ながらに試行錯誤して最終的に出来たの結果が、あのコードでした。
経験豊富の方のコーディングの仕方を見てみたいです。
0168nobodyさん
2011/02/25(金) 03:38:33.94ID:???経験豊富じゃないけど、
ロジックはモデルに書けるならモデルに書くべきってだけなんだよね。
そのままモデルに持っていけば良いと思うんだ。
以下つっこみどころ豊富なコード。動かして無いから間違いはたぶんある。
UserModel extends AppModel{
function activate($url){
$data = $this->Regurl->findByRandomUrl($url);
if(empty($data))
return false;
if($data['User']['activated'])
return 'already';
$this->id = $data['User']['id'];
$this->saveField('activated', 1);
return 'activated';
}
}
SomeController extends AppController{
function index(){
if(!$result = $this->User->activate($this->data['url'])) {
$this->Session->setFlash('Invalid URL!!','index');
return;
if($result === 'activated'){
$this->Session->setFlash('Now activated!!','index');
return;
}
if($result === 'already'){
$this->Session->setFlash('Already activated!!','index');
}
}
}
0169nobodyさん
2011/02/25(金) 10:26:28.95ID:???---MODEL-------------------------------------------------------
Class RegurlModel extends AppModel{
var $name = 'Regurl';
function activate($url){
$data = $this->Regurl->findByRandomUrl($url);
if(empty($data)){
return false;
}
if($data['User']['activated']==1){
return 'already';
}else {
$this->id = $data['User']['id'];
$this->saveField('activated', 1);
return 'activated';
}
}
}
---CONTROLLER------------------------------------------------
Class UsersController extends AppController{
function index($this->data['url'] == null){
if(!$result = $this->User->activate($this->data['url'])) {
$this->Session->setFlash('Invalid URL!!','index');
}
elseif($result === 'activated'){
$this->Session->setFlash('Now activated!!','index');
}
else($result === 'already'){
$this->Session->setFlash('Already activated!!','index');
}
$this->Session->setFlash('Invalid URL!!','index');
}
0170nobodyさん
2011/02/25(金) 14:11:48.82ID:???これが気になったんだけど、何でこんな事してるの?
0171nobodyさん
2011/02/25(金) 14:30:13.42ID:???0172nobodyさん
2011/02/25(金) 14:47:53.68ID:???未入力がどうこう言う場合はValidationかけましょうや。
0173nobodyさん
2011/02/25(金) 14:57:37.07ID:???ああ、モデルに移したやつには余計だったね。
このコードが何のコードか、いまいちよく分かってなかったから、
そのまま書いちゃったよ
0174nobodyさん
2011/02/25(金) 15:21:25.48ID:???あれ?と思ったら>>168ではちゃんと消してるじゃないか。
>>169
コントローラーのアクションの引数を使って、パラメーターを受け取る方法もあるけど、
あんまり使わないんじゃないかな。
function index($this->data['url'] == null){
というか、これは動くの?メソッドの引数に$thisが入ってるなんて初めてみるんだけど。
なんかめんどくさくなってきたから、もうコントローラに書いたら良いんじゃないか?
何の実装かがわからないと、スマートになんてかけない気がしてきた。
beforeValidate()やbefore/afterSave()とか使ったほうがスマートになりそうな雰囲気あるけど、
詳細わからんとねぇ。
とりあえず引数に書くよりif(!empty($this->data['url']))しといたほうが良いんじゃないか。
0175nobodyさん
2011/02/25(金) 15:42:56.64ID:???function index(){
$url = isset($this->data['url']) ? $this->data['url'] : null;
にすればいいじゃないか。
0176nobodyさん
2011/02/25(金) 15:45:11.29ID:4/qlOsDP0177nobodyさん
2011/02/25(金) 16:24:48.62ID:4/qlOsDP0178nobodyさん
2011/02/25(金) 16:33:34.12ID:???0179nobodyさん
2011/02/25(金) 16:46:01.81ID:???そんなの、予算がなければNoだろ。
GAEは最初はもなにも、かなり依存するつもりじゃないとつかえねぇよ。
使ったら最後、追加予算無ければAmazon EC2への移行も出来ない。
0180nobodyさん
2011/02/25(金) 17:35:37.03ID:???0181nobodyさん
2011/02/26(土) 16:25:16.00ID:???それ定数にしろよwwwって場合が多いよ
0182nobodyさん
2011/02/26(土) 17:15:32.84ID:QnS5kZ07Cakeと比べてどうよ?
0183nobodyさん
2011/02/26(土) 17:45:41.68ID:???model の__cunstruct で ClassRegistry に登録されてるから
その情報を元に関数で一気にbeginとcommitをしてるんだけど、、いいのかな?
0184nobodyさん
2011/02/26(土) 22:12:17.89ID:???0185nobodyさん
2011/02/26(土) 22:57:00.84ID:???嘘ついてんなよw
0186nobodyさん
2011/02/27(日) 00:25:16.65ID:???0187nobodyさん
2011/02/27(日) 14:26:52.35ID:???0188nobodyさん
2011/02/27(日) 15:12:11.70ID:n/cFKC+5タグとか
0190nobodyさん
2011/02/27(日) 15:55:26.24ID:???ユーザーが投稿した何かにつけるタグとか、
ユーザーがグループに所属するとか、
そういうのだろ。
0191nobodyさん
2011/02/27(日) 16:01:26.01ID:???ユーザーがグループに所属するは
分かりやすい
ユーザーテーブルから
中間テーブルをまたいで
向こうの所属しているグループのレコードを絞り込んでグループ名一覧とかを表示するとき
とかに使うってこと?
0192nobodyさん
2011/02/27(日) 17:31:22.17ID:???実は単に1ユーザーが所属できるのが1グループだったら、HABTMじゃなくても良い。
1ユーザーが複数のグループに所属できるようにする場合、HABTMになる。
絞込みをしたいからHABTMというのはちょっと変で、hasManyだって絞込みする。
HABTMはhasAndBelongsToManyと書くとおり、多対多の関係を作るためにある。
確か、第4正規形だったかな?
0193nobodyさん
2011/02/27(日) 17:35:40.03ID:???例えば下記の3つのテーブルがあったとして
users
user_groups
groups
usersのコントローラで特定のユーザーが
所属している全てのグループを表示する
時とかにHABTMは使うんじゃないの?
0194nobodyさん
2011/02/27(日) 17:46:10.12ID:???その構成を扱うなら基本HABTMだろ。
多対多だからな。
まぁ細かい事を言えば、そのテーブル構成でも複雑な事をしようとすると、
HABTMじゃ力不足な場面はあるが。
0196nobodyさん
2011/02/27(日) 18:28:28.88ID:???インターフェースやデザインの部分だけにしか携わらないパートナーがいる。
(コーディング関係一切しない)
そのパートナーとの取り分は
何対何くらいが妥当?
こっちはアルゴリズムから詳細設計まで全て受け持ってるんだが
0197nobodyさん
2011/02/27(日) 18:29:56.01ID:???0198nobodyさん
2011/02/27(日) 18:31:26.94ID:???連動するところとか論理的思考とか
必要ないしw
0199nobodyさん
2011/02/27(日) 19:29:47.30ID:???さっきのテーブル構成で行くと、user_groupsテーブルにはこの3つのカラムしか、
実質作る事ができない。
id,
user_id
group_id
createdとかmodifiedを作っても、関係テーブルに限り
日時は書き込まれないし、書き込んだとしても消える事になる。
例えば、ユーザーAが既にaとb2つのグループに所属しているとして
3つ目のcに所属するための処理をすると、
一旦ユーザーAの関係テーブル上からユーザーAがaとbに所属というデータを削除し、
改めてユーザーAがaとbとcに所属というデータを書き込む。
という動きをする。
なので複雑な事は例えば、関係テーブルに何か他のデータを合わせて置く。などだな
0200nobodyさん
2011/02/27(日) 19:32:45.15ID:???0201nobodyさん
2011/02/27(日) 19:35:45.60ID:???設計からプログラミング、デザインとhtmlコーディングを全部やることがあるけど、
気楽さでいえば、俺はデザインよりプログラミングの方が楽だな。
もちろん工数見積はプログラミング>デザインだけど。
ただ、その時のデザインは、無難に整って見れればおkってやつだけどね。
何つくろうってのかしらんけど、
web系って基本はDBに書いて取って調節して出力だし、
あんまアルゴリズムとかいらなくないか?
そんなむずかしい事をするわけでも無い気がする。
やることが全然違うし、単純に比較できるものじゃないと思うけどね。
0202nobodyさん
2011/02/27(日) 20:15:04.52ID:???「綺麗なデザインは?」「使いやすいデザインは?」「格好いいデザインは?」
これらに答えを出せますか?
しかし、「会員登録する機能を作る」「メールを送信する機能を作る」
これらに答えは出せますよね。
果たしてどちらが”気軽”なんでしょうかね。
0203nobodyさん
2011/02/27(日) 20:17:11.08ID:???0204nobodyさん
2011/02/27(日) 21:02:31.40ID:???お前バカだな
コーディング部分を担当だと
最終的に機能条件を100%満たせる。
けれどデザインったら、世界レベルから
html最近覚えましたレベルでも一応完成させることが出来る。
君は後者のヘナチョコデザイナーにも
100%機能要求を満たせたプログラマーと同じ対価を与える訳?
0205nobodyさん
2011/02/27(日) 21:48:04.01ID:???使えないの?
0206nobodyさん
2011/02/27(日) 22:07:01.59ID:???自分でもわかってるじゃん。デザインに答えがないって。
答えがないもの・判断が付かない物に対して比較するのがそもそもの間違い。
で、君みたいな凄腕プログラマーは当然パートナーにも
凄いデザイナーがいるわけだよね?ヘナチョコとなんてやらないよね。
だったら、凄いデザイナーさんの方がもっと貰うべきだよね。
0208nobodyさん
2011/02/27(日) 22:09:46.67ID:???>君は後者のヘナチョコデザイナーにも
>100%機能要求を満たせたプログラマーと同じ対価を与える訳?
僕はヘナチョコデザイナーを雇わないからね。
僕より出来るデザイナーに僕より多くの金額を与えるよね。当然だろ?
0209nobodyさん
2011/02/27(日) 22:11:05.21ID:???良い素材でも美味しくないと誰も食べてくれないし、
いくら料理の腕があっても素材が悪いと美味しくないよね。
それぐらい僕も分かってるけど、君も当然分かるよね?w
0213nobodyさん
2011/02/27(日) 23:53:36.80ID:???ん?俺はそこでいうuser_groupsにいろいろ情報持たせてるよ。
消すか消さないかは書き込む時に指定できるし。
0214nobodyさん
2011/02/27(日) 23:57:16.61ID:???どっちがどっちにも踏み込めない物しか出来上がってこない。まさに日本のIT物作りw
0215nobodyさん
2011/02/28(月) 00:13:32.34ID:???埋め込み型の変なJavaScript(当然全部グローバル空間)とかは多いなw
その辺イケてるデザイナ・コーダに知り合いが少ないのが自分の問題だが
中途半端にそっちの方も審美眼というか基準を持ってしまうと、ストレス溜まる
0216nobodyさん
2011/02/28(月) 00:38:48.14ID:???自分が出来ない事を他人が出来て、それに対する対価が半分。
これって普通の考えだと思うけど、どうして196はファビョってるの?
0217nobodyさん
2011/02/28(月) 00:43:03.85ID:???196が例えば5対5が妥当と考えるなら、5以上を要求してきたら断ればいい。
何を悩んでいるのやら。
0218nobodyさん
2011/02/28(月) 01:07:13.20ID:???指定っていうとどういう方法で?
CakePHPのアソシエーションとしてのHABTMを、
UserモデルとGroupモデルにちゃんと設定した上で、
save()すると消えると思うけど。
0219nobodyさん
2011/02/28(月) 01:10:50.38ID:???案件受注してデザインを外注に出す時、
どう考えても半分なんて出さないけどな。
実際、デザインにそんだけの仕事量は無いし。
0220nobodyさん
2011/02/28(月) 02:48:20.38ID:???0222nobodyさん
2011/02/28(月) 02:58:15.97ID:???0225nobodyさん
2011/02/28(月) 09:45:52.73ID:???0226nobodyさん
2011/02/28(月) 11:35:46.82ID:???>>224
プログラマならデザインが出来るとか、その逆だとかじゃないと思う。
プログラマは基本的にデザインは出来ないものだし、
デザイナはプログラムは書けないものだろ。
Wordpressのテンプレート関数をちょっといじってphp書けますなんてのは、
プログラミングのうちに入らないんだ。
でも、プログラマがちょっと頑張ったデザインだって、
デザイナから見れば及第点以下だと思うぞ。
両方出来る人も少しはいるけど、それはプログラマでありデザイナなんだよ。
0227nobodyさん
2011/02/28(月) 13:23:40.85ID:???0228nobodyさん
2011/02/28(月) 15:02:46.16ID:???0229nobodyさん
2011/02/28(月) 15:06:20.94ID:???0230nobodyさん
2011/02/28(月) 15:53:25.77ID:???0231nobodyさん
2011/02/28(月) 15:58:33.37ID:???0232nobodyさん
2011/02/28(月) 16:10:22.45ID:???デザイナーにレイアウトや配色教えている俺は何なんだ・・・
どっちも出来る奴って珍しくないと思うけどな。
逆に出来ないとSOHOや個人事業として成り立たないでしょ。
0233nobodyさん
2011/02/28(月) 16:43:04.55ID:???> デザイナーにレイアウトや配色教えている俺は何なんだ・・・
ヒント:最後の行
プログラマやデザイナがみんなSOHOや個人事業でやってるわけじゃないと思うぞ。
俺の観測範囲で言えば、
デザインが出来ないフリーランスのプログラマや、
その逆のデザイナが多いな。
俺はデザイナからプログラミングやコーディングの仕事をもらい、
逆にデザイナーにデザインを依頼してる。
同じようなフリーランスのプログラマも、
やっぱり一緒になってやってるデザイナーとかいるよ。
0236nobodyさん
2011/03/01(火) 00:47:15.67ID:???色々と誤解があってこのスレでも散々煽り倒してきたりもしたけど
これからは使わせていただきます。
0237nobodyさん
2011/03/01(火) 11:51:22.63ID:???1人で出来る奴なら、デザイン費+プログラム費込みで見積出せるが、
デザイナー、プログラマーと分かれてるなら、それぞれが希望する金額になって、
1人でやっている人と比べて見積が高くならないか?ってこと。
会社の場合も外注に出すと高くなるだろ?
でも、当然客は「2人分の費用」として考えていないわけで、
高くなる分、損だと感じると思うんだが。
0239nobodyさん
2011/03/01(火) 13:38:59.93ID:???まぁそういう面はあるかもしれんけど、俺はデザインは出来ないわけでな。
仮に頑張ってやったとしても、
時間もかかるし頼んじゃったほうが早いし良いのが出来るんだよね。
無理してデザインやるよりも、CakePHPが得意とする中規模のアプリで、
作れる幅を広げたり、スピード上げたりしたほうが利益になると思ってる。
まぁhtmlだけ頼まれた時なんかは、
もったいないなぁとは思ってるけどね。
客側のデザイナーがコーディングまで出来れば、
もっとコスト圧縮できたろうにね。
0240nobodyさん
2011/03/01(火) 14:15:04.46ID:???なぜか外注のデザって結構な金とらね?
別にシステム開発の方が技術は上だとは言わないが、
少しの修正(色やサイズの違い)で、修正費取ろうとする奴がいるぞ。
俺の経験では1人や2人じゃなく、ほぼ全てのデザイナーに共通した。
0241nobodyさん
2011/03/01(火) 14:19:01.29ID:???0242nobodyさん
2011/03/01(火) 14:43:30.29ID:???俺はそんな取られたりはしてないと思ってるけど。
案件が終わってからのは流石に費用かかるけど、
検収前でちょっとした修正はかからないだろう。
小さい修正なら、場合によっては自分でやっちゃうし。
大きな修正の場合は・・・って、大きな修正が出たことがほとんどないな。
デザイナーとやる際の悩みとしては、
htmlコーディングが出来る人でもCakePHPのビューファイルに抵抗感があることかな。
phpタグくらいは別に良いんだけどelementやヘルパーがなぁ。
説明すると向こうが自信なさ下だから、
こっちがそこ頼むのに抵抗感を感じてしまう。
0243nobodyさん
2011/03/01(火) 14:52:26.77ID:???小さい修正でも自分でやっちゃう事が、コスト負担になってるからなぁ。
あと、デザイナーにビューファイル触らせるのは絶対駄目だと思う。
htmlファイル貰ってそれからPGがctpのテンプレに移していく形が一番だよ。
Dreamweaverのデザインビューじゃないとわからないって人多いし。
0244nobodyさん
2011/03/01(火) 19:24:50.42ID:???0245デフォルトの名無しさん
2011/03/01(火) 19:42:50.80ID:???0246nobodyさん
2011/03/01(火) 20:07:06.21ID:???0247nobodyさん
2011/03/01(火) 22:21:38.57ID:MzfiBR71メジャーバージョンアップともあってやっぱり1.3とだいぶ変わりますか?
今開発中のものがあって、1.3で作っているのですが
まだ初期段階なので、2.0に変えることも考えています。
それほど変わらないようであればこのまま1.3で進めようと思っているのですが、、、
0248デフォルトの名無しさん
2011/03/01(火) 22:34:47.47ID:???ばかでもつかえるw
PHPがたくさん使われてるとかいっても、Perlユーザーの方が頭いい
むしろざまあみろ(‐^▽^‐)
お前らの負けだよw完全に私の勝ち
二度と話かけんな カス野郎 じゃあなああ〜
0249nobodyさん
2011/03/01(火) 22:49:13.06ID:???これでもみてみたら?
http://www.ustream.tv/recorded/12074210
1.3の延長で2.0をどっかのタイミングで出してから、機能追加という形じゃなく、
1.3から色々と機能加えたり変えたりして2.0出すみたいだよ。
互換性に関してはなるべく努力する方針みたいだけど。
0250nobodyさん
2011/03/01(火) 22:54:29.15ID:???やっとマトモなかんじになってきたな。
あとはBakaryが整理されてCPAN並になれば。。
0251nobodyさん
2011/03/01(火) 22:58:13.05ID:???Perlの様に終わっていく言語だと思う。
緩やかに終わっていくから、その間に稼ぎつつ、
別言語を覚えておいたほうが良いと思うよ。
0252nobodyさん
2011/03/01(火) 23:08:16.71ID:???0253nobodyさん
2011/03/01(火) 23:09:49.62ID:???PHPはやっぱりWebでの使い勝手の良さがあってますます流行る。
てゆーか今LAMP技術者引っ張りだこじゃん。
0254nobodyさん
2011/03/01(火) 23:16:53.29ID:???その次の言語が何になるかだよ。
Perl
CGI時代は一択だったし、サンプルも多かったから爆発
(標準入力と標準出力さえ使えればホントはなんでもいいんだけど)
PHP
HTMLに手軽な機能を追加するテンプレート言語として
SSIなんかとともに勃興、その手軽さから爆発。それから高機能化
の次は、何だ?
RubyもPythonもBetter Perlとしての機能と文法の良さは持っているかもしれんが、
Next Perl の地位は築けてないじゃん
かといって関数型言語がいきなり爆発するとか、もう何もかもJavaでいこうよとか、
サーバサイドJavaScriptが流行りすぎて大変なことになっていますとか、
そういう流れになるとは予想しにくいわけで・・・
0256nobodyさん
2011/03/02(水) 00:08:30.14ID:???0257nobodyさん
2011/03/02(水) 02:10:48.53ID:???俺はRubyが来ると予想してる。
現状がまだ盛り上がってないのは、phpが盛り上がってる時代だからね。
もう地位を築いてたら、次が何かという予想じゃなくって、事実になっちゃう。
Pythonは個人的には頑張ってほしいけど、現状劣勢だからなぁ。
GAE/pが出た時が最高潮だったんじゃないかと。
でも俺、Ruby嫌いなんだよなぁ・・・
0258nobodyさん
2011/03/02(水) 02:13:24.91ID:???CakePHPは慣れるまではむしろ時間がかかるフレームワークだよ。
ソースコード読まないと分からない事が多いからね。
小さめの案件とか、社内開発とかで、
まずはチームの成熟度を上げてから、
メインに使うべきもの。
まぁCakePHPに限る話じゃないと思うけど、
特にCakePHPはそういう面が強いと思う。
0259nobodyさん
2011/03/02(水) 03:42:08.50ID:???レスありがとう
自分の予想は、Rubyというか、RoRがマジョリティになるかどうかは、
mod_passengerの成熟度次第・・・だと思う。
結局多くの素人や初心者がホイホイとレンサバで動かせて、それなりにパフォーマンスも出て、
かつ「Apacheで走る」かどうかはデカいと思うよ。
もちろん自鯖でとんがったことやったりするなら、lighttpdでもnginxでもfastCGIで何でも来いなんだけど、
Webサーバのこと考えたくない人でもPHPっていじれるじゃん・・・・
CakePHPが初心者ホイホイな状態なのも、結局、実行環境が手軽に手に入るってのも大きいと思う。
良くも悪くもね。
0260nobodyさん
2011/03/02(水) 04:40:27.67ID:fRmytaacPHP安くね?
0261nobodyさん
2011/03/02(水) 05:01:14.21ID:???0262nobodyさん
2011/03/02(水) 10:30:13.95ID:???0263nobodyさん
2011/03/02(水) 12:33:08.72ID:???とりあえず書けばなんか出るPHPと比べて、
反応が返ってくるまでが長いからね。
ある程度覚えちゃえば、言語なんてどれも一緒。
むしろ型にうるさいJAVAの方が、IDEの力を借りて簡単に書ける。
と言いたいところだけど、
業務レベルになるまでに覚えないといけない事が多すぎて、
新人を育てるのが大変って話を聞いたことがあるな。
0264nobodyさん
2011/03/02(水) 19:08:36.24ID:???俺はcakeのコアフォルダと同じディレクトリに置いてたんだけど、bakeする時の文を見るとデフォがapp/myappっぽいので、コアフォルダと同じディレクトリにappフォルダを作って、その中に各アプリケーションのフォルダを作ったほうがいいのかな?
0266nobodyさん
2011/03/03(木) 00:07:07.94ID:???/path/to/cakephp
/path/to/myapp //公開ディレクトリ
/path/to/myapp/webroot
とある稼働環境
/path/to/cakephp
/path/to/myapp
/path/to/webroot //公開ディレクトリ
こんな感じ
0267nobodyさん
2011/03/03(木) 00:56:40.35ID:???って感じでやってる。
cakeのコア自体は/usr/local/lib/php/の中とかそんな所
0268nobodyさん
2011/03/03(木) 01:09:43.09ID:???/app
/cake
/vendors
/webroot
俺はこんな感じ。
0269nobodyさん
2011/03/03(木) 01:26:10.25ID:???0270nobodyさん
2011/03/03(木) 02:42:06.82ID:???それなりに役には立ってるけど、不満点もそれなりにあるからなぁ。
0271nobodyさん
2011/03/03(木) 03:02:42.33ID:???0272nobodyさん
2011/03/03(木) 04:10:32.91ID:???0273nobodyさん
2011/03/03(木) 07:15:43.65ID:???cake/libs/validaton.phpのminLength, maxLengthのメンバ関数でmb_strlen使ってるんだけど
これって日本語でも対応してますってこと?
0275nobodyさん
2011/03/03(木) 16:09:06.49ID:???function maxLengthJP($wordvalue, $length) {
$value = array_shift($wordvalue);
return (mb_strlen($value, mb_detect_encoding($value)) <= $length);
}
とか書いてたんだけど
そういうのやらなくて良くなったってことかな?
0276nobodyさん
2011/03/03(木) 17:57:07.62ID:P58hQK5Oセッションがタイムアウトしたのと、
ログアウト時に明示的にdestroyしたのって区別つかないのかな?
expireが取得できるメソッドでもあればいいんだけども
0277nobodyさん
2011/03/04(金) 02:57:20.01ID:8qRY678r大幅なデザイン変更あったときは
デザイナがhtmlファイル作って、PGがテンプレに移して・・・
って作業をやり直しになるの?
あくまでデザインの変更なんだからPGは一切作業無しで・・・
という風にできる方法はないのかな?
0278nobodyさん
2011/03/04(金) 04:38:20.99ID:???お互いにきっちり話し合ってデザイナー向けにマニュアルでも作るしかないんじゃないすかね。
でも実際大変じゃないの?
例えば入力フォームのページ1個作るにしたって
デザイナーにform helperの使い方を調べてもらって・・・なんてお互いに不安にしかならないもんなw
0279nobodyさん
2011/03/04(金) 14:10:42.75ID:???0280nobodyさん
2011/03/04(金) 14:32:27.79ID:???0281nobodyさん
2011/03/04(金) 18:29:37.51ID:???0282nobodyさん
2011/03/04(金) 19:12:13.54ID:???特にFormHelper。
Smartyのヘルパーがどういうものか知らないけど、
置き換えられるものじゃぁないと思うよ。
FormHelperを使わないことで発生する問題や制約を飲み込めるなら、
使ったら良いんじゃないかな。
Smartyの囲い文字もctpのphpタグも、変わらないと思うけどね。
0283nobodyさん
2011/03/04(金) 20:47:18.49ID:???以下のようにしたけど、表示できませんでした。
※コントローラ
function index(){
$images = $this->Image->find('all');
$this->set('images',$images);
}
※ビュー
foreach ($images as $image) {
$photo = base64_encode($image['Image']['contents']);
echo "<img src='data:image/jpg;base64,${photo}' />";
}
ちなみに、コントローラ側からechoするとちゃんと表示されます。
参考にした記事
http://matya.dyndns.info/diary/?p=283
0284nobodyさん
2011/03/04(金) 20:48:58.33ID:???FormHelperは必須だな。特にCMS系システム開発には。
でも、FormHelperを開発するのってそれほど難しくないよね。
みんなもCake使う前は、自作のFormHelper作ってたんじゃないか?
だから、どうしてもSmartyをビューで使いたい場合は、
Smarty用のFormHelperを作っても良いと思う。Cakeの書式に合わせて。
0285nobodyさん
2011/03/04(金) 21:34:56.65ID:6a/ByBcS/test/にアクセスしても、自分が作ったテストクラスが表示されません
解決方法知っておられたら教えてください。
0286nobodyさん
2011/03/04(金) 21:41:22.39ID:???0287nobodyさん
2011/03/05(土) 01:09:29.31ID:???まともに動かない
0288nobodyさん
2011/03/05(土) 01:14:50.42ID:???フォーム処理のやりとりに関しては、普通に出来てるけど。
0289nobodyさん
2011/03/05(土) 01:38:37.36ID:???だから最初はフォーム書くだけなのにphpなのめんどくさいって思ってた。
まぁ正直今でもちょっと思ってる。
でもちゃんと使ってるよ。
0290nobodyさん
2011/03/05(土) 14:11:52.90ID:???0291nobodyさん
2011/03/05(土) 14:48:19.68ID:???inputならわかるけど、selectやcheckbox(などの選択肢)はどうしてたの?
PHP使わないと逆に難しいと思うんだが。
0292nobodyさん
2011/03/05(土) 23:54:54.72ID:???もっと良いフレームワークあるでしょ
0294nobodyさん
2011/03/06(日) 01:03:43.63ID:???0295nobodyさん
2011/03/06(日) 01:55:17.88ID:5hZ883U10297nobodyさん
2011/03/06(日) 02:15:51.79ID:???いやきっと >>292 みたいな人はcakePHPに使われるような仕事して
ストレス溜まってるんだろうなーって生暖かい目で見てるよw
よく小学校の頃、学校なんてクソ。無くなれ〜とか思ってたじゃん。それと同じだろ。
0298nobodyさん
2011/03/06(日) 02:18:28.83ID:???良いフレームワークだよ。
0299nobodyさん
2011/03/06(日) 03:09:18.50ID:???0300nobodyさん
2011/03/06(日) 04:38:39.78ID:???まったく興味がわかない。
0301nobodyさん
2011/03/06(日) 11:18:22.21ID:???0302nobodyさん
2011/03/06(日) 12:25:25.49ID:???V = ビュー
A = アクション?
C = コントローラー
0303nobodyさん
2011/03/06(日) 14:37:58.37ID:???0304nobodyさん
2011/03/06(日) 16:00:47.25ID:PLgQNz0Sちょっとしたデザイン変更でいちいちシステム屋が出ていくのもねぇ
0305nobodyさん
2011/03/06(日) 16:31:51.55ID:???0306nobodyさん
2011/03/06(日) 16:44:51.04ID:???0307nobodyさん
2011/03/06(日) 17:01:10.08ID:???CakePHPの2.0.0はいつくらいに正式リリースされるのよ?
0308nobodyさん
2011/03/06(日) 17:14:43.69ID:???デザインとシステムの両方がhtml部分に手を入れる必要があるから、
切り分けは出来ないだろう。
無理を承知で言えば、cssはデザイナーの領域だから、
なるべくcssで頑張ってもらう。
0309nobodyさん
2011/03/06(日) 18:00:21.86ID:???で、PHPはDreamweaverで反映されるけど、プレビューはサーバがないと駄目。
だから、完全に分離できないとデザイナーが手間かかるし、
デザインを表示させる為に下手にソースから得られたら、プログラマが困る。
0310nobodyさん
2011/03/06(日) 18:01:57.60ID:???Goが出たらそのHTMLをテンプレート化するだろ。
簡単な修正の場合はCSS含めてプログラマがやるし
大幅な修正や画面追加はデザイナに任せればええやん。
0311nobodyさん
2011/03/07(月) 16:31:11.34ID:2kfcEYNxMVACってどうなんだろ
0312nobodyさん
2011/03/07(月) 16:41:54.60ID:???同じコードを書かなくても良いという目理とがあるけど、
ファイル数が増えてややこしくならないか?という懸念もある。
0313nobodyさん
2011/03/07(月) 17:52:16.77ID:???俺が扱ってる規模なら不要だな。
JAVAでも使っとけって思う。
0314nobodyさん
2011/03/07(月) 21:38:40.02ID:???0315nobodyさん
2011/03/08(火) 21:31:52.80ID:PsYppCp1どこで定義するのがベストでしょうか?
ちなみに金額と税率はDB内にあり、別テーブルに入っています。
0316nobodyさん
2011/03/08(火) 21:48:16.11ID:???0317nobodyさん
2011/03/08(火) 22:37:46.87ID:???0318nobodyさん
2011/03/08(火) 22:53:06.76ID:PsYppCp1どのモデルに書くのが良いんでしょう?
>>317
金額*税率が必要な部分で毎回コンポーネント読み込むんでしょうか?
0319nobodyさん
2011/03/08(火) 23:11:48.23ID:PsYppCp1Array
(
[Item] => Array
(
[0] => Array
(
[id] => 2
[name] => aaaa
[price] => 1000
[created] => 2011-01-01 04:41:50
[modified] => 2011-01-01 04:41:50
)
[1] => Array
(
[id] => 3
[name] => bbbb
[price] => 1300
[created] => 2011-01-01 22:17:20
[modified] => 2011-01-01 22:17:20
)
:
)
)
こんな感じで、商品DBには税抜価格が入っているんですが、
別テーブルに税率フィールドがあり、それを掛けた値を表示させたいのです。
0321nobodyさん
2011/03/08(火) 23:27:37.73ID:???$this->set('TaxConfig', $this->TaxConfig->find('first') );
#View
価格:<?php echo number_format( $data['Item']['price'] * $TaxConfig['num']); ?>
こんな感じで。
0322nobodyさん
2011/03/08(火) 23:42:55.57ID:PsYppCp1お〜。とりあえずそれで行ってみようかな?
0323nobodyさん
2011/03/09(水) 12:25:58.46ID:???jQueryを使用して、下記のようにjsヘルパーでサブミットボタンを2個並べてます。
action「jstest」は、10秒待ってレスポンスを返すだけのメソッドです。
保存1、保存2と間をおかず連続してボタンを押した際、end2のalertが表示されるのが
保存1を押してから約20秒後となります。
期待してるのは約10秒後にend1、2のalertが連続表示されることなのですが、
なにかおかしい点はありますでしょうか?
<?php e($js->submit('保存1',array(
'url'=>array('action'=>'jstest'),
'buffer'=>false,
'complete'=>'alert("end1");'
)
)); ?>
<?php e($js->submit('保存2',array(
'url'=>array('action'=>'jstest'),
'buffer'=>false,
'complete'=>'alert("end2");'
)
)); ?>
0324nobodyさん
2011/03/09(水) 12:44:59.72ID:???コンポーネントが100個ぐらいになった
0325nobodyさん
2011/03/09(水) 17:15:23.38ID:4pX38QJO0327nobodyさん
2011/03/09(水) 21:23:05.27ID:???何箇所か画像をアップロードする機能をもたせていて現状下のようになっています。
1.画像を保存する処理を書いたファイル
2.渡された変数を適切なフォーマットにして1.を呼び出すファイル
3.ユーザーが画像をアップロードする際に使うファイル
3.でフォームから画像を指定してsubmit
2.が受け取って色々いじった後1.にデータを投げて画像を保存
1.2.では文字を表示する必要は一切無いため画像を保存したら
3.にリダイレクトをかけたいのですがどのようにすればいいかわからず悩んでいます。
よろしくお願いします。
0328nobodyさん
2011/03/09(水) 22:26:17.55ID:???0329nobodyさん
2011/03/10(木) 02:46:04.73ID:???0330nobodyさん
2011/03/10(木) 13:00:58.69ID:???0331nobodyさん
2011/03/10(木) 13:20:34.19ID:???マジレスすると、何いってんのかよくわからん。
何だよファイルって。
コントローラー、ビュー、モデル、コンポーネント、ヘルパー、ビヘイビア、アクション
を使って説明を書き直してくれ。
0332nobodyさん
2011/03/10(木) 13:57:01.02ID:???0333nobodyさん
2011/03/10(木) 14:46:49.27ID:???0336nobodyさん
2011/03/11(金) 10:09:36.88ID:???scaffoldで値を入れてみようと思ったのですが、
外部キーをうまく認識してくれません。
テーブルは、次の二つを作成しました。
products
id, created, updated, name, product_type_id
product_types
id, created, updated, name
両コントロールは、以下のように作成しました。
//class ProductsController extends AppController
class ProductTypesController extends AppController
{
//public $name = 'Products';
public $name = 'ProductTypes';
public $scaffold;
}
product_types/addで任意のデータを追加した後
products/addでさらにデータ追加しようと思ったのですが、
product_type_idのセレクトボックスに選択できる値が入っておらず、
データを追加できませんでした。
products/add時にproduct_typesテーブルの内容を選択肢として表示するには
どのようにすればよろしいのでしょうか。
よろしくお願いします。
0338nobodyさん
2011/03/11(金) 10:16:22.95ID:???0339nobodyさん
2011/03/11(金) 10:17:13.31ID:???0340nobodyさん
2011/03/11(金) 11:21:00.08ID:???ありがとうございます。
モデル・ビューともに作成していませんでした。
scaffoldでは、必要ないみたいなことを読んだのですが、
違ったということでしょうか。
後で、アソシエーションを設定するモデルファイルを作成してみます。
0341nobodyさん
2011/03/11(金) 12:31:08.42ID:???(最近scaffold使ってないから記憶薄いけど)
0342nobodyさん
2011/03/11(金) 13:01:08.61ID:???気まぐれに入っていたりもする。
でもそのまま使うことはないからみんな放置してるんじゃないかな。
0343nobodyさん
2011/03/11(金) 13:12:04.29ID:???使い道がよく分からん。
0344nobodyさん
2011/03/11(金) 13:17:13.19ID:???使い方がよくわからん
0345nobodyさん
2011/03/11(金) 13:20:52.41ID:???0346nobodyさん
2011/03/11(金) 13:55:53.93ID:???コントローラとかモデルは小規模サイトだし必要ない
0347nobodyさん
2011/03/11(金) 23:09:11.08ID:34T7XTKb↑この問題が自分の環境でも起こっているんですが、
解決法などありますか?
Cookieコンポーネントを使って配列を書きこむと、一番最後の配列以外がArrayとなってデータが消えてしまいます。
Array
(
[0] => Array
[1] => Array
[2] => Array
(
[id] => 1
[ab] => 2
[cd] => 1
[ef] => 3
)
)
↑このように、同じデータを追加しているはずなのですが、末尾のデータしか残っていません。
0348nobodyさん
2011/03/11(金) 23:11:03.03ID:34T7XTKbこの記事でも同じようなこといっていますね。
「cakephp cookie 配列」などで検索すると出てきます。
0349nobodyさん
2011/03/12(土) 10:57:04.39ID:???Cookie::readの最後で
return $this->__values[$key][$names[1]];
//return Set::extract($this->__values[$key], $names[1]);
いいのかな。。
0350nobodyさん
2011/03/13(日) 23:51:06.58ID:JC24c2uV事前に何をsetしようがcreateしようが必ずtrueが帰ってくる。2日悩んだがお手上げ状態
たしけて
0352nobodyさん
2011/03/14(月) 03:25:24.81ID:???$this->Model->set($this->data);
if ($this->Model->validates()) {
$this->Model->save($this->data);
}
0353nobodyさん
2011/03/14(月) 10:38:15.65ID:3Afc8bliそのとおりやってるんだけど、どんな値を渡してもtrueが帰ってくる。
0354nobodyさん
2011/03/14(月) 17:45:24.61ID:???じゃ、文字コード疑ってみろ。モデルの。
たまにそこがShift_JISになっていて、エラーにならない時がある。
0355nobodyさん
2011/03/15(火) 11:45:26.02ID:pIi0VVUhUTF-8だったわ。
<?php
class Stock extends AppModel {
var $belongsTo = array('Item', 'Size', 'Color');
var $validate = array(
'name' => array(
'rule' => array('notEmpty'),
),
'item_id' => array(
'rule' => array('notEmpty'),
),
'size_id' => array(
'rule' => array('notEmpty'),
),
'color_id' => array(
'rule' => array('notEmpty'),
),
'quantity' => array(
'rule' => array('numeric'),
'message' => '半角数字で入力してください'
),
);
}
?>
なんだ?バリデーションのかき方間違ってるわけじゃないよな
ファイル壊れてんのかね?
0356nobodyさん
2011/03/15(火) 11:54:53.37ID:???なんでnotEmptyを配列にしてるんだw
'name' => array(
array(
'rule' => 'notEmpty'
)
)
こうだろ。もう少し勉強しろよ
0357nobodyさん
2011/03/15(火) 12:03:25.03ID:???'name' => array(
'rule' => 'notEmpty'
)
これでも動くよ。(むしろこっちが一般的かも知れない)
0358nobodyさん
2011/03/15(火) 15:15:08.89ID:???もう本体のソースにdebug()入れて目デバッグするしかないんじゃないの?
こんなところで聞くよりずっとはやいぜ。
0359nobodyさん
2011/03/15(火) 17:30:17.19ID:pIi0VVUhサンクス。
いろいろ試したが、
そのコードに、'required' => true,つけたらfalse帰ってきたわ。
'name' => array(
array(
'rule' => 'notEmpty'
)
)
↓
'name' => array(
array(
'rule' => 'notEmpty'
'required' => true,
)
)
0360nobodyさん
2011/03/15(火) 18:34:32.58ID:???冗談抜きでcookbookの例見ながらやれよ
0361nobodyさん
2011/03/15(火) 21:33:40.21ID:pIi0VVUhいや、ブックもAPIも毎日見てるよ。
何が間違ってる教えてくれ
>>369のやりかたで今のとこうまくいってるんだが
0363nobodyさん
2011/03/16(水) 00:11:30.27ID:H/WJFHhtrequiredが必要な設計が悪いんだよ。
0364nobodyさん
2011/03/16(水) 00:45:40.08ID:???だからそういう凡ミスするんだよ。開発プロセスを見直せ
0365nobodyさん
2011/03/16(水) 12:36:45.89ID:???0366nobodyさん
2011/03/16(水) 14:38:25.17ID:???0368nobodyさん
2011/03/16(水) 17:41:11.35ID:OBkWdnDA0369nobodyさん
2011/03/16(水) 19:10:01.24ID:aP3af6LXダウンロードできないんだが・・・。
さばおち?
0370nobodyさん
2011/03/17(木) 00:05:23.96ID:???cakeへのdonationはもうちょっと待ってくれw
0372nobodyさん
2011/03/17(木) 16:24:52.18ID:???$actsAsを$actAsって書いてた orz
0374370
2011/03/17(木) 18:09:13.88ID:???0375nobodyさん
2011/03/17(木) 20:41:47.41ID:???0376370
2011/03/18(金) 00:21:26.72ID:???いくつかサイトあるけど、どれもコントローラーは10個もないな
3〜8くらいか
0377nobodyさん
2011/03/18(金) 00:31:55.32ID:???俺が作ってるポータルサイトでも、30〜40はあるぞ。
0378nobodyさん
2011/03/18(金) 14:25:43.64ID:???0379nobodyさん
2011/03/18(金) 16:51:57.19ID:???0380nobodyさん
2011/03/18(金) 16:57:37.01ID:???0381nobodyさん
2011/03/18(金) 17:00:53.59ID:???0382nobodyさん
2011/03/18(金) 22:20:06.93ID:???0383nobodyさん
2011/03/19(土) 13:51:57.61ID:???それ以外を素のPHP(か独自クラスか)で作っている人いる?
0386nobodyさん
2011/03/19(土) 16:07:57.11ID:LrB5RKVBvalidation後、問題がなかったらpasswordを指定の暗号化(authsome)してからinsertしたいのですが、どうすればいいでしょうか?
一般的な方法をご教示いただければと思います。
0387nobodyさん
2011/03/19(土) 16:08:51.78ID:???そこまで多くのアクセスをさばくサイトを作ったことがないからわからんが
0388nobodyさん
2011/03/19(土) 16:33:34.19ID:???というかそれ以上でもDB部分の設計次第、データ次第という感じがする。
別サイトでは月1億PVでもcakePHPが原因で ということはおきてないです。
結局それくらいのPVになったらWEB複数台にしたり、DB分けたりして対処できてます。
0389nobodyさん
2011/03/19(土) 17:44:12.06ID:???俺がパフォーマンス出来になるのは、Ajaxの処理なんだけど、
そう言う点での遅いとか重いとか言うのは感じない?
例えば、ボタン押す→Ajax通信で指定データを取得→
閲覧しているWebページに結果を返す
って処理が、体感的に数秒かかる。
0391nobodyさん
2011/03/19(土) 18:30:44.32ID:???私の事例とは違うのでちょっとわからないです。
でも遅いのってだいたいDB周りですよ。
>>390
携帯向けサービスです。
ただ$this->Model->findとかは使ってないのでフルでcakePHPを使っているとは言えないです。
$this->Mode->queryでSQL文を書いて常に把握できるようにしてます。
0393nobodyさん
2011/03/19(土) 20:07:43.27ID:???findとかsaveとか使わないとなれば、Cake使う意味あるのかな?
って疑問に感じたんでさ。
0394nobodyさん
2011/03/19(土) 22:01:27.00ID:???もともとcakePHPを使う理由が、コードを読みやすくする(開発者以外が手を加える可能性があるため)
ことだったのであるとは思います。
cakeでなければ駄目だったかと言われると他のでも良かったですが。
ただfind部分の処理は結構重そうだったので、クエリキャッシュとかしてないのであればボトルネックになるのかもしれません。
0395nobodyさん
2011/03/20(日) 20:27:13.00ID:???0396nobodyさん
2011/03/20(日) 22:14:15.49ID:GCcZIJSQ0397nobodyさん
2011/03/20(日) 23:51:38.23ID:???0398nobodyさん
2011/03/21(月) 00:16:04.61ID:???0399nobodyさん
2011/03/21(月) 00:43:56.18ID:XkLv7npgapp/controllers/foos_controller.php
用意して、example.com/fooへアクセスして動いたのですが
example.com/にアクセスして
fooってテーブル使うようにするにはどのファイルをいじればいいのでしょうか?
app/controllers/pages_controller.phpでしょうか
0400399
2011/03/21(月) 02:09:09.74ID:XkLv7npg0401nobodyさん
2011/03/21(月) 20:54:35.99ID:???+----+------------------+------+
| id | email | flag |
+----+------------------+------+
| 1 | user1@example.jp | 0 |
| 2 | user2@example.jp | 1 |
+----+------------------+------+
ガタついてると思いますが上記のようなテーブルがあってflagは
0=仮会員
1=本会員
でメール認証で仮会員から本会員にとなります。
会員登録の際にemailにバリデートをかけたいのですが
DBを参照してフラグが0ならupdate、1ならisUniqueで弾くにはどうしたらよいのでしょうか?
cakephpのバージョンは1.3です
0402nobodyさん
2011/03/21(月) 22:43:32.95ID:fIwUydDAユーザーがメールを送る
↓
メアドを見て、
0403nobodyさん
2011/03/21(月) 22:50:03.53ID:???どこでバリデーションが必要になるのかわからんけど、メール認証後の登録の際のセッションIDでユーザー特定するのがセオリーなんじゃない?
本登録の際にemail情報は必要ないと思うが、どのタイミングでバリデーションするの?
0404nobodyさん
2011/03/21(月) 23:22:35.97ID:???バリデートをかけたいのは仮登録の際のemailフォームです
'email' => array(
"rule1" => array(
"rule" => 'isUnique_flag1',
"message" => "このメールアドレスは既に本登録されています",
),
"rule2" => array(
"rule" => 'email',
"message" => "メールアドレスを正しく入力してください",
),
"rule3" => array(
"rule" => 'notEmpty',
"message" => "メールアドレスを入力してください",
),
),
rule1のisUnique_flag1が欲しいのです
さらにいえばflag0のemailの登録があった場合はupdateをかけたいと思っております
分かりづらくてすいません
0405nobodyさん
2011/03/22(火) 00:59:49.73ID:???仮登録は普通空メから始めないか?
フォームから始めると登録する方も運営者側も面倒なことになりそう
フォームでメアドを入力させるとなると、複数のフィールドを見なきゃいけないので、isUniqueをそのままは使えないし
この辺を参考にして複数フィールドのチェックしてみたら?
http://dxd8.com/archives/212/
0406nobodyさん
2011/03/22(火) 16:50:27.43ID:???それ、携帯サイトだけだろ。
0408nobodyさん
2011/03/23(水) 02:19:41.25ID:???Cakeのdatabase.phpで接頭辞を指定した時、
モデルによって別の接頭辞を参照させる事って出来るのでしょうか?
0409nobodyさん
2011/03/23(水) 02:34:35.94ID:???$model->tablePrefix で接頭辞は設定できるよ
0410nobodyさん
2011/03/23(水) 04:31:57.56ID:???0411nobodyさん
2011/03/23(水) 17:03:31.26ID:???どのようにすればよいでしょうか?
0412nobodyさん
2011/03/23(水) 21:52:21.71ID:???0414nobodyさん
2011/03/24(木) 22:31:38.58ID:???0415nobodyさん
2011/03/25(金) 00:11:11.21ID:???0416nobodyさん
2011/03/25(金) 01:26:19.03ID:???CodeIgniter並とは言わないが
0417nobodyさん
2011/03/25(金) 01:54:30.06ID:???appコントローラーに書いたコードをやっぱりコンポーネントに書こうとか。。
と考え出すとリファクタリングの沼に入る。
小さいアプリならOK。大規模アプリならOK
しかし中途半端な規模のアプリだと途端に境界性が曖昧になる。
0418nobodyさん
2011/03/26(土) 11:46:01.37ID:???悪いことをするつもりはありませんがw wikileaksのハッカーに興味をもっております
彼らは、どうやってするのでしょうか?非常に興味があります。よろしくお願いします。すいません。マルチします。
0419nobodyさん
2011/03/26(土) 11:57:35.71ID:???0420nobodyさん
2011/03/26(土) 15:25:23.14ID:???ハッカー入門の定番といえばHow To Become A Hacker
http://cruel.org/freeware/hacker.html
0421nobodyさん
2011/03/26(土) 16:09:31.08ID:???wget --no-check-certificate https://github.com/cakephp/cakephp/tarball/1.3.8
0422nobodyさん
2011/03/28(月) 22:15:30.46ID:???0423nobodyさん
2011/03/28(月) 22:21:48.45ID:???0424nobodyさん
2011/03/28(月) 22:50:29.41ID:???0425nobodyさん
2011/03/28(月) 23:52:08.29ID:???0426nobodyさん
2011/03/30(水) 22:32:56.78ID:???のテーブルの場合、ルーティングどうしてる?
「会員の日記に新規登録」みたいな要件の時、
普通に/user_diary/add みたいな形?
それともルーティングして /user/diary/add みたいに分けるとか?
ピュアPHPで言うとディレクトリ分けして /user/diary.php、/user/diary_add.php
みたいなファイル名になると思うけど、Cakeの場合どうしたらいいか悩む。
0427nobodyさん
2011/03/30(水) 22:55:24.34ID:???なぜuserが必要になるのか
0428nobodyさん
2011/03/30(水) 23:21:05.99ID:???あるいは、ぐるなびのようにお店が日記書く場合は?
前者はadmin_diaryで後者はshop_diaryにテーブル名がなると思うんだが。
0429nobodyさん
2011/03/30(水) 23:32:41.51ID:???0430nobodyさん
2011/03/30(水) 23:55:08.49ID:???それなら新規登録とか編集の場合はどうするの?
0431nobodyさん
2011/03/30(水) 23:58:44.61ID:???0432nobodyさん
2011/03/30(水) 23:58:59.11ID:???0433nobodyさん
2011/03/31(木) 01:46:28.99ID:???prefixの事でもないんだろ?
0434nobodyさん
2011/03/31(木) 01:47:51.69ID:???全然答えが違うのは俺が糞質問したせいですかそうですか
0435nobodyさん
2011/03/31(木) 09:51:47.82ID:???0436nobodyさん
2011/03/31(木) 10:17:31.74ID:PPG+iO3gユーザ日記
/diaries/add
管理者日記
/admin/diaries/add
admin部分の文字列は自由に変更できます
0437nobodyさん
2011/03/31(木) 11:02:48.89ID:???http://www.localhost.com/diary
ユーザーなら
http://www.localhost.com/user/diary/2011/03/25
だろzk
0438nobodyさん
2011/03/31(木) 12:10:57.75ID:???0439nobodyさん
2011/03/31(木) 12:24:42.78ID:???0440nobodyさん
2011/03/31(木) 13:16:31.72ID:???あえてテーブルを分ける必要があるとは思えない。
diaryテーブルを作ってUserに紐付ける。
userが管理者なのかショップなのか一般ユーザーなのかはGroupで分ける。でいいと思うんだけど。
そうすればACLでそれぞれの権限を付けるのも楽だし。
0441nobodyさん
2011/03/31(木) 14:29:12.31ID:???その方法もありなんだが、テーブルがごちゃまぜにならないか?
今回の例は「日記」だけど、これが「カテゴリ」だったらどうだ?
テーブルのカラム構成は一緒だろうけど、中身が違ってややこしいぞ。
0442nobodyさん
2011/03/31(木) 14:33:03.85ID:???用途毎にテーブルを分けた方が良いと思うんだけどな
どうも>>436-437や>>440のいう設計が俺には具体的に理解できない
0443nobodyさん
2011/03/31(木) 16:20:17.53ID:???俺も>>440とおなじ設計をする。
ECサイトを設計するとして、
服と靴は別テーブルにしないだろ。
ショップが複数のECサイトだとしても、
商品テーブルはひとつだろ。
0444nobodyさん
2011/03/31(木) 16:23:52.64ID:???テーブルがごちゃまぜになっても、必ずuserならuserに紐付いてるわけだし、
データを適切に出し入れすればいいだけなので、
俺は何も困らないけど。
cakeから見て違うものとして扱いたければ、テーブルは同じでもモデルを複数作ればいいし。
0445nobodyさん
2011/03/31(木) 16:58:51.59ID:???いまだによくわからない。
0446nobodyさん
2011/03/31(木) 18:21:32.92ID:???なるほどな。必要以上に正規化しすぎなのかもな。
>>445
俺は「日記」というコンテンツがあったら、
使用する人毎にテーブルを分けると思ってるんだよ。
だから、>>426みたいな質問をしたんだが、
そうなるとルーティングとか考慮しなければ行けないし、
app以下のファイル構成もどうしようかと悩んでたんだ。
まぁ、app以下の構成については同じテーブルを使うにしても悩むけど。
0447nobodyさん
2011/03/31(木) 19:16:46.21ID:???そうだね。
例えばユーザーの追加と削除する場合の事考えてみたらいいかもね。
君の設計だと、ユーザーを追加するたびにテーブルとプログラムを追加することになるし、
削除する場合もテーブルのドロップとプログラムの削除が発生する。
他の人の場合だと、ユーザーテーブルにユーザーを追加or削除で完了する。
0448nobodyさん
2011/03/31(木) 20:46:25.50ID:???ま、俺の場合は「会員」とか「店」とか固定ユーザは決まってるから
そんな頻繁にテーブル作成が発生するとは思えないんだけどね。
OSSのシステム見ると、割とテーブル分けているケースが多いんだけど、
それはOSSだからであって、実際は分けないのかな。
0449nobodyさん
2011/03/31(木) 20:57:27.72ID:???>俺は「日記」というコンテンツがあったら、
>使用する人毎にテーブルを分けると思ってるんだよ。
これは、Aさんというユーザが居たら、Aさん用のテーブルを追加するって
意味じゃないからなw誤解を与える書き方してすまん。
普通に、user_diaryは会員用の日記テーブルで、
shop_diaryは店用の日記テーブルって意味です。
0450nobodyさん
2011/03/31(木) 22:42:57.35ID:???0451nobodyさん
2011/04/01(金) 02:01:02.57ID:vplR+RLt0453nobodyさん
2011/04/01(金) 19:42:12.09ID:OVR2Hl6Vさすがにpaginate関連は移動できないですよね?
0454nobodyさん
2011/04/01(金) 22:33:37.22ID:???0455nobodyさん
2011/04/01(金) 23:28:23.20ID:???0456nobodyさん
2011/04/02(土) 04:18:30.00ID:???問題だと思うんだが。
リプレイス案件とか既存のシステムと同じDBを使うとかだと
逃げ道作ってくれないと困るんだよ・・・
0457nobodyさん
2011/04/02(土) 17:31:31.80ID:???0459nobodyさん
2011/04/02(土) 20:40:40.45ID:???ActiveRecordを実装するにはO/Rマッパーが必要で、
O/Rマッパーは複合キーと相性が悪いよね。
ActiveRecordにも得手不得手があるから、ActiveRecordが苦手なスキーマが必要ってなら、
ActiveRecordを前提に成り立ってるフレームワークであるCakePHPは、
そもそも道具選びが間違ってるんじゃないかな。
それは言いすぎだとしても、
CakePHPをはじめとしたフレームワークは、
ニーズの多いところをよりよくカバーするから、
ニーズの少ないところにサポートが無いのはしょうがないと思うよ。
各テーブルにidという主キーが必ずあるようなスキーマで、
大抵のものは作れるし、その規約に沿ったほうが楽ってのもあるね。
長々と書いたけど、
俺はそんなスキーマで作るようなのしか、今のところ作る予定が無いから、
複合キーなんていらなかったにゃって思ったんだ。
もちろん冗談交じりだぞ。
0460nobodyさん
2011/04/03(日) 01:00:03.54ID:???0461nobodyさん
2011/04/03(日) 09:43:57.18ID:???0462nobodyさん
2011/04/03(日) 17:15:58.87ID:???英語版はまだマシだけど、
日本語版は古い・間違いが多い・サンプルがシンプルすぎて実務で悩むとこは結局学習できない。
読む必要が無いってわけじゃないんだけど、Cookbookだけだとつらいと思うよ。
CakePHPによる実践Webアプリケーション開発って本を参考にしたけど、
これはもう古いからなぁ。1.2ベースだし。
でも一応、Cookbookのサンプルを作って基本的なことを理解してからなら、
この本はそこそこ役に立ったよ。
余談だけどACLが複雑すぎて使う気が起こらない。
0463nobodyさん
2011/04/03(日) 23:06:40.74ID:???そういうユーザーが多いから、良い本が少ない→売り上げ少ない→次の本が出ない、の悪循環なんだろうか
0464nobodyさん
2011/04/04(月) 00:08:26.97ID:6xfhCachCookBookには詳細な機能はあまり丁寧に載っていないので、いちいちネットで調べることが多くなってくる。
そうなったらリファレンス本を買って眺めながらいろいろつくってみるといい。
自分の場合はそれでかなり覚えたよ。
個人的には秀和システムのCakePHP辞典がおすすめ。
手持ちの初版には誤字が少しあるけど、暇な時に眺めるだけでおもしろい。
0465nobodyさん
2011/04/04(月) 01:12:38.49ID:???自分が何したいかで調べたらいいし、作者の作法を身につけなくても良い
Cookbookで流れをつかんで、開発しだしたらAPI Class Indexを参照すればほぼ足りる。
そのうちタイミングとかインスタンス生成が気になってソースを見ることになるけど。
0467nobodyさん
2011/04/04(月) 04:07:47.83ID:her01YtQ俺はctpファイルの先頭に、
<?php $this->set('title_for_layout', '新規投稿'); ?>
みたいにしてるけど
他にスマートな方法あるかな?
コントローラのアクションの中に書くのはまずいよな。
タイトルはビューの情報だし
0468nobodyさん
2011/04/04(月) 09:57:31.52ID:???てか、例えばユーザーのプロフィールページの場合、ユーザー名とか書きたいから、
モデルからユーザー名など貰って、アクションでセットする事になるんじゃ。
0469nobodyさん
2011/04/04(月) 10:59:35.73ID:???controller見なきゃ行けないというのがな・・・
かといってビューで編集するのもなんか違う気がするし
0470nobodyさん
2011/04/04(月) 11:43:22.82ID:???設定ファイルの中に、
$config['title']['Users']['signup'] = '新規登録';
みたいに、コントローラー名、アクション名をキーにした設定を作る。
コントローラーから
$pagetitle = Configure::read('title'.'.'.$this->name.'.'.$this->action);
って感じで読み込んでタイトルにセットする。
ってやればタイトルは設定ファイルで管理できるよ。
0471nobodyさん
2011/04/04(月) 13:41:54.22ID:???0472nobodyさん
2011/04/04(月) 14:25:48.01ID:???0473nobodyさん
2011/04/04(月) 16:00:00.04ID:???Cakeってかphpで作る必要ないっしょ。
0475nobodyさん
2011/04/04(月) 20:26:13.06ID:???変数にタイトルをセットしてエレメント呼び出しの手順で。
0478nobodyさん
2011/04/05(火) 01:09:57.20ID:???リクエストを送っても何も戻ってこないんですが
modelフォルダの中に何も入れてないのがいけないのでしょうか?
教本にはcontrollerのファイルとcomponentのファイル、ctpファイル、と合計3つしかファイル作ってないんですが・・・
0479nobodyさん
2011/04/05(火) 02:03:54.39ID:???とりあえず
・cakephpのインストール完了画面を出す
http://futuremix.org/wp-content/uploads/2010/06/cakephp_warning-500x273.png こんな感じの
・controllerだけでhello worldを出す
この2点をやるのが先だ
0480nobodyさん
2011/04/05(火) 02:28:06.37ID:9HAh5AGuちなみにUtilクラスとはDateUtilとかStringUtilとか
共通処理を集めたスタティックメソッドのクラスです。
0481nobodyさん
2011/04/05(火) 02:52:43.54ID:???http://book.cakephp.org/ja/view/899/CakePHPのフォルダ構造
を見るといいです。libsかvendorsのどっちか。
0483nobodyさん
2011/04/05(火) 07:47:02.08ID:???うちはvendorsにcommon_function.phpを置いて、
app_controller.phpでrequired_once
0485nobodyさん
2011/04/05(火) 10:52:01.47ID:???ただ、ググったサイトを参考にHello_World_controller.phpをつくり、ソース↓
<?php class HelloWorldController extends AppController {
public $name = 'HelloWorld';
public $uses = array();
public $autoRender = false;
function index()
{
echo "hello world!";
}
}?>
これをapp/controllersフォルダに入れて、xxx/hello_world/にアクセスしたところ、
HelloWorldController could not be found.と言われてしまいます。
なぜ認識してくれないんだろうか、、、
0487nobodyさん
2011/04/05(火) 11:39:44.86ID:???度々失礼いたします。それはHello_World_controller.phpのファイル名ってことですよね。
誤字脱字がないことを確認して、もしかしてアンダーバーが悪いのかと消したりしたんですが
どうにも認識してくれません。。。↓のサイトのまんま参考にやってみたのですが、、、
ttp://ameblo.jp/tondemonight/entry-10117208283.html
理解力のない馬鹿ですいません。もう一息ヒントをいただけませんか。
0488nobodyさん
2011/04/05(火) 11:42:45.36ID:???すいません、$nameの部分だったんですね。できました!!
ありがとうございました!
0489nobodyさん
2011/04/05(火) 14:46:55.58ID:???JSON形式で出力するはずが、HTML形式で出力されているのが原因でした。
478で言っているctpファイルで、JSON形式にエンコードする旨が書かれているのですが、
調べたところ、layoutフォルダにdefault.ctpを作ればよいと書いてあり、
[default.ctp]
<?php echo $content_for_layout; ?>
というファイルを作ったところ、確かにブラウザで直アクセスしたときの表示は変わったのですが、
javascriptからのリクエストに対するレスポンスは変わらずHTML形式のままでした。
あともう少しだと思うのですが、、、何か良い方法があればご教授ください。
0490nobodyさん
2011/04/05(火) 16:15:37.38ID:???0491nobodyさん
2011/04/05(火) 17:15:06.34ID:???0492nobodyさん
2011/04/05(火) 20:52:45.33ID:???0493nobodyさん
2011/04/06(水) 02:23:36.12ID:3ifgNuIvつCakePHP 規約ワードメーカー
http://www.cpa-lab.com/tech2/inflects/
0494nobodyさん
2011/04/06(水) 03:25:19.02ID:???これってややこしいよな。それならテーブル名がwomanでもいいじゃん。
Cakeの規則に合わせるのは大事だけど、
英語得意じゃない日本人にとっては、分かりやすい形で良いと思うんだけどなあ
0495nobodyさん
2011/04/06(水) 06:51:01.77ID:6d97kR6lいや、
Aというデータがあるとして、
・Aの複数形=その中には複数のAデータがある
・Aの単数形=Aのデータ1つ
複数形は、DBでいうとテーブル。
プログラミング言語では配列。
単数形は、DBでいうとレコード
プログラミング言語では配列でない変数
複数形になれると、無意識に使うようになるよ。
英語が得意でなくても英単語覚えるのは別。
実際英単語組み合わせてプログラミングしてるんだから。
0496nobodyさん
2011/04/06(水) 11:34:08.35ID:???だから、それらを開発者が、あるいはその他の人間が覚える必要あるのか?
と言いたいんだ。せっかく作ったのを自慢したいのはわかるけどさ。
別にテーブル名はあくまで”識別名称”なだけだから、何だって良いんだよ。
別にCakeに従わないからと言ってエラーになるわけじゃないんだし。
womanという単語で分かるなら、womanというテーブルで良いんだ。
categoryをcategoriesにしなくても良いんだよ。categorysが誤訳でもさ
0497nobodyさん
2011/04/06(水) 12:49:30.36ID:???皆が1つのルールを覚えて使う事による効率というのがあるんだよね。
というかフレームワークってそういうためのもの。
使わない自由もあるけど、Cake使うならCakeのルールを覚えて使う事をお勧めするよ。
まあCookbookでpeopleテーブルととPersonモデルって見たときは、
最初は誤植か何かかと思ったよ。
そしてちょっとやりすぎだとは思う。
0498nobodyさん
2011/04/06(水) 13:56:28.56ID:???0499nobodyさん
2011/04/06(水) 13:59:00.24ID:???0500nobodyさん
2011/04/06(水) 14:06:34.56ID:6d97kR6lあなたプログラミングに向いてないわ・・・。
自分が気にしないからって、categorysとか付けちゃう人と開発したくないな。
自分しか触らないって言うんだろうけど、
その精神は今後絶対に成長に影響する。
不特定多数が使うようなライブラリを開発することも、
複数人で開発することも、全て否定するんだよね。
>>498
一人で開発しようが、規約(=レール)は大事だよ。
統一された規約のもと開発するのは、とても安心するし、効率的。
そのレールの上に乗って進んでいくだけになるからな。
0501nobodyさん
2011/04/06(水) 14:18:49.90ID:???普通に複数人で開発に使えると思うよ。
シンフォニーと比べると、規模は小さめのあたりが得意だとは思うから、
人数的にも少なめかもしれないけど。
関係ないけど、シンフォニーっていつも綴りわからんくなるわ。
0502nobodyさん
2011/04/06(水) 15:28:30.51ID:???逆だ逆。俺は仕様にめちゃくちゃこだわって規約を厳守するようにしているが、
結局、人間だ。必ず・絶対厳守させるには、それ相応の知識・経験が必要。
で、womanをwomenに変えなくても一般的なwomanで皆が分かるなら
それで良いじゃんって話だ。俺もそれで良いと納得してる。
お前は自分が作ったツールを是が非でも認めて貰いたいのかも知れないが、
ぶっちゃけ、お前のそれは無駄だと思う。
0503nobodyさん
2011/04/06(水) 15:30:04.66ID:???まぁ、それならそれで良いよ。ただ、そういうプロジェクトもあるって事は理解しろよ。
0504nobodyさん
2011/04/06(水) 15:54:13.60ID:???0505nobodyさん
2011/04/06(水) 16:03:54.11ID:???0506nobodyさん
2011/04/06(水) 16:07:43.86ID:???ある程度の規模のプロジェクトだと100%の規約の遵守を求められるよな。
規約を守っていなければ、動作が正常でもバグ扱い。
俺もそれが普通だと思っているのだが、そうじゃない人にとって規約ってなんなんだろう。
0507nobodyさん
2011/04/06(水) 17:03:43.47ID:???が、英語圏製なので仕方が無いのかなとも思うよ。
最良のフレームワークだとはまったく思ってない。
でも、Cakeというフレームワークを使って、
楽になる部分は多いし、使う以上は規約にそったほうが効果もでやすいからな。
それにCakeは規約どおりじゃないと苦労するフレームワークだとも思う。
単数・複数や主キー名をid以外にしたりと、逃げ道は用意されてる部分もあるけど、
そういうの使うのは、ハマリの元だわ。
0508nobodyさん
2011/04/06(水) 17:03:56.78ID:???お前らからしたら、俺がその「規約を守らなくてもいい人」だと言うことだろうけど、
>>502に書いたとおり、
俺は「規約が守らない人もいて、完全に厳守させるのは人間だから難しい。
だから、チーム毎、プロジェクト毎で分かればそれで良いじゃないか」
と言いたいだけなんだけどな。お前らはどうも頭が固いようだな。
0509nobodyさん
2011/04/06(水) 17:07:19.44ID:???0510nobodyさん
2011/04/06(水) 17:43:49.17ID:???複数形にしても、間違ってたらエラーになるわけだし。
エラーになったから規約が難しいのがおかしい、ということを許し続けると
それこそフレームワークを使う意味のないほど混沌としたソースに
なる気がする。
「複数形がわからなければ辞書で調べろ」くらいはルールにできるだろ。
0511nobodyさん
2011/04/06(水) 18:22:20.17ID:???<?php echo $this->element('header', array('cache' => true)); ?>
テストの時にキャッシュをしたくないので、core.phpの
Configure::write('Cache.check', true);
をコメントアウトしました。
しかし、キャッシュされます。
冒頭のようにビューに書いた場合、どうしてもキャッシュされるのでしょうか?
0512nobodyさん
2011/04/06(水) 20:31:22.12ID:???0513nobodyさん
2011/04/06(水) 21:42:55.64ID:???分類したいんだけど、単純にビューで echo $html->image("sub/foo.png") としても
表示出来なくて…。
こういうのは、どうすれば良いのでしょうか?
すごく簡単な事なんだろうけど、どなたか教えて頂けませんか?
0514nobodyさん
2011/04/06(水) 22:38:28.84ID:8sZZCO1iCakePHPは複合キーに対応していないとのことですが、
別に複合キーのテーブルのモデルでも
$Controller::primaryKeyに設定できないだけで、
モデルのfindメソッドとかは使えるし、
特に問題ないのかなーと思ってしまうのですが、
どのような場合に困る(対応していない)のか
馬鹿な俺にでも分かるように教えてもらえませんか?
0518nobodyさん
2011/04/07(木) 00:31:02.97ID:???カラム名どんなのがあるか最初に調べに行くのなw
そんなのModelに定義するようにすりゃーいいのに。
速度より使いやすさを取ったか。
0520nobodyさん
2011/04/07(木) 01:29:37.39ID:???ググってもこれと言った方法がありません・・。
Windows上でシェルのプログラムが正しいかテストする方法はないのでしょうか?
0521nobodyさん
2011/04/07(木) 02:46:08.85ID:???小リナックスかアンドリナックスを入れる
0522nobodyさん
2011/04/07(木) 02:54:26.99ID:???ちゃんとCLIでphpが動くように設定しておけばうごくんじゃね?
Winで開発してないから、断定的なことは申し上げられないが。
0523nobodyさん
2011/04/07(木) 03:29:37.72ID:???0524nobodyさん
2011/04/07(木) 03:35:45.09ID:???コマンドプロンプトで
php C:\htdocs\cakephp\cake\console\cake.php -app app test
みたいなコマンドで普通に実行されました。
3時間ぐらい悩みましたが、問題なく出来そうです。ありがとうございました。
0525nobodyさん
2011/04/07(木) 04:32:01.56ID:???0526nobodyさん
2011/04/07(木) 13:28:09.21ID:???0527nobodyさん
2011/04/07(木) 14:38:28.18ID:???0528nobodyさん
2011/04/07(木) 14:43:49.48ID:???0529nobodyさん
2011/04/07(木) 15:24:13.83ID:???教えてやりゃいいことだと思うんだが
0532nobodyさん
2011/04/07(木) 16:30:13.31ID:???日本のマの平均給与が低いわけがわかった
0533nobodyさん
2011/04/07(木) 17:02:38.88ID:???0534nobodyさん
2011/04/07(木) 19:10:52.62ID:???B「え?いや・・・え?これが?」
A「お前本当に馬鹿だな。全てがお前と同じ人間ばかりかよ。
これだからプログラマ脳だと言われるんだ」
C「わからないじゃなくて、分からない奴もいるって話だろ。お前がルールの全てか。」
D「「漢字読める俺マジレベル高いw」←wwwwwww」
B「・・・」
0535nobodyさん
2011/04/07(木) 19:54:40.69ID:???つぎに誰がそのソースみるのかわかったもんじゃない。
0536nobodyさん
2011/04/07(木) 20:00:22.84ID:???A「ソースのコメントに漢字使うんじゃねえボケ!読めねーだろうが!」
B「わかりました。Aさんの仕様に合わせます」
こう言えばあっさり終了するわな。どんだけコミュ力ねーんだw
自ら関係をややこしくしてるのな
0540nobodyさん
2011/04/07(木) 22:05:38.14ID:???0541nobodyさん
2011/04/07(木) 23:13:04.80ID:???0544nobodyさん
2011/04/08(金) 05:06:31.14ID:???少し見てみたら、ものによっては完成度低いのもあるっぽいんだけど、
沢山ありすぎて全部みて使えるの探すのつらす。
0546nobodyさん
2011/04/08(金) 11:13:22.78ID:???0547nobodyさん
2011/04/08(金) 13:41:36.04ID:???0548nobodyさん
2011/04/08(金) 13:46:25.03ID:???0550nobodyさん
2011/04/08(金) 13:49:24.40ID:???0551nobodyさん
2011/04/08(金) 16:19:21.29ID:???find('all', array("test"=>"test");
で、ひとつもヒットしないはずなのに
なぜか全てのレコードの要素がヒットしてしまいます
なぜヒットしてしまうのか検討がつきません
どなたか詳しい方いましたら教えていただけませんか。よろしくおねがいします
読解力ないからよくわからんけど、
Cakeが最新なら引数の指定がすでにちがう。
んでcore.phpでdebugレベルあげたらSQLや件数が確認できるから
それで見当つくんじゃないかな。
0553551
2011/04/08(金) 18:02:13.57ID:???気分を害した方いましたらすいません
>>552
ありがとうございます。引数を調べたところ無事できました。
参考にしている本の内容ではfindAll()メソッドを使っていて、
そのメソッドが新しいバージョンだと使えないみたいで
findでも同じ引数でできるものかと勘違いしてたみたいです。
0554nobodyさん
2011/04/08(金) 21:00:03.96ID:???文字コードってdatabase.phpで設定するやつ?
encoding=utf8ってやってもupdateしてくれないわ
これどういう条件だとinsertじゃなくupdateしてくれんだろ
0557nobodyさん
2011/04/09(土) 00:42:48.52ID:???各コントローラ共通の関数
これらは作れるけど、
各ビュー・コントローラ共通の関数の置く場所って用意されてないよね。
結構用途として必要な気がするけどなぁ
0558nobodyさん
2011/04/09(土) 01:14:29.30ID:???この質問たびたび見るけど
cakephp/libs or cakephp/vendors
だからな。
0559nobodyさん
2011/04/09(土) 05:15:53.72ID:???やはり自民党清和会の下に結集し、日教組を壊滅させることでしょうね。
日教組の教師に「労働者の権利」などという左翼思想を吹き込まれた連中が義務も果たさずに
サビ残は嫌だ、有給取らせろなどと権利ばかり主張しています。
あとは残業代を要求して裁判を起こしてるような腐った輩を社会全体で徹底的に叩くことでしょう。
0561nobodyさん
2011/04/09(土) 14:22:34.77ID:???自作の共通関数をlibとは考えられないな〜。
0562nobodyさん
2011/04/09(土) 14:26:08.69ID:???/model配下には各テーブルに対応したvalidationなどを作成すると思うのですが、
実装者が存在しないテーブルのmodel名でmodel.phpを作りました。
要件的に「動けばOK」なので特に問題は無いのですが、Cakeの規約に反しているように感じています。
テーブル:
files(web上にアップロードしたファイルのパスやファイル名を保持する。ここでDL可としたファイルのみ、ダウンロードなどが可能)
実装:
files.phpにはvalidation。upload機能の場合のみ、upload.phpを使用。
個人的にはfiles.phpにすべて記述すべきと思ったのですが、どうでしょうか。
0563nobodyさん
2011/04/09(土) 14:53:58.71ID:???vendorsは廃止になってないよ。
以前は、vendors/cssやvendors/img、vendors/js にファイルを置くと
webdir配下に置いてあるのと同じように使えてたけど、それが廃止になっただけ。
0565nobodyさん
2011/04/09(土) 15:00:10.04ID:???0566nobodyさん
2011/04/09(土) 15:02:11.37ID:???その実装者の実装みてないから、良い実装かどうかはなにもいえないけど、
モデルを作ったことに関しては問題ないと思うよ。
この辺を読むとなにか分かるかもね。
http://www.1x1.jp/blog/2008/04/cakephp_model_6misinformation.html
http://d.hatena.ne.jp/hiromi2424/20101122/1290379655
0567nobodyさん
2011/04/09(土) 16:44:49.74ID:???>2. DBを使わないといけない(DB操作が無いと使えない)
なるほど。
テーブルに直結していなくてもいいのですね。controllerの肥大化は確かにまずいですね。
0568nobodyさん
2011/04/09(土) 20:07:55.18ID:???コントローラのメソッドの引数が バリデーションに引っかかると消えてしまうので悩んでいます。
http://localhost/lists/additem/7
↓ バリデーションに引っかかると
http://localhost/lists/additem
cake bake で作られた edit メソッドではバリデーションに引っかかってもちゃんと引数を引き継いでいるんですが、イマイチ仕組みがわかりません。
どの辺りを調べれば良いかなど、アドバイスをお願いします。
0569nobodyさん
2011/04/09(土) 20:13:14.37ID:???よくわからんけど、URLが変化してるってなら、リダイレクトしてんじゃないの?
遷移・リダイレクトなしにURLが変化する事は流石にないし。
というかCakeがどうこうできる部分でもない。
0570nobodyさん
2011/04/09(土) 23:04:19.28ID:???なに、IDってauto_incrementじゃないとUPDATEできないの?
それ問題だろ。マジで。
0571nobodyさん
2011/04/10(日) 00:14:09.48ID:???Tag hasMany Postの関係のモデルがあるのですが、
Tagのうち、Postと結びついているもののみを取得したい場合どのように検索するのが一番よいのでしょうか?
0572nobodyさん
2011/04/10(日) 00:18:50.03ID:???form->createのarrayに'url'を追加してみたらどうでしょう。
同じ問題を見たことがある
0573nobodyさん
2011/04/10(日) 01:30:39.63ID:???Tag hasMany Postって変わった構造だな。
まぁそれは置いといて、Tag側のテーブルにカラム追加しないと使えないけど、
belongsToアソシエーションのcounterCache使えば?
Postモデルの$belongsTo = array('counterCache' => true) して、
tagsテーブルにpost_countフィールド作れば良かったはず。
詳しくはぐぐれ。
0574nobodyさん
2011/04/10(日) 02:04:25.16ID:???TagとPostの名前を例に使ったのはちょっと不適切でしたね。
counterCasheの存在を知らなかったので、調べてみます。
ありがとうございました。
0575nobodyさん
2011/04/10(日) 18:52:08.74ID:???また一人で開発しようとする場合は何人日かかります?(デザイン抜きで)
そもそも、その規模のものはcakephpでは運用無理ですか?RoRとかのほうがいいのかな?
0580nobodyさん
2011/04/10(日) 21:04:02.20ID:???規模なら結構作れると思うよ。俺も似たようなSNS作ってるし。
アクセス増加はキャッシュでどうにかなると思う。
Cakeのじゃなくてmemchachedを使うとか。
0581nobodyさん
2011/04/10(日) 21:44:52.07ID:???CakeってDBのレプリケーションに本体レベルで対応してなよね?
Cakeは中・小規模向けだと思うから、mixi規模は無理じゃないかな。
機能だけそろえるってなら話は別だけど、
シンプルなSNSから発展していろんな機能がついてるから、
作るのはかなり時間かかると思うぞ。
開発者の能力にもよるだろうけど、普通に3桁人月じゃないかな。
0582nobodyさん
2011/04/10(日) 23:46:27.64ID:???0583nobodyさん
2011/04/11(月) 02:22:00.62ID:???コンテンツの事まで言うと、
アバターなんかも3Dで作った物をgifに変換して・・・みたいにしてるみたいだし
cakeなんかで作る部分とは違う技術が必要だよね。
0584nobodyさん
2011/04/11(月) 03:36:02.16ID:???てか、Cakeで生成するファイルでDB分けられるんだから、
そういう負荷対策出来ると思うんだけど。
0585nobodyさん
2011/04/11(月) 10:36:06.39ID:???List, SubList にそれぞれ no という項目あって、それぞれを no 順で取得したいのですが、
List から find('all') で取得した場合 List は no 順になっても SubList が id 順になってしまいます。
以下のように取得して View に渡しているんですが、いいやり方ありますでしょうか?
$this->set('lists', $this->List->find('all', array('order' => array('List.no, List.id DESC'))));
0586nobodyさん
2011/04/11(月) 11:13:07.76ID:???0587nobodyさん
2011/04/11(月) 16:45:08.99ID:???http://log.ryti.ch/items/view/3773
0588nobodyさん
2011/04/11(月) 18:51:32.41ID:???結局SQL書いてるわ....
0589nobodyさん
2011/04/11(月) 18:52:42.64ID:???それはやってみたんですが、
$this->List->find('all', array('order' => array('ListSub.no, ListSub.id DESC')
とすると ListSub なんてないと怒られてしまいます。
0590nobodyさん
2011/04/11(月) 19:03:42.57ID:???array('order' => 'List.no DESC, ListSub.id DESC')
か
array('order' => array('List.no' => 'DESC', 'SubList.id' => 'DESC'))
のどっちかにしろって話じゃないの?
0591nobodyさん
2011/04/11(月) 19:29:41.23ID:???何度もごめんなさい。
書き方変えてみたけどダメでした。
List から id はとってこれるけど、
$this->List->find('all', array('order' => array('List.id' => 'DESC')
こうすると ListSub.id なんてカラムはないよと言われるんです。
this->List->find('all', array('order' => array('ListSub.id' => 'DESC')
SQL Error: 1054: Unknown column 'ListSub.id' in 'order clause'
List は ListSub を hasMeny、ListSub は List を belongsTo でそれぞれ関連づけています。
まだモデルの仕組みなどわかってない部分が多いので、ここを調べろなどのアドバイスでもお願いします。
0592nobodyさん
2011/04/11(月) 20:45:04.42ID:???悩むくらいならそれもありだと思う。
ナンバリングのために、あるテーブルにsaveした場合の処理は、
sqlでUPDATE文書いた。
0593nobodyさん
2011/04/11(月) 21:19:28.81ID:???たぶんやりたいことは
this->ListSub->find('all', array('order' => array('ListSub.id' => 'DESC')
なんじゃないか
0594nobodyさん
2011/04/11(月) 21:41:28.44ID:???コントポーネントの数がすごいことになった。
0596nobodyさん
2011/04/11(月) 23:27:03.36ID:???0597513
2011/04/11(月) 23:27:39.13ID:???親切なレスありがとうございます。
パーミッションは問題無くて、単に拡張子が大文字になってただけだった。
すぐにお礼レスしたかったけど、規制かかって書き込めず、忘れてしまってた。
0598nobodyさん
2011/04/12(火) 00:32:09.98ID:???数えたら50〜60ぐらい。たいしたことなかった。
コントローラも同じくらい。
ゲームはロジックが複雑だから、コントローラにごちゃごちゃ書きたくなくてコンポーネントに書いた。
0599nobodyさん
2011/04/12(火) 01:03:22.27ID:???Cakeだと重くね?
0601nobodyさん
2011/04/12(火) 02:05:11.25ID:???0602nobodyさん
2011/04/12(火) 02:31:07.71ID:???0603nobodyさん
2011/04/12(火) 10:52:30.89ID:???フレームワークを変えても重いのはあまり変わらない事が多い気がする。
で、対処の方法もキャッシュ効かせたりとかで、やることも変わらない。
0604nobodyさん
2011/04/12(火) 11:41:59.99ID:???それでcakeが悪いとか…頭ごなしに批判する奴は大抵こういうふうに理解が浅いよな。
0605nobodyさん
2011/04/12(火) 12:01:58.45ID:???それにFW使ったら重くなるのは当然だろ。
0607nobodyさん
2011/04/12(火) 12:52:39.39ID:???だいたい1コントローラあたり数個使ってる
0608nobodyさん
2011/04/12(火) 17:08:21.81ID:???fixtureの$recordsに配列でデータを記載しておくと、テストごとにこの$recordsの値で
テーブルが初期化されます。
この$recordsをテストごとに切り替えたいのですが、どのようにすればよいでしょうか?
たとえばtestAは$records、testBは$records2を使う、といった具合です。
0609nobodyさん
2011/04/13(水) 05:21:58.13ID:???自分でつくったのは、 var $components で読み込まないと使えない。
bakeで自動作成されたコードはどこでSession読み込んでるんだろう??
0610nobodyさん
2011/04/13(水) 11:38:58.52ID:89duiIHJerror404をオーバーライドすると、HTTP/1.1 200 OKが帰ってくるようになる。
app/app_error.php
<?php
class AppError extends ErrorHandler {
function error404($params) {
extract($params, EXTR_OVERWRITE);
$this->error(array(
'code' => '404',
'name' => 'Not found',
'message' => sprintf(__("The requested address %s was not found on this server.", true), $url, $message)
));
$this->_stop(1);
}
}
?>
このオーバーライドしたerror404を消したり、
parent:error404($params);
とかにすると、404 Not found が帰ってくるようになる。
バグかな?
関数の中身は、
cake/console/error.php の error404 をまるまるコピーしてます。
0611nobodyさん
2011/04/13(水) 11:51:22.60ID:89duiIHJ<p class="error">
<strong><?php __('Error'); ?>: </strong>
<?php printf(__('The requested address %s was not found on this server.', true), "<strong>'{$message}'</strong>"); ?>
</p>
こうなってたから
$this->cakeError('error404' array('message' => '削除されてるよ'));
みたいにやってた。
HTMLのmessageはurlのことで、
PHP側のmessageはステータスメッセージのことなのな。
ややこしすぎワロタ
0612nobodyさん
2011/04/13(水) 23:16:26.44ID:???UPDATE時に、同一テーブルの現在の値を取得する必要ができました。
model.php内で this->$date とやってももちろんダメでした。
sqlを書いてクエリーとして得た結果をarrayに代入することで要件は満たせたのですが、
何かもっと良いスマートな方法は無いでしょうか?
0613nobodyさん
2011/04/13(水) 23:28:39.98ID:JM0N9TIZ複数のバリデーションをかける場合、
バリデートする順番を指定したいのですが、
できますでしょうか?
例えばログインIDに対して半角英数チェック・文字数チェック
・独自バリデーションの3つをする場合で、
独自バリデーションではDBに値を見にいって実際に存在するかを
チェックするとします。
その際に半角英数チェックと文字数チェックの前に
独自バリデーションが走ってDBにアクセスしに行っちゃうと
SQLエラーになってしまいますよね。
その他にもバリデーションに優先順位を付けたいと思う場面って
多々あると思うんですが、そのような方法があれば教えて下さい。
0614nobodyさん
2011/04/13(水) 23:56:57.25ID:???出来ます。
validationのarrayに実行したい順番で代入すれば、上から順に処理します。
例題や公式ページに1項目に対しての複数のvalidation実装例は載っているはずです。
0616nobodyさん
2011/04/16(土) 00:30:56.91ID:IZGr1QKIModel::save()でINSERTやUPDATEできますか?
0617nobodyさん
2011/04/16(土) 00:37:26.03ID:???あまり想定はされてなさそうな事だから、こんなとこで聞くよりも確実だぞ。
そういえば確か、ユニークIDを生成して、それを主キーの値に使う方法があった気がするな。
ユニークIDは確かStringだったと思うぞ。
0618nobodyさん
2011/04/16(土) 16:57:45.01ID:???どんな方法で実装すればいいのでしょうか?
adminページを作ってアクセス制限するか、投稿フォームなどと同じようにトークンを使うか
という方法を考えましたが他に一般的な方法やライブラリなどあれば教えてください
0619Perl忍者lvl4 ◆M5ZWRnXOj6
2011/04/16(土) 17:00:51.46ID:uU0OblS5生 同 .じ . /´ | (ゝ___) い
.し 士 .レ .__/'r-┴<ゝi,,ノ ro、 は、
.な で .ベ ∠ゝ (ゝ.//` ./`| }⌒j
.い し .ル } ⌒ /`ヽ、_∠l,ノ ・ヽ´
.! ! か の / ´..:.} >、、___, .r、 ソ、`\
/ ..:.:.} / |∨ ` ̄
/ ..:.:./ | 丶
/ _、 ..:.:.:.{ .{.:.:. \
{ ..:Y .ゝ、 {.:.:.:.:. ヽ
|、 ..:/ 丿 .:〉 >.- ⌒ . ヽ
/ {. ..:./ ソ ..:./ .( ..:.:.:` ..:}
./..:.:}.:.:./ ヘ、 ..:./ .\ ..:.:r_,ノ、.:.:}
./..:.:/|.:/ {.:./ X.:.:}.} X X
/..:.:/ .}.:| }:/ .Y丶ヽ Y.:Y
. __/.:/ { } 《.〈、 _,,__>.:》丶 Y.:\
/.:.:.:.:.::/ !.:.:ゝ ゝ.:. ̄ヾ ´:.:.:.:.:.:.:.:.:ヾゝ \.: ̄>
0621nobodyさん
2011/04/18(月) 22:09:29.52ID:???みたいな書き方ってCakePHPではどうすればいいのでしょうか?
0622nobodyさん
2011/04/18(月) 22:47:14.55ID:???0623nobodyさん
2011/04/18(月) 23:24:01.55ID:???0624nobodyさん
2011/04/18(月) 23:33:50.50ID:???$cond = array('Model.id' => intval($id));
$this->Model->updateAll($field,$cond);
こんな感じ?
0625nobodyさん
2011/04/19(火) 00:03:43.86ID:???もちろんpointは数値列だよね。
0626nobodyさん
2011/04/19(火) 01:32:17.04ID:???AppControllerのbeforeFillterでConfigure::write()を使って書きこんで、
コントローラとビューでConfigure::read()で読み込むのって
使い方合ってますかね?
0627nobodyさん
2011/04/19(火) 10:29:11.63ID:???0628nobodyさん
2011/04/19(火) 18:32:47.47ID:???setだとキー追加じゃなくて完全に代入されるイメージ
app_controllerに作るか
0629nobodyさん
2011/04/19(火) 22:51:20.45ID:???どこかに書いといて欲しい
0630nobodyさん
2011/04/19(火) 22:53:32.33ID:???0631nobodyさん
2011/04/19(火) 23:14:41.15ID:???0632nobodyさん
2011/04/20(水) 00:31:33.15ID:NKIgYW4jForm::input()を使ってる記事が多いんですが、
これって1.3でも使って良いメソッドなんでしょうか?
あと、1.3で<input type="image">を出力したいんですが、
Formヘルパーのどのメソッド使えばいいですかね?
0633nobodyさん
2011/04/20(水) 01:01:40.71ID:???0634nobodyさん
2011/04/20(水) 01:11:12.04ID:???ありがとうございます。
Formヘルパーではないのですね。
Form::inputあたりをつかうのかと予想していたのですが、
1.3のCookbookにもメソッドが載ってないんですよね。
かなり謎です。
0635nobodyさん
2011/04/20(水) 09:42:08.04ID:???ググルのもいいけど、cookbook見てみたら。
http://book.cakephp.org/ja/view/1383/%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0
input使うと、テーブル定義をみて自動でinputかtextareaとか分けてくれる。
0636nobodyさん
2011/04/20(水) 10:15:29.58ID:???マニュアルは英語版から読むようにしよう。
form->submitに画像のURLを入れれば自動でできる。
echo $this->Form->submit('ok.png');
↓
<div class="submit"><input type="image" src="/img/ok.png"></div>
0637nobodyさん
2011/04/20(水) 14:51:42.93ID:???ビヘイビアの方を呼びたい場合はどう書けば良いのでしょうか
0638nobodyさん
2011/04/20(水) 23:32:04.82ID:???具体的には<link rev="made" href="mailto:foo@bar.jp" />ってのを書きたいんですけど
html->linkとやるとa要素になってリンクが張られてしまいます
0639nobodyさん
2011/04/21(木) 00:46:29.17ID:fExhpbbEバリデーションエラーでその画面に戻った時にその値に戻っちゃうんですが
これってどうしたらいいですかね?
0640nobodyさん
2011/04/21(木) 01:42:12.03ID:???英語版cookbookにそれこそ載ってるよ。
もしくはGoogle検索「CakePHP a href」とかやればいくらでも実例が出てくる
0641nobodyさん
2011/04/21(木) 01:43:38.32ID:???本来のHTMLで書きたい要素を
arrayに
'name' => 'value'
で書いてブラウザーで開いてソース見れば、解釈されているかどうか分かって楽だった
0642nobodyさん
2011/04/21(木) 13:32:49.30ID:???0643nobodyさん
2011/04/21(木) 22:02:14.62ID:???array(
"key" => "value"
)
0645nobodyさん
2011/04/22(金) 00:04:27.08ID:???これを
http://cakephp/foo/posts/edit
http://cakephp/bar/posts/edit
とカテゴリで分けたい。
こういう場合はやっぱり FooController と BarContoroller してルーティング設定で命名規則無視するしかないですか?
できれば PostController のみで終わらせたいんだけど、
admin_edit で admin/edit になるみたいに foo_edit で foo_edit にする方法ってあります?
ちなみに admin ルーティングも残しておいてさらに追加したいんです。
0646nobodyさん
2011/04/22(金) 00:19:11.61ID:???foo/posts/edit とbar/posts/edit はやることが違うの?同じ事をやるの?
fooとかbarは種類が決まってるの?
0648nobodyさん
2011/04/22(金) 00:43:08.35ID:???やることはほとんど一緒です。
ただ読みに行くデータが違います。
テーブルごと分けるか、種類を分けるフィールド追加して区別するかはわかりませんが、
とりあえずカテゴリごとの動作ということにしたいんです。
0650nobodyさん
2011/04/22(金) 10:38:38.24ID:???すんません、HTMLヘルパーに自分で書く必要がありますね。
cake/libs/view/helpers/html.php
の
function link
を参考にして、
自分で a が付かない<link rev=〜を出力するように頑張ってください。
0651nobodyさん
2011/04/22(金) 12:48:06.33ID:???モード7の時はSJISで送信され、モード8の時はUTF-8で送信されます。
Cakeでは、ビューをUTF-8で作り、出力時の文字コードは
<?php echo $html->charset('SJIS'); ?>
と言う感じでShift_JISにしています。
ただ、$form->createのencodign(accept-charset)はutf8のままなので、
UTF-8としてデータが送信されてくると思うのですが・・・原因が分かりません。
古い端末だと文字コード変換が上手く行かないとかあるのでしょうか?
直接Cakeの質問と違うかも知れませんが、分かる方いたら教えて下さい
0652nobodyさん
2011/04/23(土) 00:32:58.36ID:???普通のINSERT文をModel::execute()で実行しようとするとシンタックスエラーに
なってしまいます。
でもちゃんと正しいINSERT文なんです。
ちなみにModel::query()で実行すると正しく実行されます。
Model::execute()って何か問題があるのでしょうか?
0653nobodyさん
2011/04/23(土) 01:09:09.71ID:???追いかけてみたらいい
0654nobodyさん
2011/04/23(土) 01:43:52.45ID:???0655nobodyさん
2011/04/23(土) 05:42:00.71ID:???ビヘイビアの方を呼びたい場合はどう書けば良いのでしょうか
0656nobodyさん
2011/04/23(土) 06:34:39.22ID:???0657nobodyさん
2011/04/23(土) 06:50:55.20ID:???そういうことをちゃんとマニュアルに書いておいてくれればいいのにと思います
0658nobodyさん
2011/04/23(土) 10:16:16.61ID:???マニュアルにない使い方するときは、ソースコード追ったほうがいいよ。
0659nobodyさん
2011/04/23(土) 11:25:02.93ID:???下の例では Data に Category を belongsTo して、
Category は Auther を belongsTo、Data を hasMany してます。
$this->Data->find('first', array(
'conditions' => array('Data.id' => $data_id),
'recursive' => 2
));
Array(
[Data] => Array(
[fields] => 'value',
[Category] => Array(
[fields] => 'value',
[Auther] => Array(
[fields] => 'value'
)
[Data] => Array(
[fields] => 'value'
)
)
)
)
これで find すると data['Data']['Category'] 以下にもう一度 Data を取得してしまいます。
data['Data']['Category']['Auther'] は欲しいので、アソシエーションを利用してData を読まずに Auther だけ取ってくる方法はありますか?
0660nobodyさん
2011/04/23(土) 11:26:52.00ID:???読みにくくなってしまったので・・・。
$this->Data->find('first', array(
'conditions' => array('Data.id' => $data_id),
'recursive' => 2
));
Array(
[Data] => Array(
[fields] => 'value',
[Category] => Array(
[fields] => 'value',
[Auther] => Array(
[fields] => 'value'
)
[Data] => Array(
[fields] => 'value'
)
)
)
)
よろしくお願いします。
0663nobodyさん
2011/04/23(土) 12:23:07.77ID:???Auth使うよりも自作(か、セションコンポーネント)使う方がいいんじゃね?
なんかAuthの使い勝手が良いんだか悪いんだか分からなくなる時がある。
0664底辺
2011/04/23(土) 15:05:11.60ID:???containか?
最初からcakeに入ってるよ。
アソシエーションは、時間かけて勉強した方があとあと役に立つから、焦らず、ゆっくり。
0666nobodyさん
2011/04/23(土) 16:31:56.32ID:???ユーザー区分が3つあって、見せていい画面が決まっていて、その遷移もphp上で実装した。
0667nobodyさん
2011/04/23(土) 16:40:36.63ID:???まあタダだしそのくらいはしょーがないよね
0668nobodyさん
2011/04/23(土) 21:21:23.23ID:???俺はなんとかCaleの機能で出来ないかと悪戦苦闘していたが、
やりづらいこともあるよな。こだわりすぎはよくないな
0669nobodyさん
2011/04/23(土) 23:34:00.74ID:???しかし使えないほど駄目でもないのが悩み所
0670nobodyさん
2011/04/24(日) 00:03:38.71ID:???0671nobodyさん
2011/04/24(日) 00:23:08.15ID:???テスト環境で他のアプリと相乗りさせようとしたらハマりまくった。
0672nobodyさん
2011/04/24(日) 00:27:18.69ID:???0673nobodyさん
2011/04/24(日) 00:52:08.70ID:???OAuthの生成シグネチャが合わなくなってハマった事がある
0674nobodyさん
2011/04/24(日) 17:01:45.23ID:YIdiQXQPトップページのctpファイルに貼ったswfから
他のページのctpファイルにリンクしたい場合、
どのようなasを書けばリンクできるのでしょうか?
0675nobodyさん
2011/04/24(日) 17:55:47.22ID:???0676nobodyさん
2011/04/24(日) 21:59:25.37ID:???ログイン→リダイレクト→ログイン後のページ
に移動するのがAuthの機能だと思いますが、
ログイン成功時に、ユーザ情報以外のセッションを付加して
ログイン後のページに推移させるにはどうすればいいのでしょうか?
0677674
2011/04/24(日) 22:00:11.95ID:YIdiQXQPレスありがとうございます。
ヘッダー、フッター、サイドメニューをctpで出力し、
コンテンツ部分をiframe(ファイル名を十進数にして出力)で
表示させてるらしいのです。
ctpでのphpは以下のような記述です。
-------------------------------------------
<?php global $directory;
$url = $this->Html->url(array('controller' => 'common',
'action' => 'ヘッダー、フッター、サイドバー出力.ctp'),
array('escape' => false));
?>
<a href="<?php echo $url;?>/iframeurl:<?php echo bin2hex($directory.'aaaa/bbbb.html');?>">リンク</a>
----------------------------------------------------
上記で出力されるページを、
swf内のボタンでactionscriptでリンクさせたい場合、
以下のように単純な指定でリンクすることはできますか?
疎くてflashVarsすらよくわからず申し訳ございません。。
on (release) {
getURL("http://ドメイン/ctp格納ディレクトリ/ヘッダー、フッター、サイドバー出力.ctp/iframeurl:<十進数で出力されたaaaa/bbbb.html>");
}
0678nobodyさん
2011/04/25(月) 11:04:24.75ID:???$this->Auth->autoRedirect = false; にして、 login() ルーチン内で
if ($this->Auth->user()) { // ログイン成功時
$this->Session->write('xxxx', 'yyyy'); // セッション情報追加
$this->redirect($this->Auth->redirect()); // ログイン成功時のリダイレクト先に飛ばす
}
みたいにすればいいんじゃないかな
0681nobodyさん
2011/04/26(火) 00:35:52.43ID:ITZhMk+T登録画面→確認画面→完了画面
直接完了画面のURLを叩いた場合に
エラー画面に飛ばすみたいなのは
どのように実装するのがスタンダードでしょうか?
0682nobodyさん
2011/04/26(火) 00:39:30.76ID:???0683nobodyさん
2011/04/26(火) 00:49:03.08ID:???$this->Session->setFlash('登録画面からやりなおしてください');
$this->redirect('/xxxx/error');
}
}
0684681
2011/04/26(火) 01:17:51.28ID:???$this->dataの値はチェックしてました。
完了画面ではユニークなキーを発行してmemcachedにフォームの値を入れて
確認メールを送信するのですが、
完了画面でブラウザの更新ボタンを押すともう一度
ユニークなキーでmemcachedにフォームの値を入れて
確認メールを送信してしまうのです。
これどうしたらいいかなーと。
0685nobodyさん
2011/04/26(火) 09:35:16.53ID:???hogehoge.com/controller/action/
と
hogehoge.com/abc/controller/action/
を同じアクションにして、かつ
リンクはabcのprefixつきにしたいのですが、良い方法ありますでしょうか?
動きとしてはprefixルーティングで abc_indexを呼ぶのではなくindexを呼ぶようにしたいのです。
dispatchを書き換えていまはうまくいっていますが、スマートでないような気がして、、
0686nobodyさん
2011/04/26(火) 09:49:38.99ID:???俺はPOSTで画面毎に値を渡してチェックしてるよ。
登録
<input type="hidden" name="next" value="confirm" />
確認
<input type="hidden" name="next" value="complete" />
フォームヘルパーじゃなくて普通のHTMLで用意すれば
$this->dataの配列内で差別化できるし。
昔ながらのやり方だけど、これで良いんじゃないかな?
0687nobodyさん
2011/04/26(火) 17:24:39.04ID:???$this->referer()しかないでしょうか?
0688nobodyさん
2011/04/26(火) 18:29:04.76ID:???0689nobodyさん
2011/04/26(火) 23:17:20.63ID:???URLが異なるならviewもcontrollerも別ファイルにして、
共通のphpを読むようにしたら?
0690nobodyさん
2011/04/27(水) 00:01:18.98ID:???スレッドの一覧を取りたいんですけど、メッセージの投稿日時で
スレッドをソートしたいときは、どう書けば良いのでしょうか?
0691nobodyさん
2011/04/27(水) 07:54:41.56ID:???でいいのでは?
0692690
2011/04/27(水) 19:33:54.84ID:???レスありがとうございます。
説明不足で申し訳ありません。
$this->paginate での条件指定方法が分からないのです。
0693690
2011/04/27(水) 19:36:38.21ID:???FROM に message が指定されておらず・・・。
$this->paginate = array(
'contain' => array(
'Message' => array(
'fields' => array('id', 'created')
)
),
0694690
2011/04/27(水) 19:39:00.83ID:???'Thread.delete_flag <>' => 1
),
'limit' => 10,
'order' => array(
'Message.created' => 'desc' // ダメなとこ
)
);
0695nobodyさん
2011/04/27(水) 22:56:05.83ID:???0696nobodyさん
2011/04/27(水) 22:59:12.39ID:???$usesにMessageを追加して
$this->paginate = array('Message', array(...
とするとか
0697nobodyさん
2011/04/28(木) 10:44:52.76ID:???それが嫌な場合はページネートにjoin句を書く。
$this->paginate = array(
Thread=> array(
'conditions' => array(),
'limit' => 24,
'order' => array(),
'joins' => array(
array(
'type' => 'LEFT',
'alias' => 'Message
'table' => ''messages',
'Message.created' => 'desc'
)
))
);
0698690
2011/04/28(木) 21:41:37.52ID:???すみません。私が理解出来ず、うまく行きませんでした。
SQL 文を見ると "SELECT Thread.Array, ..." と訳の分からん状態に。
でも、ご助言ありがとうございました。
0699690
2011/04/28(木) 21:50:08.53ID:???Thread の一覧では created DESC ですが、Thread の内容、
つまり Message の一覧では、created ASC にしたいので、
hasMany の定義に書くことに抵抗感がありました。
(あまり CakePHP のこと分かっていないのですが・・・)
0700690
2011/04/28(木) 21:52:25.68ID:???GROUP BY を使うことなると今更ながら気づきました。
ただ(MySQL の仕様なのか)意図した形でソートできず、
結局 Thread の modified フィールドを Message の
挿入時に update するのが手っ取り早いのかな・・・と
諦めの段階に入っています。
レス下さった皆様、ありがとうございました。
また、何かあれば宜しくお願いします。
0702nobodyさん
2011/04/29(金) 12:03:24.33ID:???コンポーネント、ビヘイビア、ヘルパー全部で共通で使いたいってときがあるんですけど、そういう場合どうしてますか?
0703nobodyさん
2011/04/29(金) 12:12:37.08ID:???vendors/common_function.php
0704底辺
2011/04/29(金) 14:15:06.85ID:???0705nobodyさん
2011/04/29(金) 15:04:24.70ID:???/cake
└/common ←ここに入れてる
0706nobodyさん
2011/04/29(金) 15:23:45.09ID:???0707nobodyさん
2011/04/29(金) 17:07:06.27ID:???0709nobodyさん
2011/04/29(金) 23:16:13.52ID:???0712nobodyさん
2011/04/30(土) 18:46:27.76ID:???NGにしにくいし
0713nobodyさん
2011/04/30(土) 22:44:34.97ID:???0714nobodyさん
2011/05/02(月) 00:32:14.07ID:???Windows7に換えたらその現象がなくなった・・・気がする
0716nobodyさん
2011/05/02(月) 06:49:05.23ID:???0717nobodyさん
2011/05/02(月) 12:00:40.62ID:???今月の月曜日に全部1を挿入といったようなことをしたいです。
それってSQLの話だけど、例えばDATE_FORMAT()をつかって条件指定できる。
Cake的にはupdateAll()をつかうだけ。
0719nobodyさん
2011/05/02(月) 21:40:11.28ID:???CakePHPは大量アクセス前提のアプリも問題なく開発できるってことですね。
分かります。
0720nobodyさん
2011/05/02(月) 23:48:36.39ID:???俺が思うに、それは管理画面だけの話で、
アプリ側やアクセスが頻繁に発生する部分では、
限りなくピュアPHPで自作してると思うよ。
0721nobodyさん
2011/05/03(火) 01:54:20.44ID:???0722nobodyさん
2011/05/03(火) 13:16:24.74ID:???いつの間にかCake風のプログラミングしてることあるよな
0723nobodyさん
2011/05/03(火) 13:54:27.72ID:???0724nobodyさん
2011/05/03(火) 14:06:56.07ID:???PHPあんまり知らないJavaはよく知ってる人が、ぱっと見で
「あ、これ分かりやすいね」と言ってた。
0725nobodyさん
2011/05/05(木) 03:39:50.22ID:???確認画面で画像を確認した後、saveってできるのかな?
やっぱりそこは自作しないといけないのかな
0726nobodyさん
2011/05/05(木) 10:09:53.55ID:???Symphonyに先行されたくはないよな
0727nobodyさん
2011/05/05(木) 13:07:28.09ID:???それはあなたが参加チームに入ればいい。
あなたも参加チームに加わって、2.0のバージョンの開発スピードを速くしましょう、ボケ。
0728nobodyさん
2011/05/06(金) 00:21:29.94ID:???app_controller.phpに「var $autoLayout = false」を指定してないと、
エラーページにもレイアウトが使用されるんだな。
会員専用ページとか、レイアウトに「default.ctp」を使用してたら
これが読み込まれるから大変な事になる
0729nobodyさん
2011/05/06(金) 20:26:56.51ID:aIuVNDEL$this->set('foo', 'bar');
ってやってビューで$fooでbarが出るようにできたんですけど、
このfooを配列にしたいんですけどどう入力したらいいんでしょうか
$this->set('foo', 'bar');
$this->set('foo', 'bar2');
とやったらただ$fooが上書きされただけで配列にはなりませんでした
0730nobodyさん
2011/05/06(金) 20:30:43.07ID:???0732nobodyさん
2011/05/08(日) 16:57:22.50ID:???>PEARのののの
なんで、尻取りRock'n Rollみたいなタイトルになっとるんかね?
0733nobodyさん
2011/05/10(火) 22:38:37.80ID:???http://www.devshed.com/c/a/PHP/7-PHP-Frameworks-Tested-For-Speed/
0734nobodyさん
2011/05/11(水) 17:51:03.34ID:???今まで使った事無かった機能とかいろいろ使ってみて勉強になるわ。
やっぱ実益を兼ねると捗るな。
0735nobodyさん
2011/05/11(水) 18:08:06.21ID:???みんなのDMM様とかね。
0737nobodyさん
2011/05/12(木) 00:21:57.52ID:RDtqq4sqエラーハンドリングするのって
$res = $this->Model->save();
if ($res === false) {
// エラー処理
}
って感じでいいですかね?
0738nobodyさん
2011/05/12(木) 01:54:00.04ID:???// エラー処理
}
これじゃ駄目なのか?
delete()は場合によっちゃgetAffectedRows()がいる。
0740nobodyさん
2011/05/12(木) 08:57:26.67ID:i1t11ChC何となくスルーしてきたんだけど、
例えば、
・コントローラ内からモデルの関連モデルをとり回す
・モデルから関連モデルをとり回す
時に、$this->Post->User とか、モデル内なら $this->User とかやるけど、
これって何が嬉しいの?
関連モデルも取ってくるだけなら、$recursiveとかunbindModel, bindModel やContainableビヘイビアとか
あるわけだし、直接関連しないモデルとの突き合わせや何かに使うならClassRegistry::init('Model')でいいわけじゃないすか
$this->Post->Comment とか、 $this->Post->User とか使って美味しい場面ってどこなんですか?
初心者のつもりじゃなかったけど、この部分だけ何年もスルーしてました。
0741nobodyさん
2011/05/12(木) 14:23:52.63ID:???設計として関連モデルまでのアクセスを基本とすることを良しとすることもあるのかも。
他にもシュガーシンタックスとか色々推測はできるけど、コアチームに聞いたほうが早い
かもしらんね。
こういう話題はフォーラムとかに振ったほうがいいんじゃないかなぁ。
0742nobodyさん
2011/05/13(金) 00:53:55.24ID:bOFdFGkgある項目で半角英数のみを許可するというチェックで
入力がされなかった場合はスルーさせたいのですが、
以下のような感じでいいでしょうか?
var $validate = array(
'id' => array(
'alphaNumeric' => array(
'rule' => 'alphaNumeric',
'message' => '半角英数で入力して下さい'
)
),
'pass' => array(
・・・
)
);
0745nobodyさん
2011/05/13(金) 20:45:10.04ID:???配列のConfigに”[timeout]=>10”とあります。
これってタイムアウトの秒数じゃないですよね?
あと、セッションタイムアウトになったら自動的にログインフォームに戻りますが、
またログインするとそれまで、↑になる前のページが表示されます。
これって単にリファラをチェックしているだけなのでしょうか?
0746nobodyさん
2011/05/15(日) 03:29:24.39ID:???あぁRoR系ってこの程度の物だったのねって感じ。
全然ダメダメで安心した。
俺の作ったフレームワークの方が万倍良いわw
0747nobodyさん
2011/05/15(日) 09:56:30.32ID:???0748nobodyさん
2011/05/15(日) 11:33:35.65ID:???0749nobodyさん
2011/05/15(日) 11:44:06.73ID:???0750nobodyさん
2011/05/15(日) 13:24:31.86ID:???0751nobodyさん
2011/05/15(日) 22:23:01.76ID:???746もそういうことかな?
0752nobodyさん
2011/05/16(月) 01:58:31.58ID:???自分で隅から隅までわかっているライブラリのほうが良いと感じる
当たり前といえば当たり前の話です
0753nobodyさん
2011/05/16(月) 02:09:10.52ID:???あえて言えばアンチパターンを学んだね。
ActiveRecordなんか最悪だぜ。
0754nobodyさん
2011/05/16(月) 03:59:25.37ID:???0755nobodyさん
2011/05/16(月) 13:05:48.45ID:Buwzzl2BCake真似てDispacherとかなんやらかんやら複雑に創り上げた黒歴史の俺俺フレームワーク思い出すからやめろ・・・
0756nobodyさん
2011/05/16(月) 13:23:10.09ID:???0757nobodyさん
2011/05/16(月) 16:44:54.09ID:???ifやissetばかりのコードになるんだが、みんなはどうしてる?
if (isset($this->data['User']['name'])) {
if ($this->data['User']['name'] <> "") {
echo $this->data['User']['name'] . 'さん';
}
}
みたいな。画像があるか無いかのチェックならもっと複雑になる。
俺の書き方が悪いかもしれないけど、良い書き方はないかな?
ちなみにめんどくさい時は@を付けてる。
0758nobodyさん
2011/05/16(月) 18:26:56.20ID:???PHP5.3以上限定だったっけな
0759nobodyさん
2011/05/16(月) 18:47:35.88ID:???0762nobodyさん
2011/05/16(月) 19:48:08.88ID:???普通にCakeのコードを書けば、データの入力有無に関わらず
配列の要素だけは最低限存在するんじゃない?
もしも場合によって要素が無いというケースを作ったのであれば、
そこは例外にならないようチェックを入れれば良いし。
0763nobodyさん
2011/05/16(月) 20:39:43.96ID:???第一引数の&$modelにもよく引っかかるし
なんでこんな実装になってんのよ
0764nobodyさん
2011/05/16(月) 23:05:12.61ID:???まさかいつも直接ビヘイビアのメソッド呼び出してるわけじゃないよな?
0765nobodyさん
2011/05/17(火) 01:45:48.69ID:p7ZABAr6Model::save()使えないんだけどその場合どうしたらいいですか?
1)他のメソッドを使う
2)Model::find()等でIDを取得した後Model::save()を使う
0766nobodyさん
2011/05/17(火) 02:09:58.52ID:???0767nobodyさん
2011/05/17(火) 02:25:59.11ID:???trueであることと、空文字列でないことをチェックするなら
isset()じゃなくて、!empty()を使えば一行で済む
<?php
$str = '';
var_dump (isset($str)); // true
var_dump (!empty($str)); // false
0768nobodyさん
2011/05/17(火) 08:21:09.15ID:???基本はIDを元に更新するけど、フラグや日時一括更新の場合など、場合にも拠る。
0769765
2011/05/17(火) 08:31:56.73ID:???つまり2)ってことですかね。
基本UPDATEはIDを元にするけどModel::updateAll()を使えば
ID以外でもUPDATEできるということですね。
ありがとうございます!
firstとかIDベースのじゃなくてallとかlistだとarray()が返るとおもた。
0772nobodyさん
2011/05/17(火) 12:30:13.80ID:???指定配列があるかどうかって書いてるから、isset使ってるんだろ?
お前さんのは$strを最初に書いてるじゃん。
0773nobodyさん
2011/05/17(火) 12:47:52.65ID:???isset と empty の挙動の違いは頻出ネタだと思うが。
つまり、こう書けるってこと。
if (!empty($this->data['User']['name'])) {
echo $this->data['User']['name'] . 'さん';
}
0774nobodyさん
2011/05/17(火) 13:19:33.25ID:???0775nobodyさん
2011/05/17(火) 13:21:09.79ID:???名前に0を入れる奴がいないとも限らないぞw
0776nobodyさん
2011/05/17(火) 13:57:44.20ID:YbRN4g9bでも判断してるのは$this->dataだけだし、emptyでもよさそうだな
0777nobodyさん
2011/05/17(火) 14:19:22.66ID:???if (checkData($this->data)) {
echo $this->data['User']['name'] . 'さん';
}
みたいな。
0778nobodyさん
2011/05/17(火) 14:20:22.87ID:???0779nobodyさん
2011/05/17(火) 14:29:36.21ID:???0780nobodyさん
2011/05/17(火) 17:24:54.66ID:ceh4vxWUempty('0')はfalseなのに
たまわらんわ
0781nobodyさん
2011/05/17(火) 18:03:41.28ID:???0だと変数の型がintegerで'0'だとstringだから。
ちなみにfalseはbool型の0。
0782nobodyさん
2011/05/18(水) 23:55:26.02ID:M1/yO2iL以下の例だとUser.sexの最初の値は$res[0]['DECODE(User']['sex']の中に入ってきたりします。
この現象を回避する手立てはあるのでしょうか?
$params = array(
'fields' => array(
'User.id',
"DECODE(User.sex, 1, '男', 2, '女')"
),
・・・
)
$res = $this->User->find('all', $params);
0783nobodyさん
2011/05/19(木) 00:00:58.47ID:???1.2とかだったらasで名前指定すればOK、ただしUserの配列の中に入れることはできない
0784nobodyさん
2011/05/19(木) 13:25:40.80ID:hw1vryEvvar $hasMany = array('Stock');
}
これで注文テーブルから注文レコードとると、
注文詳細レコードも一緒にとってくるようになったんだけど、
注文詳細レコードから、商品レコードも一緒に自動で取りたい場合はどうしたらいいんだろう。
1階層?しか自動でとってこないのかな
0785nobodyさん
2011/05/19(木) 14:05:27.71ID:???他モデルの設定が分からんからなんとも言えないけど
マニュアルは読んでやってみたけどできなかったっつう話?
0787nobodyさん
2011/05/19(木) 18:32:06.41ID:???テーブル設計が分かってないけど
recursive使えばいいんじゃない?
$this->Model->recursive = 2;
0788nobodyさん
2011/05/19(木) 20:00:43.27ID:???0789nobodyさん
2011/05/19(木) 23:51:36.35ID:???recursiveを使えば取得できるけど、joinされたSQLが発行されるわけではない。
パフォーマンスを考えれば自前でjoinすべき。
0790nobodyさん
2011/05/20(金) 00:27:57.20ID:???とたんにSQL書き始めちゃうみたいになるよね。
コントローラでSQLって書いちゃ駄目だろとか思う。
0792nobodyさん
2011/05/20(金) 00:54:14.48ID:???beforeValidateに以下のように書きました。
function beforeValidate(){
if (isset($this->data[$this->name]['tel'])) {
$this->data[$this->name]['tel'] = mb_convert_kana($this->data[$this->name]['tel'], 'rnask', 'UTF-8');
}
return ;
}
しかし半角に変換されません。何か間違っているのでしょうか?
ちなみに、コントローラーでバリデーションを実行する前に
$this->Model->set($this->data);
こうしてます。
0793nobodyさん
2011/05/20(金) 01:54:51.61ID:???>この関数は true を返さなければなりません。
>そうでない場合、現在の save() の実行が中断されます。
でないの?
0794nobodyさん
2011/05/20(金) 03:11:47.64ID:???return ; にしているところを return true; にしても変化はありません。
全角が半角になりません。
また、確認画面を入れてますので、saveでの動作ではありません。
$this->Model->set($this->data);
if (!$this->Model->validates()) {
$this->set('error', 'エラー');
}
みたいにしています。
0795nobodyさん
2011/05/20(金) 08:35:02.16ID:???これって2階層以上になるとjoinしなくなるってわけじゃないよな?
cakeのモデルの結びつけは全て単に個々のレコードをselectしてるんだよな?
0796nobodyさん
2011/05/20(金) 08:51:23.08ID:???はじめからORマッピング使うからそうなる。
フレームワークのDBアダプター使えば全てのDBサーバに最適なクエリが発行できると
思ってる奴多いけど、最適なクエリはDBサーバによって書き方が異なるのだ。
って、ねーちゃんが言ってた。
0797nobodyさん
2011/05/20(金) 09:52:43.86ID:???1階層目まではjoinされる。
2階層目以降はjoinされない。1階層目のデータをキーに、複数のSQLが実行される。
0798nobodyさん
2011/05/20(金) 10:10:25.55ID:???FooとBarがそれぞれ3つのHogeを持たせるため、
Foo、Barそれぞれに hoge_id, hoge1_id, hoge2_id カラムを作成して関連づけました。
これでHogeをfindで取得した場合、
Array
(
[0] => Array
(
[Hoge] => Array(~)
[Foo] => Array(~)
[Foo1] => Array(~)
[Foo2] => Array(~)
[Bar] => Array(~)
[Bar1] => Array(~)
[Bar2] => Array(~)
)
)
こんなふうになるんですが、(foreignKeyごとにエイリアス名を変えています)
これを
[Foo] => Array(
[0] => Array(~)
[2] => Array(~)
[1] => Array(~)
)
こんな感じに取って来れる方法はないでしょうか?
もしforeignKeyを分ける以外にいい方法があればそちらも教えて下さい。
0799nobodyさん
2011/05/20(金) 10:37:34.40ID:???0800nobodyさん
2011/05/20(金) 16:16:52.10ID:haTOk0oR0801nobodyさん
2011/05/20(金) 19:43:16.98ID:???これでツリー式のデータを取得できますが、
それを出力する方法で悩んでます・・。
目的はセレクトメニューのoptionに入れたいのですが、
何か良い参考ページかやり方はないでしょうか?
0803nobodyさん
2011/05/21(土) 00:18:07.82ID:/xyh+Ud4しようとすると本当に面倒くさい。
もう面倒だからquery()でSQL直着書きしちゃうんのってアリ?
0804nobodyさん
2011/05/21(土) 00:27:59.30ID:???ほとんどはcontainableビヘイビア使ってなんとかなってるけどなー
0806nobodyさん
2011/05/21(土) 03:26:01.22ID:???0807nobodyさん
2011/05/21(土) 10:05:49.32ID:???0808nobodyさん
2011/05/21(土) 10:10:24.97ID:???0809nobodyさん
2011/05/21(土) 10:54:51.77ID:???0810nobodyさん
2011/05/21(土) 11:27:17.26ID:/xyh+Ud4Model::execute()って無くなってない?
PDTの候補にも出てこないし実際に無いし。
0811nobodyさん
2011/05/21(土) 15:28:04.45ID:???executeは1.2で無くなったっぽいよ。
互換性のためにメソッドは最近まで残してあったのかも知れないけど。
0812nobodyさん
2011/05/21(土) 15:29:00.87ID:???0813nobodyさん
2011/05/21(土) 16:40:27.40ID:???0814nobodyさん
2011/05/21(土) 16:55:05.99ID:???0815nobodyさん
2011/05/21(土) 17:51:36.10ID:???0816nobodyさん
2011/05/21(土) 17:57:45.07ID:???0817nobodyさん
2011/05/21(土) 18:01:52.25ID:???0818nobodyさん
2011/05/21(土) 18:13:46.50ID:???0819nobodyさん
2011/05/21(土) 20:14:04.70ID:???Cakeのは簡潔すぎてマニュアルになってない
0820nobodyさん
2011/05/21(土) 20:56:37.13ID:???0821nobodyさん
2011/05/22(日) 01:47:54.93ID:???非常に困る。で、1.3の本が出始める頃には2.0が出てると。
0822nobodyさん
2011/05/22(日) 10:12:56.86ID:???0823nobodyさん
2011/05/22(日) 11:07:44.09ID:???リファレンス本が欲しいんだよね。
CakePHPポケットリファレンスが1.2までにしか
対応してないのでほぼ使えない状態となってるのが悲しい。
0826nobodyさん
2011/05/22(日) 13:03:28.19ID:???DooPHPで作られたサンプル的なサイト
ttp://sagasunippon.com/
ttp://www.kensakunippon.com/
0827nobodyさん
2011/05/22(日) 20:54:14.59ID:???findAllBy() は残ってるのに
0828nobodyさん
2011/05/22(日) 21:47:10.29ID:???0829nobodyさん
2011/05/22(日) 22:05:40.93ID:???find('all')に統合した方がきれいだし、拡張性も高い。
findAllByは特殊な呼び出し方だからどうしようもないでしょ。
0830nobodyさん
2011/05/23(月) 03:09:25.12ID:???ぐぐってfindAllを使って動かなくて困ったのも良い思い出
いや良くない思い出、マジ困るんですけど
0831nobodyさん
2011/05/23(月) 03:20:06.75ID:???毎回PHP側で判断するときに
(int)$hoge === 1
みたいに毎回intに変換して判断してるんだけどしょうがないのかな?
0832nobodyさん
2011/05/23(月) 03:41:29.44ID:???0833nobodyさん
2011/05/23(月) 19:43:00.12ID:???$model->hasMany = array(...);
としたんですが以下のエラーがでます。
Notice (8): Trying to get property of non-object [CORE/cake/libs/model/datasources/dbo_source.php, line 813]
Notice (8): Trying to get property of non-object [CORE/cake/libs/model/datasources/dbo_source.php, line 838]
Notice (8): Trying to get property of non-object [CORE/cake/libs/model/datasources/dbo_source.php, line 841]
Fatal Error (256): ConnectionManager::getDataSource - Non-existent data source [CORE/cake/libs/model/connection_manager.php, line 102]
ビヘイビア内で hasMany などアソシエーションを設定する方法はないでしょうか?
0836nobodyさん
2011/05/24(火) 06:31:50.22ID:???同じコントローラなら $this->setAction でいけるんだけどな。
なぜこれがやりたいかと言うと、
あるコントローラから、別コントローラのアクションにリダイレクトさせたいんだけど、
変数の値も渡したい。
ただリダイレクトさせると変数が渡らないので、
リダイレクトじゃない方法があれば解決するはずなんだけど、無いのかな?
0837nobodyさん
2011/05/24(火) 07:45:58.57ID:???0838nobodyさん
2011/05/24(火) 08:14:08.18ID:???Cake Wayなものがあればいいなと思って聞いたんだ。
別コントローラに行くときにメッセージをビューで表示したい場合とかどうやってるんだろみんな
結構出てくるケースだと思うんだが・・・
0839nobodyさん
2011/05/24(火) 11:16:00.88ID:???0840nobodyさん
2011/05/25(水) 08:16:55.25ID:???class AController extends AppController {
function add() {
$this->A->save()
$this->redirect('B/view');
}
}
↓AからBへリダイレクトする
class AController extends AppController {
function view() {
$this->set('finish_message', $finishMessage);
}
}
こんな感じで、AからBへリダイレクトするときに、Aから何らかのメッセージを渡したいんだ。
0843nobodyさん
2011/05/25(水) 16:27:17.78ID:???0845nobodyさん
2011/05/26(木) 14:00:39.30ID:???で生成されるURL
http://www.example.com/aaa/bbb
を文字列として取得するにはどうすればいいのでしょう?
viewの他のか所で使いたいのですが
0847nobodyさん
2011/05/26(木) 17:50:19.36ID:???「Security::setHash('md5');」と設定しろとありました。
これってどこに書くのでしょうか?
0848nobodyさん
2011/05/27(金) 12:07:32.90ID:???before_filter()
app_controller.php
bootstrap.php
などなど
0849nobodyさん
2011/05/27(金) 12:43:14.79ID:???>app_controller.php
ここ
0850nobodyさん
2011/05/28(土) 04:39:15.80ID:???/img/user/01234.png
↑こういう風にCake風のパスを格納した場合、
どうやって絶対パスを取得できる?
上記のパスを、
Router::url($path, true);
このように Router::url に渡すと、
http:://localhost/img/user/01234.png
と取得される。
こんなディレクトリは存在しなくて、
本当は、
http:://localhost/myapp/img/user/01234.png
↑このような値が欲しい。
どうしたらいいかな?
絶対パスをDBに入れるのはあんまりしたくない。
ディレクトリが移動したときやCakeアプリケーションいれているディレクトリ名が変わったり、
ドメインが変わったり、、、などなど不都合が出る可能性が高い
0851nobodyさん
2011/05/28(土) 12:01:51.80ID:???ちょっと使ってみた感じ使いにくかったような気がしたんだけど。
ググると自作してる人もいたりするんだよね。
0852nobodyさん
2011/05/28(土) 12:17:08.98ID:???ttp://book.cakephp.org/ja/view/122/コア定義定数
あと一回くらいは主要なインスタンスでdebug($this)を見ておいた方がいいかも。
0855nobodyさん
2011/05/28(土) 21:18:38.09ID:???0856nobodyさん
2011/05/28(土) 21:28:17.89ID:???やってくれてるはずだよ
0857nobodyさん
2011/05/29(日) 13:39:00.49ID:???$data = $this->User->findById(1);
こういう時の返り値を受け取る変数ってどうしてる?
上の例なら普通に$dataに入れればいいけど、
モデルが複数ある場合とかさどう書いてるのかな?と思ってさ。
$category_data = $this->Category->findById(1);
というのもなんか違う気がするし・・・
0858nobodyさん
2011/05/29(日) 14:31:32.78ID:???$users = $this->User->find('all');
$category = $this->Category->findById(1);
$categories = $this->Category->find('all');
0859nobodyさん
2011/05/29(日) 17:28:32.40ID:???俺もこれで良いと思う事はあるんだが、出力時に
$user['User']['name']
$categories[0]['Category']['name']
みたいになるわけだろ?
「ユーザにユーザ?」みたいな重複した無駄な間隔に襲われるんだよw
0860nobodyさん
2011/05/29(日) 17:37:40.66ID:???無駄でも分かりにくいより分かりやすいほうが良い
0861nobodyさん
2011/05/31(火) 17:12:52.71ID:???Cakeに移行したのでindex.phpにアクセスになります。
ただ、以前のURLでアクセスされた場合、ページが表示されなくなります。
index.htmlのファイルを作ってMETAで転送を入れようと思ったのですが、
それも無理でした。何か良い対策方法はないでしょうか?
0862nobodyさん
2011/05/31(火) 19:12:25.36ID:???CakePHPでの経験が1年以上という前提で。
0863nobodyさん
2011/05/31(火) 22:08:53.60ID:???0866nobodyさん
2011/05/31(火) 23:05:32.79ID:???冗談じゃなければ集まると思いますよ。
それぐらいだせば、PHPの経験5年以上、Cake3年以上は見つかると思います。
0868nobodyさん
2011/06/01(水) 10:36:35.25ID:???0870nobodyさん
2011/06/01(水) 14:16:33.47ID:???0871nobodyさん
2011/06/01(水) 17:57:54.98ID:???0872nobodyさん
2011/06/01(水) 18:00:00.20ID:???0874nobodyさん
2011/06/02(木) 10:50:55.22ID:???0875nobodyさん
2011/06/02(木) 12:25:11.52ID:???0876nobodyさん
2011/06/02(木) 13:12:15.25ID:???0877nobodyさん
2011/06/02(木) 13:22:05.78ID:???0878nobodyさん
2011/06/02(木) 18:43:49.24ID:???50万だった・・・
0879nobodyさん
2011/06/03(金) 13:08:01.66ID:???半年?
0880nobodyさん
2011/06/03(金) 13:14:29.51ID:???0881nobodyさん
2011/06/04(土) 18:26:58.34ID:+J1aexiqやろうとするとエラーになってしまいます。
やり方があるのでしょうか?
0884nobodyさん
2011/06/04(土) 21:01:58.29ID:???0886nobodyさん
2011/06/04(土) 23:21:53.17ID:???できないってことでいいのな?
それなら$_SESSIONに直接ぶち込むだけだから。
出来るとか思わせぶりなこと書いてんじゃねーよ。
0887nobodyさん
2011/06/05(日) 09:40:09.97ID:???example.com/profiles/
にアクセスするとcontroller:profiles、action:indexが実行されるけど、これを
example.com/profile/
でアクセスしてもcontroller:profiles、action:indexを実行したい。
profilesだけじゃなくabouts、contacts、worksすべてを単数形でアクセスしても実行したい。
また、example.com/profiles/hoge/のようにactionが指定されていても、example.com/profile/hoge/のようにしたい。
これについて、routes.phpに記述するうまいやり方ってありますか?
あればぜひお教えいただければと思います。
よろしくお願いします!
ClassRegistryつかったらどこからでも参照もってこれる。
0890nobodyさん
2011/06/05(日) 18:30:44.55ID:???・ID
・画像ID
・名前
:
画像テーブル
・ID
・パス
:
こんなテーブルがあって、
ビューからユーザの画像IDをユーザテーブルから取得して、
画像IDをもとに画像テーブルから画像パスを取得して、<img />で表示 ってしたい。
$this->Hoge->getUserImage($this->data['User']['image_id']); <!-- (HogeはComponent) -->
ビューの中から以上のように1ラインで取得できるのが一番使いやすいんだけど、
ビューでテーブルのデータを動的に取るのはMVCに反しているだろうし、
実際Cakeでやろうとするとちょっとレールから外れた方法とらないといけない。
0891890
2011/06/05(日) 18:32:58.67ID:???ユーザ画像データ配列をつくる(もしくはユーザ配列に画像パスを入れる場所をつくる)
そしてそれを $this->set で渡す。
って方法を一番最初に思いついたんだけど、
ユーザ情報は1ページに数十レコード取得する必要がある場合もあり、
これってどうなんだろうなぁと思って質問してみた。
ベストプラクティスはどうするのが良いんだろ?
0892nobodyさん
2011/06/05(日) 19:54:03.95ID:???お前のやりたい事を実現できる方法を取ればいいよ
0893nobodyさん
2011/06/05(日) 21:20:57.47ID:???ユーザーテーブルと、画像テーブルを結合して
取得すればよさそうだけど。
0894nobodyさん
2011/06/08(水) 02:44:10.87ID:???これってどう言うときに速くなるの?
コントローラーの$usesにモデルを10以上、設定している場合とか?
0895nobodyさん
2011/06/08(水) 14:05:06.26ID:???速くなる代わりにメモリ馬鹿食いになるらしいからサーバスペックにもよるんじゃない?
モデルの数も少数じゃ体感できないね
0896nobodyさん
2011/06/08(水) 15:00:44.48ID:???メモリ馬鹿食いって事は、メモリ開放せずにDBのレコードを保持するのかな?
ちょっとその辺の仕組みがよくわからないけど、
あまり有用なライブラリではないみたいだね。
色んなところでお勧めされてるけど。
0897nobodyさん
2011/06/08(水) 16:10:53.24ID:???馬鹿食いはいいすぎた
それによって今のPCスペックなら
パフォーマンスは向上することがあっても降下することはないよ
CakePHP2.0では正式に採用される有能プラグイン
0898nobodyさん
2011/06/08(水) 16:13:21.55ID:???俺なんてさくらVPSで使う事多いから、
512MBの鯖で大丈夫なのか?と心配だw
0899nobodyさん
2011/06/09(木) 17:20:16.09ID:???単体でモデルをfindで呼び出して配列を取得する事って出来ないかな?
0901nobodyさん
2011/06/09(木) 17:50:47.93ID:???管理画面ではCake使って
公開画面ではピュアPHPからCakeのモデル読み込みたいんだけど、
シェルでどうやってやるの?
0903nobodyさん
2011/06/09(木) 20:22:55.02ID:???>>902
つまり、XMLで出力してAPIみたいにして受けとれってことか?
まぁ、データをDBに保存しているわけだから、
ピュアPHPのファイルにmysql_connect書いてmysql_queryで
情報持ってきて出力するのは簡単だけどさ。
そうじゃなくて、Cakeのfindで得られる配列形式で受け取りたいんだよ。
だから、モデルを単体で読み込めたらいいなっと思ってさ。
0904nobodyさん
2011/06/09(木) 21:02:53.56ID:???大丈夫、噛み合ってるw
modelを直で使えればと俺も思うが、多分厳しい。
苦労するよりは、WebサービスとしてバックエンドでCakeを使うのが
色々と使い回しが効いて良いと思う。
ちなみに今フロントは.netで作って、DBアクセス周りはCakeでWebサービス、
という構成でシステム作成中。
0905nobodyさん
2011/06/09(木) 22:16:01.93ID:???なるほどな。やっぱりバックエンドで使う方が良いよな。
今フロントもCakeで作ってるんだが、
単なるブログのようなものでも重い重いw
0906nobodyさん
2011/06/10(金) 22:19:33.22ID:???非Cakeのファイルをwebroot以下に置くのと、
Apacheウェブルート下の特定のディレクトリにCakeを置くのどっちがいいかな?
後者のほうが融通はきくと思うんだけど。
0907nobodyさん
2011/06/10(金) 23:52:41.41ID:???0908nobodyさん
2011/06/14(火) 18:45:46.48ID:???別のデータ(例えば注文と商品を結びつけるレコードなど)を同時に保存するとき、
両方がバリデーション通ったときのみ、両方を保存する、
としたい場合どういうコード書いてる?
今悩んでいるケースは、
別のデータが、前に保存した別テーブルのIDを必要とするので、ややこしい。。。
テーブルA
・ID
・フィールド1
テーブルB
・ID
・テーブルAのID
このような感じ。
if ($this->Model1->validates()) {}
if ($this->Model2->validates()) {}
こうやって、両方のバリデーションが通ることを確認したあとでやりたいんだが、
上述したとおり、Model1のIDがModel2で必要になるとしたら、
どういうコードをかいてバリデーションさせたらいいんだろう?
0909nobodyさん
2011/06/14(火) 19:51:17.48ID:???0910nobodyさん
2011/06/15(水) 02:07:15.67ID:???CodeIgniterの公式みてたんだが、オレオレFWと大差ないな。
他のフレームワークを悪く言うつもり無いんだが、
速い理由わかってガッカリしたよ。何かもっと特別なやり方してると思った。
0911nobodyさん
2011/06/15(水) 02:16:56.77ID:???ciで良い時もあるし、ciじゃめんどくさい時もある。
0912nobodyさん
2011/06/15(水) 02:58:07.54ID:???Cakeは小規模向きって良く解説されてるけど、
小規模ならそれこそオレオレでいいわけだ。更新もあまりないだろうし。
けど、ポータルサイトとかモデルが50も100もあるような場合、
更新性や他者との連携に備えてCakeみたいな有名FWが活用できる。
CIのメリットは「高速・軽量」だろうけど、Cakeの代替には向かないなと。
それならオレオレのリファレンス作って共同作業者に渡した方が
よっぽど無駄が省けるんじゃないか?っと思い、>>910の結論に達した。
0913nobodyさん
2011/06/15(水) 03:10:08.70ID:???いつ移行するか悩む。
0914nobodyさん
2011/06/15(水) 06:07:44.18ID:???cake以下だけ上書きすればいいの?
0915nobodyさん
2011/06/15(水) 10:56:44.90ID:???0916nobodyさん
2011/06/15(水) 13:45:01.93ID:???>単体でモデルをfindで呼び出して配列を取得する事って出来ないかな?
これでできたけど。
$_GET['url'] = 'favicon.ico';
require_once('path_to_app_dir/webroot/index.php');
// and then for example:
$PostModel =& ClassRegistry::init('Post');
print_r( $PostModel->find('all') );
http://osdir.com/ml/CakePHP/2009-08/msg01425.html
0917nobodyさん
2011/06/15(水) 14:14:09.06ID:???なぜか
$_GET['url'] = 'favicon.ico';
を入れないとビューまで取得されたけど、
たぶん、$_GET['url']にデータ入れないといけないとか
そういう決まりあるのかな。
何にしろ、これが出来たらかなり可能性が広がる。
凄く助かった。情報ありがとう!
0918nobodyさん
2011/06/15(水) 19:42:44.38ID:???俺もこの記事読んだが
require_once('path_to_app_dir/webroot/index.php');
これをやっている時点で、パフォーマンス的には
あまりメリットが無いんじゃないか?
0919nobodyさん
2011/06/15(水) 20:13:40.33ID:???モデル操作以外はすっ飛ばしているなら
パフォーマンス的に早くなるのも理解できるが・・・
0921nobodyさん
2011/06/15(水) 21:27:51.08ID:???0924nobodyさん
2011/06/15(水) 23:54:25.65ID:???APIというかマニュアルに書いてあるけど。
まあMySQLのトランザクションに関しての知識はCakeとは別だけどね。
0926nobodyさん
2011/06/18(土) 13:26:22.69ID:MtjEaHV0core.phpのCacheの設定でMemcacheを使おうとするとエラーが出てしまいます。
エラーのメッセージからInflector::slugを使用しているのが問題みたいなんですが、
なにか回避する方法ありますでしょうか?
もしくは現在の安定版(1.3.9)を使うべきですかね?
0927nobodyさん
2011/06/18(土) 13:41:07.65ID:???0928nobodyさん
2011/06/18(土) 13:52:16.37ID:FmefRTLqクエリ文はモデルとかに書いた方がいいですか?
0929nobodyさん
2011/06/18(土) 15:06:36.54ID:???書きたいならモデルが良いと思うけど。
0930nobodyさん
2011/06/18(土) 15:46:04.92ID:FmefRTLqクエリって
$this->Model->find('first',array('conditions'=>array('id'=> 1));
ってやつですよ。
$query = "select * from user where id = 1";
mysql_query($query);
ってやつじゃないですよ
0931nobodyさん
2011/06/18(土) 15:49:28.80ID:???0932nobodyさん
2011/06/18(土) 17:34:35.31ID:???0933nobodyさん
2011/06/18(土) 17:40:52.31ID:???お前質問ずれてるよ。
てか、$this->Model->queryってのがあるの知らないのか?
俺はこのことを言ってるとばかり思ってたんだが。
どこでも書けるけど、modelに書くべきだと思う。
うちはcontrollerにSQL書き散らかしてしまって、本来のcontrollerから離れてしまった。
保守では困らないけど純粋なMVCモデルから離れてしまったと反省している。
0935nobodyさん
2011/06/18(土) 23:07:42.72ID:???viewに渡すデータが一行で取得できるならコントローラ。
アソシエーションの設定、findに渡すオプションで対応できないデータを作る必要があるなら、
そのデータを作成するファンクションをモデルに定義。
0936nobodyさん
2011/06/19(日) 01:36:40.13ID:FFWzWxUlCacheをMemcacheにしてるんだけど
SESSION周りがすげー怪しい動きしてるんだけど。
0937nobodyさん
2011/06/19(日) 02:02:18.81ID:???親IDを削除したら子IDも削除されるようにしたいのですが、
Cakeの機能だけで削除できるのでしょうか?
やはり、一旦threadedでデータを取得して
1つずつ再帰して削除するしかないのでしょうか?
0939nobodyさん
2011/06/19(日) 03:01:01.96ID:???treeビヘイビアを使えば、親のIDを指定してModel->delete()で子も消せるよ。
ダルマ落しみたいに中抜きしたい時は、 Model->removeFromTree()で。
0940nobodyさん
2011/06/19(日) 07:14:15.09ID:???Cakeの最新バージョンでは、以下の不具合って直ってますか?
Group Byしている時にpaginator->number()が表示されない件
http://d.hatena.ne.jp/aroundthedistance/20090728/1248784179
0941nobodyさん
2011/06/19(日) 12:53:39.87ID:???treeビヘイビアというのがあったんですね。
今まで自作してツリーをカスタマイズしてました・・。
大変参考になりました。ありがとうございました。
0942nobodyさん
2011/06/20(月) 15:10:17.74ID:???1~47まで都道府県のテーブル用意して、住所などが必要なテーブルでそのIDを設定するのが
本来の正しい設計かもしれないけど、
実際Cake(PHP)でやるとめんどくさいよね。毎回selectが増えるだけのような気がするし。
VARCHARで実装してしまうのはだめかな?
0943nobodyさん
2011/06/20(月) 18:53:56.79ID:???公式リリースはまだ先なのかね?
面倒だったら日本郵政グループのKEN_ALL.CSVでマスターテーブル1つ作っちゃえばいいのでは?
0945nobodyさん
2011/06/20(月) 23:28:05.47ID:???フォームの選択の時は、bootstrapに書いてるな。
Configureに入れて。DBでは管理しない。
>>944
郵便番号から住所検索するとき、それ使ってるけど
ちょっと思うのが気になるよね。10万件ほどあるから当然なんだけど。
0946nobodyさん
2011/06/20(月) 23:28:45.79ID:???CakeでAjaxから読み込むとき、ちょっと重いんだよな
出力されるまで時間がかかる。
0947nobodyさん
2011/06/21(火) 16:49:04.36ID:???0948nobodyさん
2011/06/21(火) 17:45:31.67ID:???0949nobodyさん
2011/06/21(火) 19:26:01.33ID:???0950nobodyさん
2011/06/21(火) 23:28:19.97ID:???フレームワークなのにそのフレームワークを使って
書いたコードはフレームワークに依存しない。
という優れもの。
0951nobodyさん
2011/06/21(火) 23:34:17.44ID:???0952nobodyさん
2011/06/22(水) 04:38:21.61ID:???0953nobodyさん
2011/06/22(水) 10:34:00.18ID:???0955nobodyさん
2011/06/24(金) 10:38:37.73ID:???error-messageは出力されなくなるのか?
actionA() {
if ($this->validates()) {
$this-Model->save();
} else {
$this->setAction('actionB');
return;
}
}
↑このような状況で、actionBに飛んでactionBのビューが表示されたときに、
フォームのinputの下にerror-messageがでない。
ちなみに、actionAとBは同じフォームを中で呼んでいて(element)、Aを表示させるとerror-messageはちゃんと出る。
0956nobodyさん
2011/06/25(土) 13:25:40.60ID:???ModelにhasManyを書いて、dependentをtrueにして削除するか、
削除時に各テーブルをforeachで回してdeleteするか。
自分はhasManyをModelに書かずに必要なときだけ
bindModelしています。
0957nobodyさん
2011/06/25(土) 14:03:37.25ID:???0958nobodyさん
2011/06/25(土) 15:25:53.73ID:???0959nobodyさん
2011/06/26(日) 22:52:58.28ID:???設定かでquery string形式の(?page=1みたいな)リンクに
変更できますか?
結局PaginationHelperのソース書き換えて対応したんですが
書き換えずに済む方法があれば方法を教えて欲しいです。
バージョンは1.3です。
0961nobodyさん
2011/06/28(火) 03:16:25.11ID:???symfony2に浮気しようかな。
他にPHP 5.3ベースのフレームワークってある?
0962nobodyさん
2011/06/28(火) 04:25:36.29ID:???0963nobodyさん
2011/06/28(火) 08:35:52.44ID:???0964nobodyさん
2011/06/28(火) 08:46:54.56ID:???0965nobodyさん
2011/06/28(火) 10:02:59.80ID:???0966nobodyさん
2011/06/28(火) 22:29:51.03ID:???0967nobodyさん
2011/06/29(水) 02:01:54.30ID:???俺俺フレームワークの方が開発速度が速い。
そしてphpだけしゃ武器にはならんから
object-cを習得中。
先を見越せばphpのフレームワークなんて、時代おくれ。
0968nobodyさん
2011/06/29(水) 03:29:14.31ID:???0969nobodyさん
2011/06/29(水) 08:59:10.65ID:???俺もCake風のオレオレフレームワークを作った
どうせMySQLしか考慮しないし、速度の遅さは致命的だからね。
キャッシュ作っても新たにデータを投稿する度に削除する必要があるし、
速いに越した事はないだろう。
0970nobodyさん
2011/06/29(水) 09:38:48.03ID:???0971nobodyさん
2011/06/29(水) 10:11:36.12ID:???0972nobodyさん
2011/06/29(水) 11:53:23.28ID:???会社ならやめてほしいな。
お前がずっと責任とれるはずもないんだから
0973nobodyさん
2011/06/29(水) 13:19:00.43ID:???Cakeのコーディングすら、個々のPGで癖があるのに
0974nobodyさん
2011/06/29(水) 14:04:09.00ID:???多分他人が作ったオレオレフレームワーク触ったことないんだろうな。
ものすごい苦痛だよ。
フレームワーク自体のバグは誰がなおす?
そのフレームワークの思想は大多数にウケるのか?
0975nobodyさん
2011/06/29(水) 14:09:42.82ID:???0977nobodyさん
2011/06/29(水) 14:44:32.33ID:???0978nobodyさん
2011/06/29(水) 15:48:10.37ID:???0979nobodyさん
2011/06/29(水) 16:21:09.22ID:???0980nobodyさん
2011/06/29(水) 16:30:41.22ID:???・Userモデル
id,categories_id,name
・Categoriesモデル
id,name
として、「そのカテゴリに何人のユーザが登録しているのか?」
をバーチャルフィールドとして取得したいと思います。
バーチャルフィールドで書ける場合、書き方を教えてください
0981nobodyさん
2011/06/29(水) 17:22:31.29ID:???UserがbelongsTo Categoryならば、
Categoryにuser_countフィールドを作れば自動でカウントしてくれるよ。
0982nobodyさん
2011/06/29(水) 17:37:38.74ID:???var $virtualFields = array('user_count'=>'COUNT(User.id)');
を、Categoryモデルに書いたらカウント数を取得できました。
ありがとうございます。
0983nobodyさん
2011/06/29(水) 20:13:54.90ID:???俺俺フレームワークの方が開発速度が速い。
そしてphpだけしゃ武器にはならんから
object-cを習得中。
先を見越せばphpのフレームワークなんて、時代おくれ。
0984nobodyさん
2011/06/30(木) 09:37:18.67ID:???0985nobodyさん
2011/06/30(木) 10:52:27.52ID:???0986nobodyさん
2011/06/30(木) 17:41:27.29ID:???コントローラで上記のように毎回h()でエスケープするのが面倒だし、
エスケープし忘れも発生してしまいそうだから、
自動でsetした値をエスケープしたいんだが、どうしたらいい?
0987nobodyさん
2011/06/30(木) 18:02:55.94ID:???0988nobodyさん
2011/06/30(木) 18:05:04.83ID:???0989nobodyさん
2011/06/30(木) 18:12:03.20ID:???されてるの?
俺はされてないぞ
>>988
例えば
ビューで
名前だすときは、
echo h($user['User']['name']);
住所出すときは
echo h($user['User']['address']);
ってやるってこと?
>>986の方法のほうが楽なような・・・
エスケープって自動でされた覚えが俺もあるんだけど、気のせいかしら
0990nobodyさん
2011/06/30(木) 18:22:21.93ID:/bA75Cwr普通のdaoと同じようなディレクトリ&クラス名で作ってしまょうか?
SeibetuModel
NendaiModel
みなさんどうされてますか?
0991nobodyさん
2011/06/30(木) 18:24:17.90ID:???0992nobodyさん
2011/06/30(木) 18:55:23.01ID:???ごめんわからんw
0994nobodyさん
2011/07/01(金) 10:32:02.04ID:???どう対応してますか?
ソース修正して、クラス名が出てくるところ全部書き換えるくらいしか思いつかないんですが・・・
Cakeはコアクラスにプリフィックス付いてないのがツライ・・・
0995nobodyさん
2011/07/01(金) 10:37:12.36ID:???2.0が出るまで待つしかないだろ
0996nobodyさん
2011/07/01(金) 13:47:40.87ID:???テーブル、モデルとも作らない。
bootstrap.phpに
$GLOBALS['masters']['sex'] = array(1 => '男', 2 => '女');
みたいに書いてる。
0997nobodyさん
2011/07/01(金) 14:09:55.01ID:???俺は、bootstrap.phpに
Configure::write('Masters.sex'array('1' => '男', '2'=> '女'));
って書いてるけど・・・
0998nobodyさん
2011/07/01(金) 15:10:52.19ID:???enum / set が使えれば良いのになって思う事はあるな。mysql限定になっちゃうけど。
0999nobodyさん
2011/07/01(金) 16:22:05.12ID:???1000nobodyさん
2011/07/01(金) 16:27:18.64ID:???10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。