LoginSignup
3
5

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-12-03

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()は検証ルールを定義する前に実行する必要がある

参考


クリエイティブ・コモンズ・ライセンス
この記事はCC BY-SA 4.0(クリエイティブ・コモンズ 表示 4.0 継承 国際 ライセンス)の元で公開します。

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5