【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
0511nobodyさん
2010/12/28(火) 01:58:16ID:???>>492 に、Lazy Loading 云々って書いてあるから、期待はしてる。
PHP5.2.6より上のバージョンに最適化するなら速度や何かはどうにかなってくれるといいな(願望)
0513nobodyさん
2010/12/28(火) 09:20:27ID:???現状、おでこは狭いです。
10年後にはおでこと頭頂部が連結される見込みですが…
>>512
Fatal error: Class 'Sanitize' not found in viewのテンプレート on line 65
みたいな感じです。
レンダリングの段階で出てます。
0514nobodyさん
2010/12/28(火) 12:31:58ID:???言われたことしかしないのか?
学校か?
死ねよ努力しろよ
0516nobodyさん
2010/12/28(火) 15:14:10ID:???0517nobodyさん
2010/12/29(水) 18:02:39ID:l8k3UmR3cakephp 1.3 で、AuthComponents, AclComponents を使っているのですが、ログイン後に、
$this->set('user',$this->Auth->user());で、ユーザー情報は取れるのですが、
$this->set('group',$this->Auth->user('group'));
とやってもグループの情報が取れません。
Userのモデルには、
var $belongsTo = array(
'Group' => array(
'className' => 'Group',
'foreignKey' => 'group_id',
)
);
と記述しているのですが。
どうやったら、Groupのモデルが引っ張ってこれるのでしょうか。
0518nobodyさん
2010/12/30(木) 12:51:41ID:???サブカテゴリの詳細を出したい時、URLってどうしてます?
カテゴリ:/category/details/1 (CategoryコントローラーのID1の詳細)
サブ:/category/sub/1 (カテゴリID1内にあるサブカテゴリ一覧)
サブ詳細:/category/sub_details/1/1 (上記のサブカテゴリID1の詳細)
categoryというのがコントローラーで2つめがアクションです。
「カテゴリ内のサブカテゴリの詳細」を出す時、上記のようなURLにしているのですが、
いまいちURLが分かりづらくも感じてるので、他の人はどうしてるのか質問しました。
0519nobodyさん
2010/12/30(木) 13:40:10ID:???wordpressみたいにプラグインいれてハイ終わりって感じにはならないですよね。
トップページはフラッシュはないけど、動的にフォームを
追加、削除するjavascriptとかも入ってるし。
0520nobodyさん
2010/12/30(木) 15:30:21ID:???Fatal error: Call to a member function deleteAll() on a non-object in /apppath/cake/libs/cake_session.php on line 790
てのが出まくってるんだけど、これは何でどうしろってことなの?
0521nobodyさん
2010/12/31(金) 01:11:49ID:???0522nobodyさん
2010/12/31(金) 13:20:30ID:???0524nobodyさん
2011/01/01(土) 14:23:41ID:???バグあるし重いし、別のフレームワーク使って作り直さなきゃどうにもならん
0525nobodyさん
2011/01/01(土) 16:13:29ID:???0526nobodyさん
2011/01/01(土) 16:59:33ID:???0527nobodyさん
2011/01/01(土) 18:01:25ID:???を改善してくれたら全く文句ない。
0528nobodyさん
2011/01/01(土) 18:20:39ID:???0529nobodyさん
2011/01/01(土) 20:07:37ID:???0530nobodyさん
2011/01/01(土) 23:35:34ID:???0531nobodyさん
2011/01/02(日) 00:46:25ID:???使ったことあるって人は多いだろうけど使い続けてる人が少ないような
0532nobodyさん
2011/01/02(日) 15:48:13ID:???0533nobodyさん
2011/01/02(日) 16:07:37ID:???>/apppath/cake/libs/cake_session.php on line 790
を見れば?
インスタンスされてない変数のメソッド呼び出し
0535nobodyさん
2011/01/02(日) 17:10:40ID:???Cakeのバグってことだよね?
0536nobodyさん
2011/01/04(火) 10:40:40ID:???よく分からんけど、なんかそこで使われてる必要なモデルが無いんじゃないか?
>>519
プラグインってより、layoutの切り替えじゃないか?
スマートフォンも普通にhtmlを解釈するわけだし、
viewやelementを上手く作ってればlayoutの切り替えで何とかなるかもね。
>>518
URLが気に入らなかったらControllerで変な小細工するよりも、
Routesで対処する方がいいんじゃないか?
>>517
AuthComponent::user()の引数はフィールドの指定じゃないか?
ソースコード見てみたけど、アソシエーションを解釈してくれそうには見えない。
User belongsTo Group なら、$this->Auth->user('group_id')は出来そうだけど。
0537nobodyさん
2011/01/04(火) 11:21:02ID:???無いんじゃないか?って俺に言われても。
Cakeのセッション機能使っただけなんだが。Cakeが直せよ。
セッションまわりは他にも不具合があってかなり怪しい。APC入れたら動かなかったりとか。
0538nobodyさん
2011/01/04(火) 11:27:39ID:???セッション管理とキャッシュが食い合わせ悪いのはCakeに限らないだろ
0539nobodyさん
2011/01/04(火) 11:39:09ID:???それこそ俺にそう言われても。
1.3.2なんて古いの使って無いから790行目がどういうコードかわからんし、
どこでどんな原因があるのか分からんよ。
ただ、Coreのコード中でも、そこでModelのメソッドを呼んでるぽいから、
そのModel作り忘れとかもありえるんじゃないかと思っただけだ。
0540nobodyさん
2011/01/04(火) 14:29:06ID:???cookbookを見ながらログインを作ったのですが、
なぜか、
ログイン時間が切れる→ログインフォームに戻る→再ログイン→エラー
になります。
エラー後に同じIDとパスワードでログインすると、ログインできるので
セッションエラーか何かだと思いますが、原因が掴めません。
0541nobodyさん
2011/01/04(火) 20:12:48ID:???あれではだめですかね
0542nobodyさん
2011/01/05(水) 03:42:32ID:???0544nobodyさん
2011/01/06(木) 04:44:02ID:???一旦フッターのリンクから英語に移動して、見たいページ開いてから、
URLに自分で/jaを継ぎ足す事で見れる・・・
0545nobodyさん
2011/01/06(木) 05:04:44ID:???ところで、cookbookはcakephp製みたいですけど、ソース公開されてるんですか?見てみたい
0546nobodyさん
2011/01/06(木) 06:47:11ID:???たぶんこれだと思うけど。
0547nobodyさん
2011/01/06(木) 10:27:47ID:???おお、ありがとうございます。
ローカルで動かしてみようといろいろやってますが、けっこう大変そう
入れろといわれたヘルパーは一通り用意しましたが、Zendのモジュールがどうとか
のエラーで心折れました
0549nobodyさん
2011/01/06(木) 14:42:37ID:???0550nobodyさん
2011/01/06(木) 15:06:26ID:???0551nobodyさん
2011/01/06(木) 17:17:19ID:???そういう細かいはまり所がちらばってそうな気がしてなぁ。
海外じゃMySQLが主流だから、目玉の数も十分じゃないだろうし、
野良プラグイン使う事を考えるとなぁ。
Postgresのほうが好きなんだけど。
0552nobodyさん
2011/01/07(金) 22:34:13ID:???MySQLのライセンスの問題?
0553nobodyさん
2011/01/08(土) 01:34:02ID:???PHPが流行し始めてMySQLと組み合わせて解説本書かれるようになって10年くらいか?
今じゃすっかりPHP+MySQLが主流みたいになってるな
0554nobodyさん
2011/01/09(日) 11:14:02ID:???たとえば「都道府県」→「市区町村」をフォーム上で両方ドロップダウンにして
都道府県で選択した値で市区町村を動的に変えようと思ったとき、
CakePHPならどういう方法をとるのが適切でしょうか?
ざっくりした処理の流れ程度でいいので、みなさんのやりかたをご教授
いただければありがたいです。
0555nobodyさん
2011/01/09(日) 12:23:33ID:???単にXHRで呼ばれるアクションを別に1個用意しましょう、ってんじゃ足りない?
それともJavaScriptが分かってない?
0556nobodyさん
2011/01/09(日) 12:56:06ID:???http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=443&forum=12
0557nobodyさん
2011/01/09(日) 20:56:38ID:???バリデーションの定数(やエラーメッセージ)をどこかにまとめたい場合はどこにまとめるのが作法ですか?
http://book.cakephp.org/ja/view/150/
この「独自のバリデーションルール」だとマジックナンバーになってるけど、
実際の開発ではどういう方法があるかを知りたくて。
app/config/bootstrap.phpにまとめるものですか?
0558nobodyさん
2011/01/10(月) 00:55:02ID:???自分はvalidation.phpとか作ってConfigure::load()してる。
bootstrapにゴリゴリ設定詰めてもそりゃ動くけどね。
0559557
2011/01/10(月) 02:26:32ID:???app/config/validation.phpにずらずら定数を書いておいて
app/models/<使いたいmodel>.phpの先頭でConfigure::load('validation');
という意味であってます?
bootstrapだとvalidation.phpが必要ないmodelでも読み込んじゃうから良くないという感じでしょうか?
0560nobodyさん
2011/01/10(月) 04:57:04ID:???0561nobodyさん
2011/01/10(月) 12:16:49ID:???bootstrapで常時読み込むよ。モデルごとに分けたりなんかしない。
配列の階層構造とかデフォルトのメッセージとかは面倒なのでビヘイビアで処理させてる。
0562nobodyさん
2011/01/10(月) 12:31:41ID:???全体の動作が重くならない?
0564nobodyさん
2011/01/10(月) 14:10:59ID:???0565563
2011/01/10(月) 15:22:42ID:???がなー
これが重いと言われるとどうしようもない
0566nobodyさん
2011/01/10(月) 17:30:16ID:???無駄に発行するSQLの処理コストで吹き飛ぶ
誤差程度だと思うよ。0.4msなんて
bootstrapにある設定のコスト気にするより、
recursiveや取得するフィールドをきっちり調整した方がいいと思う。
0567nobodyさん
2011/01/10(月) 17:45:15ID:???Session.startは true
Security.levelは medium
のときに、
ログインページがSSLなんだけど、
非SSLページを遷移してる時は当然セッションIDのCookieは「あらゆる接続・・」で維持され読み取れるんだけど、
SSLのログインページを開いた時点で「セキュリティーで保護された接続・・」に限定されてしまい、
非SSLに移るとセッションは消えるという現象が起きまして。。
Security.levelが medium以下であればSSL・非SSLでのセッションは維持されるとあるのにおかしいなとソースを読みまくり、
一日かけてやっとたどり着いた原因が
SSLページでrequestActionしていると、セキュアのみのセッション(セッションID保存Cookie)に変更されてしまうというものでして、
で、回避するには、
Coreをいじるか、requestActionを使わないしかないように思うんですが、
同じような問題にぶち当たって解決された人いませんか?
0568557
2011/01/10(月) 20:13:38ID:???>>560
モデルってわけでもないからapp_model.phpじゃないのかな?という疑問もあり質問して聞いてみたくて。
作法みたいなのがあればそれに倣おうと。
>>561
常時読み込んでも対して違わないんですね。参考になります。
app_model.phpかbootstrap.phpで常時読み込んでみてパフォーマンスが気になるレベルになったら次を考えてみます。
みなさんありがとうございます。
0569nobodyさん
2011/01/10(月) 20:16:23ID:???実際これってかなり大事だけど忘れがちだよね。
めんどくさいってのもあるもんな。
0570nobodyさん
2011/01/10(月) 20:38:05ID:???0571nobodyさん
2011/01/10(月) 20:39:10ID:???0572nobodyさん
2011/01/10(月) 21:33:48ID:???どこかでparams['requested']を調べてSessionを開始しないようにすればいいと思いつつも
beforeFilterでは時既に遅し、__constructではparams[request]は取得できないとなやんだんですが、
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1847&forum=8
こんなページを見つけて、ConstructClassesってメソッドを初めて知った。
ここに↓でどうやら意図したとおりに動いてる模様。
public function constructClasses(){
if(!empty($this->params['requested'])){
//Sessionを使わない
Configure::write('Session.start', false);
}
parent::constructClasses();
}
汚しましたーさーせん。
0573nobodyさん
2011/01/12(水) 12:17:20ID:???会員数が数万単位でも違和感なく使える。
だから、Cakeが重いと感じるのは
ソースの書き方やキャッシュの使い方が悪いのかな・・。
0574nobodyさん
2011/01/12(水) 16:36:48ID:???cookbookには$this->ModelNameと書いてありますが実際にやってみるとそれでは取れず。
http://book.cakephp.org/ja/view/53
で、thisを覗いた所、
$this->modelNames[0]
$this->modelClass
の2つがあったのでどっちがいいのかなと思って気になりました。
0575nobodyさん
2011/01/12(水) 16:38:52ID:???0576nobodyさん
2011/01/12(水) 18:08:05ID:???そんな簡単にいくことってほとんどなくね?
0577nobodyさん
2011/01/12(水) 18:29:16ID:???複数モデル使うときは明示すればいいだけだし
0578nobodyさん
2011/01/12(水) 22:06:01ID:???配列で複数指定できるんだし、全く問題ないぞ。
0580nobodyさん
2011/01/13(木) 00:09:54ID:???DB:Firebird 2.5
にて、下記を参考にBLOB型のカラムに画像を登録しようとしています。
http://c-brains.jp/blog/wsg/10/06/05-074544.php
viewとcontrollerのソースはこのサイトのままにmodelを自分で追加。
テーブルはcontentsカラムの型をBLOBに変更しています。
(Firebirdにmediumblob型が無いため)
この状態でファイルのアップロードをするとimages_controller.phpの33行目
$this->Image->save($image);
の実行時に下記エラーがでてしまいます。
Dynamic SQL Error SQL error code = -104 Unexpected end of command
SQL:INSERT INTO "image" ("filename","contents") VALUES ("filename.jpg","?????????")
※?????????は画像ファイルのバイナリの文字列(と思われる)が入っています。
contentsの登録部分(30行目)を削除すると成功するため、BLOB型の部分が
うまくいっていないのは確かだと思うのですが、どなたか解決策をご存知の方はいませんでしょうか。
0581nobodyさん
2011/01/13(木) 01:29:47ID:???回答者がそれを設置してみないと答えられないんじゃないか?
そしてあんた、自分の中で答え出てるじゃん。BLOB型の部分がおかしいって。
それなら、元のソースに問題があるんだろ。作者に聞けよ。
0582nobodyさん
2011/01/13(木) 12:11:03ID:???よくわからんがMySQL以外のRDBMSをCakeのDataSourceとして使うには覚悟が必要だな
あとFirebirdは知らんけど画像はDBに格納するよりファイルとして保存するのが一番だな
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:???■ このスレッドは過去ログ倉庫に格納されています