我正在尝试验证持续时间为<=的视频在一个statamic插件中的laravel控制器中30秒(我不知道这是否是一个重要的细节(。
以下是使用GetID3 的自定义验证器
Validator::extend('VideoLength', function($attribute, $value, $parameters, $validator) {
// validate the file extension
if(!empty($value->getClientOriginalExtension()) && ($value->getClientOriginalExtension() == 'mp4')){
//new GetId3() expected an instance of IlluminateHttpUploadedFile
$track = new GetId3($value);
$track->extractInfo();
$duration = $track->getPlaytime();
return(round($duration) > 30) ?false:true;
}else{
return false;
}
},'Video duration must be less then 30 seconds');
我得到的错误是:
OwenojLaravelGetId3GetId3::__construct() must be an instance of IlluminateHttpUploadedFile, instance of SymfonyComponentHttpFoundationFileUploadedFile given
尝试使用自定义闭包规则。我以前使用它没有问题。还可以使用mimetypes
规则来限制文件类型。
request()->validate([
'video' => [
'required',
'mimetypes:video/mp4',
function ($attribute, $value, $fail) {
$video = new GetId3($value);
if ($video->getPlaytimeSeconds() > 30) {
$fail('The video must be shorter than 30 seconds.');
}
}
]
]);