【PHP】フレームワーク CakePHP 11ホール目【v1.3】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/02/16(水) 21:52:35ID:zCTGjUMqCakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう
※sage推奨
※質問時もsageること
※他フレームワークとの比較等はスレ違いです
テンプレは>>1-5くらい
■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
the Bakery
http://bakery.cakephp.org/
CakeQs
http://cakeqs.org/
CheatSheet (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf
github - cakephp
http://github.com/cakephp
■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
http://book.cakephp.org/ja
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なのに
たまわらんわ
■ このスレッドは過去ログ倉庫に格納されています