noldor's diary

調べたことのメモとよしなしごと

CodeIgniter2: form_validationクラスを強引に継承したらバリデーションエラーが表示されなかった

form_validationを拡張するためにはMY_Form_validationを作るのが常套手段と思いますが、アプリケーションをまたいで使いたかったので別クラスにしてつくってみました。

class MY_Form_validation extends CI_Form_validation
{
}

class Oreore_form_validation extends MY_Form_validation
{
}

//コントローラで
$this->load->library('oreore_form_validation');

すると、validation_errors()とform_error()でバリデーションエラーが表示されなくなりました。

原因は、それぞれの関数が「form_validation」ライブラリの存在に依存していたため。チェックをしていたのは「oreore_form_validation」だったので、「form_validation」としてはエラーなしの扱いでした。

form_validationとして読み込ませることで解決。

$this->load->library('oreore_form_validation', '', 'form_validation');

そもそもCodeIgniterの想定しているであろうように継承の順序を変えてやれば何事もないのだけれど、これだと目的を果たせないので上記のような継承順のままとしました。下記であれば問題なく動きます。

class Oreore_form_validation extends CI_Form_validation
{
}

class MY_Form_validation extends Oreore_form_validation
{
}

//コントローラで
$this->load->library('form_validation');