【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
0583nobodyさん
2011/01/14(金) 14:38:02ID:???触らせるのって無茶だと思うけど、どう思う?
0585nobodyさん
2011/01/14(金) 14:45:30ID:???いやそうじゃなくて、テンプレ内に専用コードが入って複雑にならない?
MVCの考え方から、Viewで処理する物はテンプレート内に書くけど
CakeのコードやらPHPのコードやら入るこむから
テンプレが複雑になって、Cakeに詳しくない人間は編集できないと思う。
0586nobodyさん
2011/01/14(金) 14:45:56ID:???普通何らかのテンプレート使うだろ
0587nobodyさん
2011/01/14(金) 14:47:37ID:???あんたの言う「普通」ってはじめて聞いたな。
みんなctpに処理を書いていると思ってたよ。
0588nobodyさん
2011/01/14(金) 14:51:43ID:???Smarty使ってたら逆に複雑になると思うんだけど。
0589nobodyさん
2011/01/14(金) 14:53:46ID:???0590nobodyさん
2011/01/14(金) 15:00:10ID:???これって設計がおかしいのだろうか
しかしテーブル最適化するとそのくらいに増えてしまうのだよな…とにかくデータが多すぎて
1つのテーブルにまとめるとカラム数が凄いことになるし
0591nobodyさん
2011/01/14(金) 15:00:20ID:???ビューを触るケースというのが想像できない
0592nobodyさん
2011/01/14(金) 15:06:09ID:???知り合いがデザイナーにctpいじらせて不具合起こされまくってた
0594nobodyさん
2011/01/14(金) 15:08:37ID:???html編集まで必要だと厳しくないか?
0595nobodyさん
2011/01/14(金) 15:29:30ID:???デザイナーはいっぱいいるとは思うけど、
でもcakeのviewファイル自体はプログラマーがいじるもんだと思ってる。
0596588
2011/01/14(金) 15:30:13ID:???だからctpで十分じゃないかなって意味だった。
ウチで開発した時はコーダの作ったHTMLをテンプレートに当てはめる係がいたな。
その人はctpもHTMLやCSSやJavaScriptのコーディングもどっちも面倒見れる人
0597nobodyさん
2011/01/14(金) 16:33:54ID:???ああ、あんたは>>586じゃないんだな。それなら俺も同じ意見だな。
>>594
html編集が必要な場面って結構あるからな。
ページ内に説明文追加する時とか。追加じゃなくても変更とか。
その時、どうやったってctpを変更しなくちゃいけないけど、
CakeやPHPの知識がない人間が触るのは厳しい。
「あれ?そうすると、デザインとプログラムの分業って出来ないんじゃねぇ?」
って思ったんだよ。
0598nobodyさん
2011/01/14(金) 16:52:49ID:???0599nobodyさん
2011/01/14(金) 17:14:20ID:???いざデザインを適用してみて動かしてみると色々変えたくなる
1枚ペラで見てたのとページ遷移した流れで見たデザインのイメージって結構違うものだなって感じる
0600nobodyさん
2011/01/14(金) 17:26:57ID:???DBからデータ取得→foreachで該当するデータを処理→ビューに出力
ってやってた。そうすれば極力、ビューにPHPのコードを書かなくて済むし。
でも二度手間だし、コントローラーでビューの内容を変更するのも違和感があって止めた。
0601nobodyさん
2011/01/14(金) 17:49:38ID:???フレームワーク使ってるとそれと同じような事やってるじゃん
モデル、コントローラでぐるぐるデータ回して、
最後にビューでも回してるよ
0602nobodyさん
2011/01/14(金) 18:02:52ID:???説明不足ですまん。
$list = $this->Member->find('all');
$output_list = array();
foreach ($list as $i => $col) {
$output_list[$i] = $col;
$output_list[$i]['Member']['body'] = nl2br($col['Member']['body']);
if ($col['Member']['image'] != "") {
$output_list[$i]['Member']['image_url'] = Router::url('/img/') . $col['Member']['image'];
}
}
みたいなことをコントローラーでやって、
ビューでは最小限のコードでforeachして出力するってこと。
0603nobodyさん
2011/01/14(金) 19:00:07ID:???README見てもさっぱり使い方がわからない。
いい参考ページあったらおしえてください。。。
0604nobodyさん
2011/01/14(金) 19:08:10ID:???それちょっといじりたいときにコントローラ弄らなくちゃダメじゃない?って思ったら>>600に書いてあったw
フレームワーク使ってる場合はどっちみちビューでforeachするから$listの時点で十分扱いやすい形になってるなと思う
0605nobodyさん
2011/01/14(金) 20:10:12ID:???そもそもの話のネタが「デザイナーにテンプレいじらせるのって無理じゃない?」
って事だからね。ビューに手を加えるよりも、コントローラーに手を加える方が
プログラマーとしてはやりやすいし、デザイン変更も対応しやすいから。
ま、MVCに反するから今は>>602みたいに書いてないけどね。
0606nobodyさん
2011/01/17(月) 11:39:15ID:???空白入れて送信される場合があるんだけど、save前に
$this->data['Inquiry']['email'] = trim($this->data['Inquiry']['email']);
ってする以外にお手軽な方法無いですかね?
0607nobodyさん
2011/01/17(月) 11:50:52ID:???function() { $('#email').val($.trim($('#email').val()); }
);
検証してないから動かなかったらごめんね
0608nobodyさん
2011/01/17(月) 13:57:08ID:???Cakeのモデル処理で出来るかな?と思ったのですが、
>>606みたいなやり方以外無さそうですね。
0609nobodyさん
2011/01/17(月) 15:06:42ID:???なんでバリデーションしないの?
アホなの?死ねよ屑が
0610nobodyさん
2011/01/17(月) 15:24:13ID:???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を使うようですね。こちらを使用します。
■ このスレッドは過去ログ倉庫に格納されています