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
まとめ
- CallbackはControllerでしか定義できない
- Callableにパラメータを渡す方法は用意されていない
- Callback/Callableは最優先で検証される
- set_data()は検証ルールを定義する前に実行する必要がある
参考
Date: 2017/12/03