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
- 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 #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 incorrect event name for `yii\jui\Spinner` (samdark)
- Bug: Json::encode() did not handle objects that implement JsonSerializable interface correctly (cebe)
......
......@@ -229,7 +229,9 @@ class FileValidator extends Validator
*/
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
return [
[['val_attr_a', 'val_attr_b'], 'required', 'on' => 'reqTest'],
['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
$val->validateAttribute($m, 'attr_files');
$this->assertTrue($m->hasErrors());
$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