I’m trying to validate file types in Laravel like this:
'rules' => ['mimes:pdf,bdoc,asice,png,jpg']
Validation works correctly for pdf, png and jpg but does not work for bdoc or asice files (files with those extensions do not pass validation).
My guess is that it probably does not work for those file types because they are not included in the MIME types shown here: https://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
Am I correct in that assumption? If so, how can I validate these file types?
>Solution :
You need to create a custom validation rules for that specific file types.
Check the documentations on creating a custom validation here. https://laravel.com/docs/8.x/validation#custom-validation-rules
Update: Added some sample codes.
Validation Rule
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class AcceptableFileTypesRule implements Rule
{
protected array $acceptableTypes = [];
public function __construct(array $acceptableTypes = [])
{
$this->acceptableTypes = $acceptableTypes;
}
/**
* @param string $attribute
* @param \Illuminate\Http\UploadedFile $value
*
* @return bool
*/
public function passes($attribute, $value): bool
{
return in_array($value->getClientOriginalExtension(), $this->acceptableTypes);
}
public function message(): string
{
// Change the validation error message here
return 'The validation error message.';
}
}
You can use it like this
[
'rules' => ['required', new App\Rules\AcceptableFileTypesRule(['pdf,bdoc,asice,png,jpg'])]
]