From 2874e070f3ad88c727b1335ba4f4515855bf5f64 Mon Sep 17 00:00:00 2001 From: Bizley Date: Thu, 24 Mar 2022 14:50:00 +0100 Subject: [PATCH] Fix #19322: Revert force setting value to empty string in case it's `null` in `yii\validators\FilterValidator::validateAttribute()` --- framework/CHANGELOG.md | 1 + framework/validators/FilterValidator.php | 3 ++- tests/framework/base/ModelTest.php | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md index f5b7a2e698..5a7da0ef23 100644 --- a/framework/CHANGELOG.md +++ b/framework/CHANGELOG.md @@ -9,6 +9,7 @@ Yii Framework 2 Change Log - Bug #19291: Reset errors and validators in `yii\base\Model::__clone()` (WinterSilence) - Enh #19304: Add filtering validator `yii\validators\TrimValidator` (WinterSilence) - Enh #19309: Optimize `yii\base\Model::attributes()` (WinterSilence) +- Bug #19322: Revert force setting value to empty string in case it's `null` in `yii\validators\FilterValidator::validateAttribute()` (bizley) 2.0.45 February 11, 2022 diff --git a/framework/validators/FilterValidator.php b/framework/validators/FilterValidator.php index b896e337ae..d24131a971 100644 --- a/framework/validators/FilterValidator.php +++ b/framework/validators/FilterValidator.php @@ -25,6 +25,8 @@ use yii\base\InvalidConfigException; * ``` * * Many PHP functions qualify this signature (e.g. `trim()`). + * If the callback function requires non-null argument (important since PHP 8.1) + * remember to set [[skipOnEmpty]] to `true` otherwise you may trigger an error. * * To specify the filter, set [[filter]] property to be the callback. * @@ -75,7 +77,6 @@ class FilterValidator extends Validator { $value = $model->$attribute; if (!$this->skipOnArray || !is_array($value)) { - $value = isset($value) ? $value : ''; $model->$attribute = call_user_func($this->filter, $value); } } diff --git a/tests/framework/base/ModelTest.php b/tests/framework/base/ModelTest.php index 428f3fb1b9..dcd5e893f3 100644 --- a/tests/framework/base/ModelTest.php +++ b/tests/framework/base/ModelTest.php @@ -526,7 +526,7 @@ class ComplexModel1 extends Model { return [ [['id'], 'required', 'except' => 'administration'], - [['name', 'description'], 'filter', 'filter' => 'trim'], + [['name', 'description'], 'filter', 'filter' => 'trim', 'skipOnEmpty' => true], [['is_disabled'], 'boolean', 'on' => 'administration'], ]; }