
フォーム作成の際、例えば、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