【PHP】フレームワーク CakePHP 12ホール目【笑】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/07/01(金) 16:33:46.28ID:???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
前スレ
【PHP】フレームワーク CakePHP 11ホール目【v1.3】
http://hibari.2ch.net/test/read.cgi/php/1297860755/
0011nobodyさん
2011/07/03(日) 03:59:17.90ID:???なるほど
>>10
おお、テーマ便利だわ
テーマ使ったら >>5 の方法みたいに
/m/ でアクセスする必要無くなったな
みなさんありがとう!
0013nobodyさん
2011/07/03(日) 11:43:28.90ID:???- app_controller.php
function beforeFilter() {
$agent = Net_UserAgent_Mobile::factory();
// 携帯
if (!$agent->isNonMobile()) {
if ($agent->isDoCoMo()) {
ini_set('session.use_cookies', FALSE);
ini_set('session.use_only_cookies', FALSE);
ini_set('session.use_trans_sid', TRUE);
session_start();
}
$this->isMobile = true;
$this->layout = 'mobile';
$this->theme = 'mobile';
// PC
} else {
:
:
}
}
routes.php の携帯関係(/m/)のマッピングと、
afterFilter() の redirect の記述は全て消した
携帯でアクセスすると、テーマがmobileになるので、
mobileテーマを用意すると、それをrenderしてくれる
結局テーマでほぼ解決できた感じ
0014nobodyさん
2011/07/03(日) 19:14:04.25ID:???0015nobodyさん
2011/07/03(日) 19:44:35.63ID:???0016nobodyさん
2011/07/03(日) 19:51:41.97ID:???0018nobodyさん
2011/07/03(日) 23:13:54.05ID:???0019nobodyさん
2011/07/03(日) 23:53:57.75ID:???0021nobodyさん
2011/07/04(月) 17:00:10.02ID:???array_walk_recursive
0022nobodyさん
2011/07/05(火) 16:49:34.52ID:???同じフォームのある特定のselectのある選択肢が選択された時のみ、
ある input をrequiredにする、
ってできる?
↓これでできそうな気がするけど、同じフォームの値は取ってこれないのかな
http://book.cakephp.org/ja/view/1179/%E7%8B%AC%E8%87%AA%E3%81%AE%E3%83%90%E3%83%AA%E3%83%87%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%AB%E3%83%BC%E3%83%AB
0024nobodyさん
2011/07/05(火) 22:01:52.46ID:???いろいろ試しているけど、バリデーションの仕組みがややこしすぎる・・・
allowEmpty と required ってどう違うんだろw
requiredをtrueにしても、通ったりするし
0025nobodyさん
2011/07/05(火) 23:00:47.78ID:???0026nobodyさん
2011/07/06(水) 00:54:19.01ID:???使い物にならないよね。
あと、標準のコンポーネントやヘルパーはホント使い物にならない。
特にFormヘルパーは心の底から使えない。
こんな屑フレームワークが何故こんなに持てはやされているのか謎。
0027nobodyさん
2011/07/06(水) 10:07:17.00ID:???required は「その項目の存在を必須とするか?」の設定で、 allowEmpty は「空の値を許容するか?」
分かりやすく言うと、
パスワードとかで、
required = false
allowEmpty = false
にすれば、
フィールドがある場合は、必須入力。
フィールドがない場合は、保存可能。
0029nobodyさん
2011/07/06(水) 10:48:30.44ID:???日本人的理由って言うか、
途中で誰もメンテしなくなったりプロジェクトが消えてしまったりするフレームワークをいろいろ見てると
やっぱ使ってる人数は多いほうが良いよ。
0030nobodyさん
2011/07/06(水) 11:30:19.94ID:???最初から使用者が多かったわけではないのに
「みんなが使ってるから」は理由にならないと思う。
ちょっと、formヘルパーがなんで使えないか聞いてみたい。
0031nobodyさん
2011/07/06(水) 11:57:44.55ID:???俺はZendとかEthnaで挫折したけど、Cakeだと続けて来れた
0033nobodyさん
2011/07/06(水) 18:46:45.58ID:???カスタマイズに本気になる時間があったら俺俺作るわ
ヘルパーが使えないには同意。使ったことない。
0034nobodyさん
2011/07/06(水) 20:28:57.66ID:???ビューでaddScript書く時だけ使う。
0035nobodyさん
2011/07/06(水) 22:34:45.23ID:???0036nobodyさん
2011/07/06(水) 23:33:25.75ID:???普通に<a>タグ書けばいいじゃん
0037nobodyさん
2011/07/06(水) 23:55:49.43ID:???記述が煩雑になってありがたみが薄れるからなー。
簡単なelement書くか、変数展開だけで済ますかな。
0038nobodyさん
2011/07/06(水) 23:55:53.23ID:???0039nobodyさん
2011/07/07(木) 02:25:19.28ID:???<?php echo Router::url('/') ?>
とかしらないのか?
0040nobodyさん
2011/07/07(木) 12:07:41.48ID:???maxlength自動で設定してくれたりして、便利だと思うけどなぁ。
(保守が楽)
アソシエーションの設定をちゃんとしとけば
saveallで一発で保存できるし。
0041nobodyさん
2011/07/07(木) 14:34:22.19ID:???となってしまう事だけど、これは仕方ないよな
0042nobodyさん
2011/07/07(木) 15:59:11.03ID:zfJE1aJ10043nobodyさん
2011/07/07(木) 17:34:23.24ID:???0045nobodyさん
2011/07/07(木) 20:47:26.25ID:???<a href="<?php echo Router::ulr('/')?>">URL</a>
htmlヘルパー使わないんだから、こうなるよな
0046nobodyさん
2011/07/07(木) 21:46:25.25ID:???ulrってなんぞ?
0047nobodyさん
2011/07/07(木) 22:46:37.36ID:???0048nobodyさん
2011/07/08(金) 01:10:30.14ID:???0049nobodyさん
2011/07/08(金) 11:16:11.84ID:???複雑になるだけな気がするんですが、メリットがあったら教えてもらいたいです。
0050nobodyさん
2011/07/13(水) 05:52:56.24ID:???を使って他テーブルの外部IDを設定(ひもづけ)するのは危険かな?
例えばショッピングサイトで注文テーブルの注文IDを、注文内容テーブルの外部IDに設定するような場合。
処理の途中で別のINSERTが入った場合はどうなるんだろう・・・?
0051nobodyさん
2011/07/13(水) 09:01:50.59ID:???トランザクション使うなら、InnoDBにしないといけないけど。
0052nobodyさん
2011/07/14(木) 00:15:26.04ID:???ssh接続するサーバ上で開発する場合、開発環境はどんな選択肢があるんだろう?
0053nobodyさん
2011/07/14(木) 00:56:03.07ID:???0054nobodyさん
2011/07/14(木) 01:03:22.06ID:???0056nobodyさん
2011/07/14(木) 22:23:54.50ID:???このあたりの検索キーワードでリモートでデバッグ出来ますので、分かってしまえばかなり便利です。
0057nobodyさん
2011/07/18(月) 05:28:44.18ID:???奴らは街角で拉致られてタコ部屋に押し込められて強制労働させられてるのか?
自ら希望して派遣会社に登録したんじゃないのか?
まずそこをハッキリして貰いたいんだが。
0058nobodyさん
2011/07/18(月) 06:38:04.14ID:???0059nobodyさん
2011/07/18(月) 11:02:32.30ID:???0060nobodyさん
2011/07/18(月) 12:50:23.72ID:???0061nobodyさん
2011/07/18(月) 17:26:31.69ID:???0062nobodyさん
2011/07/19(火) 14:07:14.50ID:???俺は勉強おろそかになってた時期も含むと、8,9年ぐらいになるんだけど
ロールバックとかトランザクションとかDBの知識全くないわ
0063nobodyさん
2011/07/19(火) 19:02:12.16ID:???ここ10年の間なら、Webプログラミング+DBってパターンが王道だし、
PHPとMySQLは、もっとも利用されている組み合わせだ。
なのに、PHPのみで8〜9年というのはおかしいな。
今までCSVのみでデータの読み書きをしていたのか?
0064nobodyさん
2011/07/19(火) 19:55:53.43ID:???いや、ずっとDBだけど大規模なサイトの開発しなかったら正直
ロールバックとかトランザクションなんて使わなくてもいいからな
PHPから接続して、CRUDできたら大抵のシステムは組めるでしょ?
0065nobodyさん
2011/07/19(火) 21:17:02.33ID:???デフォルトだと今でもMyISAMだろうし。
0066nobodyさん
2011/07/19(火) 21:25:45.94ID:???0067nobodyさん
2011/07/19(火) 21:43:17.25ID:???0069nobodyさん
2011/07/20(水) 07:14:48.59ID:???月1000万PVあるポイントサイト運営してるけど、MyISAMだし、
それでデータが破壊されることは無い。
だから、この程度の規模だとトランザクションは必要ないのかもな。
0070nobodyさん
2011/07/20(水) 11:19:20.67ID:???サンプルの中にある
cake\tests\lib\templates の
footer.php と header.php と menu.php から
ものすごい数のエラーが出てるんだけど
何か設定間違えたかな?
http://mergedoc.sourceforge.jp/
ここのEclipse3.6を一回更新して使ってるんだけど
0071nobodyさん
2011/07/20(水) 12:27:08.82ID:???トランザクションの有無は操作内容によるから規模関係ないかと。
あとInnoDBプラグイン以降はMyISAMの出番はないんじゃない?
小さめのDBならMyISAMのが良いこともあるけど、その規模なら誤差みたいなもんだし。
0072nobodyさん
2011/07/20(水) 15:10:09.78ID:???0073nobodyさん
2011/07/20(水) 16:08:47.61ID:???ポイントサイトやってるから、毎秒100人ぐらいの
同時アクセスが発生するんだが、
DBの読み書きでトランザクションを使用してないので
どうなるかと運営当初は不安だったが、全然大したことなかったw
だから、どの程度の規模・アクセス・処理想定をすれば
InnoDBにしてトランザクションした方が良いかわからないんだよな。
0074nobodyさん
2011/07/20(水) 16:58:32.13ID:???銀行口座AからBへ振り込み処理を行うとする。
1.UPDATEでAの残高を減らす
2.UPDATEでBの残高を増やす
もし1の処理の後、エラーが起きて2が実行されなかったとする。
するとAの残高だけ減っているというデータの不整合が起きてしまう。
こうならないために、1と2をトランザクションで囲って、
エラーが起きた場合はロールバックして1の処理をキャンセルする。
0075nobodyさん
2011/07/20(水) 17:12:21.69ID:???内容が戻るのを防ぐのもトランザクションでやるの?
0080nobodyさん
2011/07/20(水) 20:08:13.30ID:???0081nobodyさん
2011/07/20(水) 20:08:31.53ID:???行ロックってデッドロックの解決わからなくて実装してないなぁ
手動で解除できるようにしとくくらいなのか?
0082nobodyさん
2011/07/20(水) 20:35:12.17ID:???pconnect使わなければプログラム終了したらDB接続も勝手に切れる。
嫌ならロックやトランザクション使うときだけ明示的にconnectする。
>>80
AppModelかBehaviourに
$db =& ConnectionManager::getDataSource($this->useDbConfig);
return $db->begin($this);
こんなメソッド書くかんじ?
同じDB接続なら二回目以降は無視するとかcommit/rollbackをまとめて行うとかの工夫はほしいけど。
0085nobodyさん
2011/07/21(木) 00:07:23.26ID:???通常はsaveAllで事足りるはず。
MySQLならinnoDB使ってれば自動でトランザクションしてくれる。
0086nobodyさん
2011/07/21(木) 07:30:42.02ID:???alpha版ためしたらエラーでまくりだった;
Lithiumとどっちが先か・・・
0087nobodyさん
2011/07/21(木) 14:11:40.28ID:???通常の範囲せますぎやない?
クエリの間に判定や分岐をいれたいことって多々あるとおもう。
MySQLのストアドは弱いしね。
0089nobodyさん
2011/07/21(木) 16:40:06.60ID:???例えば、会員情報を更新しようとして、一緒に
プロフィールテーブルやポイントテーブルを更新する事は想定できるだろ。
0091nobodyさん
2011/07/21(木) 18:32:52.63ID:???0092nobodyさん
2011/07/21(木) 19:02:21.63ID:???流れ見ててるからわからん。
>>87
saveallじゃ足らんって言ってて
>>88
具体的にどんな時に必要?
>>89は
プロフィールテーブルやポイントテーブルを更新する事は想定できるだろ。
↑これはsaveallで足りるから、まさか>>88へのレスでは無いとは思うけど、
どうなんだろうって思ったから。
009392
2011/07/21(木) 19:15:12.79ID:???会員AからBにポイントを振る場合は、
トランザクション処理になるだろうけど、
cakePHPの場合、model->saveに渡す配列に
ちゃんとデータを入れれば、
saveAll一発で済むし。
0094nobodyさん
2011/07/21(木) 19:18:17.61ID:n5p3Ei1e・ポイントをプラスする
・ポイントが500以上になったユーザーのプロフィールを更新する
こういうのはSaveAllじゃダメだろ。
どんだけ単純なアプリ作ってるんだよ。
0095nobodyさん
2011/07/21(木) 20:01:13.12ID:???単純思考過ぎる。saveAll一発でいけたら苦労しない
0096nobodyさん
2011/07/22(金) 17:29:49.62ID:???int(2)
これって同じことなの?
0097nobodyさん
2011/07/22(金) 18:25:40.59ID:8Fm0K952ちがうよ
0098nobodyさん
2011/07/22(金) 18:31:43.01ID:???MySQLでのテーブル定義時の話だよね?
TINYINTは-128から127 (符号無しの場合0から255)が保持可能
INTは-2147483648から2147483647 (符号無しの場合0から4294967295)が保持可能。
型の後ろのカッコは表示幅。(2)は2桁に満たない場合に0フィルしてくれるけど3桁だと
幅指定無視して3桁表示される。切り捨てたりするわけではない。INTだと4桁、5桁も
ありえるので、そういう値を扱うとき同じとはいえない
0099nobodyさん
2011/07/22(金) 20:18:54.31ID:???仕様が良くあると思いますが、この場合のバリデーションってどうしてます?
0100nobodyさん
2011/07/22(金) 20:32:49.17ID:???0101nobodyさん
2011/07/22(金) 20:54:14.56ID:???で作ればいいだけでは?
0103nobodyさん
2011/07/22(金) 21:25:49.24ID:M3kIDpUH0105nobodyさん
2011/07/22(金) 22:13:36.68ID:???0106nobodyさん
2011/07/22(金) 22:32:30.85ID:???おいらはAuthコンポーネント使うからコントローラで
$this->Auth->password($hogehoge)
かな。
0107nobodyさん
2011/07/22(金) 22:36:18.41ID:???if ($this->User->validates() {
$this->data['User']['password'] = $this->Auth->password($this->data['User']['password']);
$this->User->save($this->data, false);
}
てな感じで、一度バリデーションして
問題なければパスワード暗号化してそれからsaveするんだよね?
好きにしろって言われればそれまでだけど、他はどうしてるか気になってね
0108nobodyさん
2011/07/22(金) 22:47:57.32ID:???password1 == password2のバリデーションをpassword1 に設定
コントローラで
$this->data['User']['password'] = $this->Auth->password($this->data['User']['password1']);
$this->User->save($this->data, true);
みたいにしてる。定石かどうかは知らん。
ただ、入力をpasswordにするとAuthコンポーネントが
勝手にハッシュ化してめんどいことになる。
0109nobodyさん
2011/07/22(金) 22:57:53.24ID:???0110nobodyさん
2011/07/23(土) 01:00:17.82ID:???if ($this->User->save($this->data)) {
save後の処理
} else {
$this->set('error', '登録に失敗しました');
}
■ このスレッドは過去ログ倉庫に格納されています