【发布时间】:2018-11-21 04:17:25
【问题描述】:
我在我的项目中使用Slim 3 Framework,并且我有一个包含 3 个输入的表单:'file', 'name', 'firstname'。
假设$request 有我表单的数据输入,为了获取上传的文件,我使用此代码
$files = $request->getUploadedFiles();
if (empty($files['file'])) {
throw new Exception('Invalid image');
}
$newfile = $files['file'];
然后,为了验证我的输入表单,我使用 Respect\Validation 库
$validation = $this->validator->validate($request, [
'file' => v::file()->mimetype('application/pdf'),
'name' => v::stringType()->notEmpty()->length(2, 50)->alpha(),
'firstname' => v::stringType()->notEmpty()->length(2, 50)->alpha()
]);
if($validation->failed() {
//...
}
事实是文件验证总是失败:
var_dump($request->getParam('file')); //return NULL
var_dump($newfile); //return the following
$newfile内容
object(Slim\Http\UploadedFile)#59 (8) {
["file"]=> string(14) "/tmp/php409Uje"
["name":protected]=> string(47) "Myfile.pdf"
["type":protected]=> string(15) "application/pdf"
["size":protected]=> int(1404476) ["error":protected]=> int(0)
["sapi":protected]=> bool(true) ["stream":protected]=> NULL
["moved":protected]=> bool(false)
}
所以现在我被困住了。我真的不知道如何告诉验证器验证 $newfile MIMETYPE 的“文件”输入。
【问题讨论】:
-
根据文档 (github.com/Respect/Validation/blob/1.1/docs/Mimetype.md),这应该可以工作:
'file' => v::mimetype('application/pdf') -
是的,当然,我在发布之前检查了文档,并尝试过,但正如我在帖子中提到的,
file返回 NULL,因为我需要 -i think- 使用 getUploadedFiles( ),所以验证总是会失败,因为 NULL 不是application/pdf类型 -
你能告诉我
$this->validator是什么吗?或代码,您在$container? 中初始化它? -
$container['validator'] = function ($container) { return new App\Validation\Validator; }; -
我不认为这是问题所在,一切都运行良好,我只是卡在文件验证上
标签: php file upload slim respect-validation