【CodeIgniter】FormValidationのconfigが嫌われがちなので分割するやつ
おはようございます。
まーくあっぷえんじにアの です。
CodeIgniterのFormValidationのconfigが結構使いにくいと聞きます。
私も使いにくいと思いあまり使いませんでしたが
コアを書き換えない範囲でなんとかできるんじゃないだろうか。
という事で実際にやってみた備忘録です。
config/form_validation.phpの不便な点
- 便利だけど大規模だとconfigファイルなんか見づらい
- FormValidationロードしただけでconfig配列がえらい事になっちゃってメモリの無駄感が半端ない
config/form_validation.phpの便利な点
- controllerを書く時に$this->form_validation->run()で済むので楽だし短くて済む
- 検証ルールが書かれている箇所が統一されているので便利
問題点を解消する為に実際にやってみたコード
config/form_validation.php
<?php $RTR = load_class('Router', 'core'); $valid_conf_path = APPPATH . 'config/form_validation/' . $RTR->directory . strtolower($RTR->class) . '.php'; if ( is_file($valid_conf_path) ) include($valid_conf_path); $config['common'] = [ [ 'field' => 'common_test', 'label' => 'common_test', 'rules' => 'required', ] ];
config/form_validation/welcome.php
<?php $config = [ 'welcome/index' => [ [ 'field' => 'test', 'label' => 'test', 'rules' => 'required' ] ] ];
こんな感じでconfig/from_validation.php内にRouterクラスを取得して
そこからdirectoryとclassを使ってconfig/form_validation内へルーティング
これで、各コントローラ毎にconfigファイルの切り分けができて、見通しとメモリの無駄感も軽減!
残念なところ
- 共通ルール部分(config/form_validation.php)を書く時に$config = [];と書いちゃうと定義したルールが消える。
- そもそもconfigファイルに処理を書く事自体がアレ