CodeIgniter 3.xのForm validationで知っておいたほうがいいかも知れないこと

1. CallbackはControllerでしか定義できない

検証ルールをメソッドに定義するCallbackと呼ばれる方法は、Controllerでしか使えません。つまり、Modelに検証メソッドを定義する場合には使えません。

2. Callableにパラメータを渡す方法は用意されていない

Callbackではパラメータをcallback_foo[bar]のように渡すことができます。

If you need to receive an extra parameter in your callback method, just add it normally after the method name between square brackets, as in: callback_foo[bar], then it will be passed as the second argument of your callback method.
https://www.codeigniter.com/userguide3/libraries/form_validation.html#callbacks-your-own-validation-methods

しかし、Callableではパラメータを渡す方法は用意されていません。

パラメータを渡したい場合は、クロージャを使うことを検討してください。

3. Callback/Callableは最優先で検証される

検証ルールは定義した順番で実行されると思うかも知れませんが、実は違います。Callback/Callableが最優先で実行され、その後、requiredが検証されます。

"Callbacks" are given the highest priority (always called), followed by 'required' (called if callbacks didn't fail), and then every next rule depends on the previous one passing.
https://github.com/bcit-ci/CodeIgniter/blob/develop/system/libraries/Form_validation.php#L505

4. set_data()は検証ルールを定義する前に実行する必要がある

$_POST以外のデータを検証する際に使うset_data()は、set_rules()を呼び出す前に実行しなければなりません。

You have to call the set_data() method before defining any validation rules.
https://www.codeigniter.com/userguide3/libraries/form_validation.html#validating-an-array-other-than-post

まとめ

  1. CallbackはControllerでしか定義できない
  2. Callableにパラメータを渡す方法は用意されていない
  3. Callback/Callableは最優先で検証される
  4. set_data()は検証ルールを定義する前に実行する必要がある

参考

Date: 2017/12/03

Tags: codeigniter