【PHP】フレームワーク CakePHP 10ホール目【v1.3】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2010/11/01(月) 21:43:26ID:???CakePHPから派生した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
0612nobodyさん
2011/01/18(火) 01:57:53ID:???beforeValidate?
普通にバリデーションルール書けばいいだけだろうが
アホしかいないのかよここは。
0614nobodyさん
2011/01/18(火) 07:47:03ID:???0615nobodyさん
2011/01/18(火) 08:17:12ID:???validationで弾いてどうすんだよ
0616nobodyさん
2011/01/18(火) 10:30:08ID:???trim()使ってるところを見ると、半角スペースだけのデータになるのが嫌なのか、
それともメールアドレスのカラムに半角スペースだけで問い合わせされるのがダメなのか、
どっちなんだ。
まぁ、コントローラーのbeforeFilter()でtrim()して、
モデルのバリデートでrule => email, allowEmpty => false を使うのが良いと思うが。
beforeFilter() ではちゃんとアクション名の確認や、$this->data['Inquiry']['email']の有無は調べてからな。
0617nobodyさん
2011/01/18(火) 13:36:46ID:???rule=>emailの時点で半角スペースだけの入力は弾かれるだろ
アホはシネ
答えるな
0618nobodyさん
2011/01/18(火) 14:02:09ID:???素人がスペース認識できずに「なんでエラーになるの!」って
クレーム言ってくる場合があるんだよ。もう少し頭使えよ。
0619nobodyさん
2011/01/18(火) 14:13:29ID:???emailアドレスに半角スペース入れる
rule=>emailのエラー文として「正しいEmailアドレスを入力してください」
なにが問題あるんだ?素人もクソも関係あるかよ
0620nobodyさん
2011/01/18(火) 14:16:26ID:???Email欄に空白だけで登録してくるんだと思ってたわ
だったらbeforeValidateでtrimでいいや
そんなケース聞いたことないわ
それかもう一個ルール追加してemailルール検査前に空白が入ってないか調べてそれ用のエラー文はく
0621nobodyさん
2011/01/18(火) 15:06:02ID:???0622nobodyさん
2011/01/18(火) 15:07:53ID:???まぁ全角スペースもあるからほんとはもう一工夫必要だけど。
0623nobodyさん
2011/01/18(火) 15:57:16ID:???controllerで$this->dataをいじるとユーザーの入力値をいじることになるから
なるべくmodelで対応したほうがトラブりにくい
このケースはどっちでも良いけど
でもなるべくmodelでやるべきことはmodelほうがベターかと
0624nobodyさん
2011/01/18(火) 18:41:15ID:???俺はコントローラーの仕事だと思うけどなぁ。
もしかしたらコントローラーじゃないかもしれないけど、
モデルだと遅いと思うんだが。
コントローラー内でNULLバイト攻撃されないように、
なるべく早い段階で、入力値からNULLなどを削るようにしてるんだ。
trimは実はbeforeValidateと迷ったけど、
まぁ似たような処理なのでついでにやってる感じ。
コントローラーで入力値をいじるとトラブルになるかな?
0625nobodyさん
2011/01/18(火) 20:23:47ID:???ページネーション出来る表示の仕方ってあると思います。
自分はコントローラーのアクション毎に分けて
function top_news() // トップページに表示させるお知らせ。find()で取得
function news_list() // 「お知らせ一覧」ページで表示。paginate()で取得
としているのですが、みなさんはどうしてますか?
findでデータを取得するだけだから、1つの関数内にまとめて、
件数で分岐したりしているのでしょうか?
0626nobodyさん
2011/01/18(火) 20:37:24ID:???一覧は普通にnews/indexで。
0627nobodyさん
2011/01/18(火) 20:58:26ID:???自分もトップページでrequestActionして取得しているのですが、
その時、取得するアクションって>>625に書いたように分けていますよね?
つまり、
■トップページの「お知らせ」箇所のビュー
$list = $this->requestAction('/top/news');
■トップページ一覧
コントローラーのfunction indexでpaginateしてデータを取得して、ビューに出力。
0628nobodyさん
2011/01/18(火) 20:59:47ID:???■トップページの「お知らせ」箇所のビュー
$list = $this->requestAction('/top/news');
■お知らせ一覧
Newsコントローラーのfunction indexでpaginateでデータを取得して、ビューに出力。
0629nobodyさん
2011/01/18(火) 21:21:44ID:???paginateで取得させれば
requestActionのURLにlimit:10とかつければその数取得できるじゃん
0630nobodyさん
2011/01/18(火) 21:24:20ID:???function indexはほぼbakeしたままを
requestAction用には別のメソッドつくってそこでpaginateしてる
てか、本当はindex()アクションで
if ($this->params['requested']) {
return $this->paginate();
}
ってやるのがベストかな
0631nobodyさん
2011/01/18(火) 21:26:37ID:???トップページの一覧では
$list = $this->requestAction('/news/index/limit:3');
みたいにするんですね。fieldの指定を変えたい場合は、ifで分岐させると。
自分はトップページならTopコントローラーですべてをまとめていたのですが、
やり方が間違っていたようです。参考になりました。ありがとうございます。
0632nobodyさん
2011/01/18(火) 21:29:49ID:???あと>>630はたぶんエラーでるな
if ($this->params['requested']) {
↓
if (!empty($this->params['requested'])) {
こうじゃないとrequestActionじゃないときにエラー吐くと思うわ
0633nobodyさん
2011/01/20(木) 02:41:53ID:???findの場合、こんな感じで行けるのですが・・・
$User = ClassRegistry::init('User');
$data = $User->find('all');
0634nobodyさん
2011/01/20(木) 03:38:21ID:???0635nobodyさん
2011/01/20(木) 04:24:58ID:???今みんな1.3使ってるのではないの?
0636nobodyさん
2011/01/20(木) 13:21:05ID:???0637nobodyさん
2011/01/20(木) 14:06:58ID:???の場合のキャッシュってどういう考え方したらいいの?
動的サイトだから定期的に表示される内容が変わるよね?
だからビューキャッシュしても意味ない気がするんだが。
「○○一覧」とか出来るだけ動的ではない箇所をelementキャッシュするとか?
自分の認識が間違っていると思うので、どなたか駄目出ししてください。
0638nobodyさん
2011/01/20(木) 16:24:13ID:???0639nobodyさん
2011/01/20(木) 17:35:30ID:???0640nobodyさん
2011/01/20(木) 17:41:50ID:???0641nobodyさん
2011/01/20(木) 18:17:57ID:???ポータルサイトの場合、ログインして表示・非表示と切り替えることは多いし。
と言うわけでモデルキャッシュのやり方を調べます。
0642nobodyさん
2011/01/20(木) 20:16:03ID:???てかモデルのキャッシュならmysqlのqueryCache有効にしたらほとんど恩恵なくない?
0643nobodyさん
2011/01/21(金) 10:51:57ID:???0644nobodyさん
2011/01/21(金) 11:08:22ID:0or6NBGg$this->paginate['User']
0645nobodyさん
2011/01/21(金) 11:30:38ID:???普通
0646nobodyさん
2011/01/21(金) 13:49:06ID:???モデルのキャッシュとかqueryCacheじゃ不十分。
エレメントをキャッシュせんことには始まらん
0648nobodyさん
2011/01/21(金) 16:05:11ID:???管理画面で更新したら、公開用のキャッシュを削除したり出来る?
やっぱ、普通にulink(キャッシュまでのパス) 書くしかないの?
0650nobodyさん
2011/01/21(金) 22:37:20ID:???cacheClear関数だっけ?で消せるんじゃないの?
つーかやってみろよ
0651nobodyさん
2011/01/21(金) 23:55:41ID:???clearCacheですね。
あと、app分けるとtmpの場所も別ですね。
キャッシュされるファイルも別だから、別の方が良いし。
自分がググった範囲では結局、ulinkでファイル指定して削除する方法を
取っている人が多い印象を受けました。clearCacheは万能でないみたいだし。
0652nobodyさん
2011/01/22(土) 00:02:13ID:???0653nobodyさん
2011/01/22(土) 00:03:28ID:???0654nobodyさん
2011/01/22(土) 00:11:09ID:???0655nobodyさん
2011/01/22(土) 00:25:46ID:???キャッシュディレクトリもわかれてるww
くそ
あほ
0656nobodyさん
2011/01/22(土) 01:00:32ID:???どうでもいいけど
0657nobodyさん
2011/01/22(土) 01:16:48ID:???え?ネタだよね?
0658nobodyさん
2011/01/22(土) 01:21:34ID:???普通にやったら定数共通じゃないってことだろうがw
あほかお前
しねよくず
0659nobodyさん
2011/01/22(土) 01:33:26ID:???0660nobodyさん
2011/01/22(土) 01:43:27ID:???0661nobodyさん
2011/01/22(土) 01:45:37ID:???こいつ、このスレずっと常駐してるよね。前から。
リアルで惨めだからここで吠えるしかないんだろうね。可哀想。
0662nobodyさん
2011/01/22(土) 01:48:31ID:???その整理に問題があるってこと?
0663nobodyさん
2011/01/22(土) 14:04:08ID:???$Form->scure() とか、使ってる?
なんというか、「帯に短したすきに長し」なんだよな
まあ、何の目的を達成するかによるんだろうけど、
・CSRF攻撃対策
・(Cake特有だが)$data['Post']['hoge']フィールドのデータぶち込み攻撃に対する対策
(いちいちwhitelist記述すれば防げるが)
・簡単にワンタイムトークンを発行したい
・機械的なスパムに対するシンプルな防御(完全ではないが)
みたいな話が入り交じってるからややこしいが
みんなそこらへんどうしてる?自前実装?
0664nobodyさん
2011/01/22(土) 14:28:24ID:???業務用には使えないと思うが
よって普通自前でしょ、少なくとも改造
0665nobodyさん
2011/01/22(土) 16:21:41ID:???レスどうもです。
まあ、その辺はみんな自前か。
しかし、
> 基本的にCakeで用意されている機能なんて
> 業務用には使えない
コレ言っちゃうとCake使う意味がかなり希薄になるなw
0666nobodyさん
2011/01/22(土) 16:46:18ID:???業務用に耐えうるものかとかいう議論はそもそもPHPがということになってくるから
ナンセンスじゃないかなー
0667nobodyさん
2011/01/23(日) 00:35:40ID:???0668nobodyさん
2011/01/23(日) 17:28:31ID:???Cakeの機能で便利なのはAuthとFormヘルパーぐらい。
メール送信とかファイルアップロードとか自作してる。
0669nobodyさん
2011/01/23(日) 19:08:19ID:???全てのバリデーションに書くものなの?
http://book.cakephp.org/ja/view/129/required
を見ると、フィールドが1つの例だからrequiredを一つ書けば良いけど、
複数のルールを書く場合の例の
http://book.cakephp.org/ja/view/133/
を見るとそれぞれに
// like on, required, 等、他のキーをここに書く...
と書いてあってrequiredの意味がよくわからなくなった。
0670669
2011/01/23(日) 19:24:17ID:???全部のルールにrequiredを書かなければいけないケースがわからない
0671nobodyさん
2011/01/23(日) 20:57:47ID:???0672nobodyさん
2011/01/23(日) 22:32:32ID:???1.3.2
http://book.cakephp.org/view/999/Using-other-Components-in-your-Component
コンポーネントAから別のコンポーネントBを使っていたのだが動作がおかしいので調べてみたら
Bのstartupが実行されてなかった
Aのstartup内で$this->B->startup($controller);としたら期待通り動いた
こういうもんなの?
なんでこうなの?
なんでマニュアルにこういうこと書いてないの?
なんで誰も文句言わないの?
0673nobodyさん
2011/01/23(日) 23:48:08ID:???どうなるんだろうと思ってしまった。
0674nobodyさん
2011/01/24(月) 01:56:53ID:???ログイン後に、$this->Auth->user()でログイン情報を取得しようとしたのですが、
Profileの内容が返り値に含まれていません。
アソシエーションをしている情報は取得できないのでしょうか?
0675nobodyさん
2011/01/24(月) 15:47:44ID:???0676nobodyさん
2011/01/24(月) 22:02:29ID:???日本語の方は更新されてないけど
0678nobodyさん
2011/01/25(火) 14:23:31ID:???0679nobodyさん
2011/01/25(火) 15:27:57ID:???<meta http-equiv="REFRESH" content="5;url=http://google.co.jp/">
を置き換えたいのですが、どういう書き方をすればいいのでしょうか?
0680nobodyさん
2011/01/25(火) 16:49:55ID:???質問の答えになっていないけど、直接タグ打ちじゃいけないの?
URLの部分だけを動的にしたい場合は $html->url() を使えばいいわけだし
0681nobodyさん
2011/01/25(火) 16:59:59ID:???とかでいいんじゃないの?
0682nobodyさん
2011/01/25(火) 19:32:08ID:???ビューからレイアウトに挿入したいと思いまして、
$html->meta使うのかと思っていました。
調べたところ、$html->addScriptを使うようですね。こちらを使用します。
0683nobodyさん
2011/01/26(水) 15:13:15ID:???if (empty($data)) {
Configure::write('debug', 0);
$this->autoLayout = false;
$this->layout = "";
$this->cakeError('error404');
}
と言うコードを書いて、Userモデルに$idの値が無いと、
404のエラーページを出したいと思っています。
上記のコードをapp_controllerのbeforeFilterに書いてるのですが、
404にはなるものの、レイアウトが維持されています。
単なるブラウザが吐き出す404の表示にするにはどうすればいいのでしょうか?
0684nobodyさん
2011/01/26(水) 16:19:14ID:???0685nobodyさん
2011/01/26(水) 18:10:59ID:???$this->redirect($this->cakeError('error404'));
$this->_stop();
こうでしょうか?特に>>683の状態と変化ありません。
0686nobodyさん
2011/01/26(水) 18:42:15ID:???0687nobodyさん
2011/01/26(水) 18:46:08ID:???単なるブラウザがはき出す404というのが、よくわからん。
404 Not Found でも、サーバーから 404 Not Found のページをはき出すと思うが
0688nobodyさん
2011/01/26(水) 23:08:01ID:???しばらくは、これで食っていけますか?
0689nobodyさん
2011/01/27(木) 01:08:25ID:???0690nobodyさん
2011/01/27(木) 13:53:36ID:???0691nobodyさん
2011/01/27(木) 14:03:44ID:???0692nobodyさん
2011/01/27(木) 18:20:00ID:???以外と使いこなしている人少ないから、
勉強して覚えれば講師業が出来るかも??
0693nobodyさん
2011/01/27(木) 21:42:07ID:???CakePHPで儲かるシステム作れますか?
0694nobodyさん
2011/01/27(木) 21:48:50ID:???作れます
0695nobodyさん
2011/01/27(木) 22:29:11ID:???有名な大手サービスってどこ?
0696nobodyさん
2011/01/27(木) 23:01:46ID:???これはCakePHPの使えなさを表していると見てOK?
0697nobodyさん
2011/01/27(木) 23:07:24ID:???0699nobodyさん
2011/01/28(金) 00:44:07ID:???0700nobodyさん
2011/01/28(金) 00:56:22ID:???運営の意味も分からないの?氏ねばいいのに
0701nobodyさん
2011/01/28(金) 01:49:29ID:???他には何かあるのかな?
そもそもCakePHPって世界で盛り上げて行こう!って動きなのかな?
セキュリティー関連とかの対策プラグインとかも次々更新されてたり、新しいプラグインも作られてるのかな?
世界で有名なサイトとか、これで構築されてたら感動する。
0702nobodyさん
2011/01/28(金) 01:52:03ID:???0703nobodyさん
2011/01/28(金) 02:01:22ID:???0704nobodyさん
2011/01/28(金) 02:50:50ID:???動的な部分は素のPHPや別のシステムを使ってるっぽかった。
キャッシュもmemcacheを使ったり。
ま、それが普通だよな。Cakeだけでこなすにも重いもんな。
0705nobodyさん
2011/01/28(金) 03:17:15ID:???0706nobodyさん
2011/01/28(金) 12:33:42ID:???モデル内で
function getTime(){
return $this->data['Shop']['open_time']['hour'].':'.$this->data['Shop']['open_time']['min'].':00';
}
としたら、配列hour内に格納されている値は10なのに
1に変更されてしまうのは仕様?
0709nobodyさん
2011/01/28(金) 15:22:25ID:???表示されてなきゃわからないよね?
0710nobodyさん
2011/01/28(金) 16:21:34ID:???(サイト内での表示や言及を含めて)
まあ食わされるCookieのキーがデフォルト"CakePHP"だったりとか
Routingがあきらかに(Railsではなく)Cake風それだったりとか
DOMの構造があからさまにBakeした「それ」だったりとか
そういうことはあるかもしれんが、ちゃんと作ってあるものからは分からない
■ このスレッドは過去ログ倉庫に格納されています