読者です 読者をやめる 読者になる 読者になる

CakePHPのバリデーションルールにマジックナンバーを使わないようにするためどこに定数をまとめるか

「最小文字数が8」っていうバリデーションルールを書く例で
Cookbookだと下のような感じでマジックナンバーにしてある。

'rule' => array('minLength', '8'),


多分簡単に説明するためにマジックナンバーにしてあるんだろうけど、
実際に開発するときは作用みたいなものがあるのか気になった。



結果から書くとbootstrap.phpかapp_model.phpに書いちゃってよさそう。
パフォーマンスが気になるようならモデル毎に読み込むとか考えればいいのかな。


【PHP】フレームワーク CakePHP 10ホール目【v1.3】

557+1 :nobodyさん [↓] :2011/01/09(日) 20:56:38 ID:???
book.cakephp.orgを見ながらcakephpの勉強をしているのだけど
バリデーションの定数(やエラーメッセージ)をどこかにまとめたい場合はどこにまとめるのが作法ですか?

http://book.cakephp.org/ja/view/150/
この「独自のバリデーションルール」だとマジックナンバーになってるけど、
実際の開発ではどういう方法があるかを知りたくて。

app/config/bootstrap.phpにまとめるものですか?

558+1 :nobodyさん [↓] :2011/01/10(月) 00:55:02 ID:???
>>557
自分はvalidation.phpとか作ってConfigure::load()してる。
bootstrapにゴリゴリ設定詰めてもそりゃ動くけどね。

559+1 :557 [↓] :2011/01/10(月) 02:26:32 ID:???
>>558
app/config/validation.phpにずらずら定数を書いておいて
app/models/<使いたいmodel>.phpの先頭でConfigure::load('validation');
という意味であってます?

bootstrapだとvalidation.phpが必要ないmodelでも読み込んじゃうから良くないという感じでしょうか?

560+1 :nobodyさん [↓] :2011/01/10(月) 04:57:04 ID:???
app_model.phpじゃだめなん

561+1 :nobodyさん [↓] :2011/01/10(月) 12:16:49 ID:???
>>559
bootstrapで常時読み込むよ。モデルごとに分けたりなんかしない。
配列の階層構造とかデフォルトのメッセージとかは面倒なのでビヘイビアで処理させてる。

562+1 :nobodyさん [↓] :2011/01/10(月) 12:31:41 ID:???
bootstrapに全定数とかテーブルとか全部書くと便利だけど
全体の動作が重くならない?

563 :nobodyさん [↓] :2011/01/10(月) 13:51:26 ID:???
>>562
プロファイリングすれば分かるけど250行ぐらいの設定ファイルで0.4msしかかかってないぐらいには軽い

564 :nobodyさん [↓] :2011/01/10(月) 14:10:59 ID:???
0.4msってだいぶ重いんじゃね・・・?

565 :563 [↓] :2011/01/10(月) 15:22:42 ID:???
どんだけシビアな世界に生きてるか知らんが1リクエスト100msかかってる環境でこれなんだ
がなー
これが重いと言われるとどうしようもない

566 :nobodyさん [↓] :2011/01/10(月) 17:30:16 ID:???
CakePHPのApp::import()を1回分や、
無駄に発行するSQLの処理コストで吹き飛ぶ
誤差程度だと思うよ。0.4msなんて
bootstrapにある設定のコスト気にするより、
recursiveや取得するフィールドをきっちり調整した方がいいと思う。

568 :557 [↓] :2011/01/10(月) 20:13:38 ID:???
おぉ。レスが増えてた。
>>560
モデルってわけでもないからapp_model.phpじゃないのかな?という疑問もあり質問して聞いてみたくて。
作法みたいなのがあればそれに倣おうと。
>>561
常時読み込んでも対して違わないんですね。参考になります。

app_model.phpかbootstrap.phpで常時読み込んでみてパフォーマンスが気になるレベルになったら次を考えてみます。
みなさんありがとうございます。