【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ファイルに処理を書く事自体がアレ