Skip to content

Commit 7d534d8

Browse files
committed
Validator: do not require UploadControl instance for file upload related validations
1 parent b55d3c2 commit 7d534d8

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

src/Forms/Validator.php

+6-3
Original file line numberDiff line numberDiff line change
@@ -323,9 +323,10 @@ public static function validateFloat(IControl $control): bool
323323
/**
324324
* Is file size in limit?
325325
*/
326-
public static function validateFileSize(Controls\UploadControl $control, $limit): bool
326+
public static function validateFileSize(IControl $control, $limit): bool
327327
{
328328
foreach (static::toArray($control->getValue()) as $file) {
329+
Validators::assert($file, Nette\Http\FileUpload::class, 'control value');
329330
if ($file->getSize() > $limit || $file->getError() === UPLOAD_ERR_INI_SIZE) {
330331
return false;
331332
}
@@ -338,10 +339,11 @@ public static function validateFileSize(Controls\UploadControl $control, $limit)
338339
* Has file specified mime type?
339340
* @param string|string[] $mimeType
340341
*/
341-
public static function validateMimeType(Controls\UploadControl $control, $mimeType): bool
342+
public static function validateMimeType(IControl $control, $mimeType): bool
342343
{
343344
$mimeTypes = is_array($mimeType) ? $mimeType : explode(',', $mimeType);
344345
foreach (static::toArray($control->getValue()) as $file) {
346+
Validators::assert($file, Nette\Http\FileUpload::class, 'control value');
345347
$type = strtolower($file->getContentType());
346348
if (!in_array($type, $mimeTypes, true) && !in_array(preg_replace('#/.*#', '/*', $type), $mimeTypes, true)) {
347349
return false;
@@ -354,9 +356,10 @@ public static function validateMimeType(Controls\UploadControl $control, $mimeTy
354356
/**
355357
* Is file image?
356358
*/
357-
public static function validateImage(Controls\UploadControl $control): bool
359+
public static function validateImage(IControl $control): bool
358360
{
359361
foreach (static::toArray($control->getValue()) as $file) {
362+
Validators::assert($file, Nette\Http\FileUpload::class, 'control value');
360363
if (!$file->isImage()) {
361364
return false;
362365
}

tests/Forms/Validator.customControl.phpt

+24
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ declare(strict_types=1);
88

99
use Nette\Forms\Form;
1010
use Nette\Forms\Validator;
11+
use Nette\Http\FileUpload;
1112
use Tester\Assert;
1213

1314

@@ -74,3 +75,26 @@ test(function () { // filled, blank
7475
Assert::true(Validator::validateFilled($input));
7576
Assert::false(Validator::validateBlank($input));
7677
});
78+
79+
80+
test(function () { // file upload related validators
81+
$input = new CustomControl(new FileUpload([
82+
'name' => 'foo',
83+
'size' => 1,
84+
'tmp_name' => __FILE__,
85+
'error' => UPLOAD_ERR_OK
86+
]));
87+
Assert::true(Validator::validateFileSize($input, 42));
88+
Assert::true(Validator::validateMimeType($input, ['text/x-php']));
89+
Assert::false(Validator::validateImage($input));
90+
91+
$input = new CustomControl(new FileUpload([
92+
'name' => 'foo',
93+
'size' => 100,
94+
'tmp_name' => __DIR__ . '/files/logo.gif',
95+
'error' => UPLOAD_ERR_OK
96+
]));
97+
Assert::false(Validator::validateFileSize($input, 42));
98+
Assert::false(Validator::validateMimeType($input, ['text/x-php']));
99+
Assert::true(Validator::validateImage($input));
100+
});

0 commit comments

Comments
 (0)