フォーム作成の際、例えば、DBカラムの最大値 int(11)
※数値にすると int(11)
の最大値は 2147483649
。そして、最小値は -2147483648
。
許容範囲を超えて、保存しようとすると以下のようなデータベースエラーが発生します。
error
SQLSTATE[22003]: Numeric value out of range: 1264 Out of range value for column {カラム名} at row 1
こうした場合、根本的な解決にはなりませんが、簡単な入力制限をするにはインプットフィールドに maxlenth
属性を付与することが考えられます。
ですが、入力の桁数的に自由さを保ちたい場合、そして正しくは、本来は厳密に値を検証(バリデート)させるのがよいと思います。
そこで以下、int(11)
の許容値の入力バリデートの実装方法です。
Cake4: int(11)の許容値の検証を行う
/** * デフォルトバリデーション * * @param \Cake\Validation\Validator $validator A Validator instance * @return \Cake\Validation\Validator */ public function validationDefault(Validator $validator): Validator { $validator ->notEmptyString('money', '金額を入力してください') ->add('money', 'custom', [ 'rule' => function ($value) { // int(11)の許容値: 2147483647 ~ -2147483648 return (int)$value <= 2 ** 31 - 1 && (int)$value >= -2 ** 31; }, 'message' => '数値範囲外です', ]); return $validator; }
こうすること厳密に int(11)
の許容値を超えた場合は正しく数値範囲外エラーを判定することができます。
■ MySQL: 整数型 (真数値) - INTEGER、INT、SMALLINT、TINYINT、MEDIUMINT、BIGINT