Commit c694d32e by Alexander Makarov

Merge branch 'fix_is_empty_file_validator' of github.com:ZhandosKz/yii2 into…

Merge branch 'fix_is_empty_file_validator' of github.com:ZhandosKz/yii2 into ZhandosKz-fix_is_empty_file_validator Conflicts: framework/CHANGELOG.md
parents 7a3fd41a 8be5938c
...@@ -54,6 +54,7 @@ Yii Framework 2 Change Log ...@@ -54,6 +54,7 @@ Yii Framework 2 Change Log
- Bug #2624: Html::textArea() should respect "name" option. (qiangxue) - Bug #2624: Html::textArea() should respect "name" option. (qiangxue)
- Bug #2653: Fixed the bug that unsetting an unpopulated AR relation would trigger exception (qiangxue) - Bug #2653: Fixed the bug that unsetting an unpopulated AR relation would trigger exception (qiangxue)
- Bug #2681: Fixed the bug of php build-in server https://bugs.php.net/bug.php?id=66606 (dizews) - Bug #2681: Fixed the bug of php build-in server https://bugs.php.net/bug.php?id=66606 (dizews)
- Bug #2695: Fixed the issue that `FileValidator::isEmpty()` always returns true for validate multiple files (ZhandosKz)
- Bug: Fixed `Call to a member function registerAssetFiles() on a non-object` in case of wrong `sourcePath` for an asset bundle (samdark) - Bug: Fixed `Call to a member function registerAssetFiles() on a non-object` in case of wrong `sourcePath` for an asset bundle (samdark)
- Bug: Fixed incorrect event name for `yii\jui\Spinner` (samdark) - Bug: Fixed incorrect event name for `yii\jui\Spinner` (samdark)
- Bug: Json::encode() did not handle objects that implement JsonSerializable interface correctly (cebe) - Bug: Json::encode() did not handle objects that implement JsonSerializable interface correctly (cebe)
......
...@@ -229,7 +229,9 @@ class FileValidator extends Validator ...@@ -229,7 +229,9 @@ class FileValidator extends Validator
*/ */
public function isEmpty($value, $trim = false) public function isEmpty($value, $trim = false)
{ {
return !$value instanceof UploadedFile || $value->error == UPLOAD_ERR_NO_FILE; $value = is_array($value) && !empty($value) ? $value[0] : $value;
return !$value instanceof UploadedFile || $value->error == UPLOAD_ERR_NO_FILE;
} }
/** /**
......
...@@ -30,6 +30,8 @@ class FakedValidationModel extends Model ...@@ -30,6 +30,8 @@ class FakedValidationModel extends Model
return [ return [
[['val_attr_a', 'val_attr_b'], 'required', 'on' => 'reqTest'], [['val_attr_a', 'val_attr_b'], 'required', 'on' => 'reqTest'],
['val_attr_c', 'integer'], ['val_attr_c', 'integer'],
['attr_images', 'file', 'maxFiles' => 3, 'types' => ['png'], 'on' => 'validateMultipleFiles'],
['attr_image', 'file', 'types' => ['png'], 'on' => 'validateFile']
]; ];
} }
......
...@@ -107,6 +107,68 @@ class FileValidatorTest extends TestCase ...@@ -107,6 +107,68 @@ class FileValidatorTest extends TestCase
$val->validateAttribute($m, 'attr_files'); $val->validateAttribute($m, 'attr_files');
$this->assertTrue($m->hasErrors()); $this->assertTrue($m->hasErrors());
$this->assertTrue(stripos(current($m->getErrors('attr_files')), 'you can upload at most') !== false); $this->assertTrue(stripos(current($m->getErrors('attr_files')), 'you can upload at most') !== false);
$m = FakedValidationModel::createWithAttributes(
[
'attr_images' => $this->createTestFiles(
[
[
'name' => 'image.png',
'size' => 1024,
'type' => 'image/png'
],
[
'name' => 'image.png',
'size' => 1024,
'type' => 'image/png'
],
[
'name' => 'text.txt',
'size' => 1024
],
]
)
]
);
$m->setScenario('validateMultipleFiles');
$this->assertFalse($m->validate());
$this->assertTrue(stripos(current($m->getErrors('attr_images')), 'Only files with these extensions are allowed') !== false);
$m = FakedValidationModel::createWithAttributes(
[
'attr_images' => $this->createTestFiles(
[
[
'name' => 'image.png',
'size' => 1024,
'type' => 'image/png'
],
[
'name' => 'image.png',
'size' => 1024,
'type' => 'image/png'
],
]
)
]
);
$m->setScenario('validateMultipleFiles');
$this->assertTrue($m->validate());
$m = FakedValidationModel::createWithAttributes(
[
'attr_image' => $this->createTestFiles(
[
[
'name' => 'text.txt',
'size' => 1024,
],
]
)
]
);
$m->setScenario('validateFile');
$this->assertFalse($m->validate());
} }
/** /**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment