好的,这个问题非常有趣,但我需要解决它:
我正在使用Laravel 5.2并制作表单来上传图片。我有这个规则:
public static $rules = array(
'picture ' => 'required|mimes:jpg,jpeg,png',
'description' => 'required'
);
描述验证没问题,但是在验证图片时,'required'属性似乎反之亦然 - 当选择文件(图片)时,它无法验证(错误:'图片字段是必需的' )当没有文件时,验证成功。
以下是我的控制器的代码:
Log::info('Validating store picture request');
$validator = Validator::make(Input::all(), Picture::$rules);
$validator->after(function ($validator) {
Log::info('After method');
// check for validity of the file
if (!Input::file('picture')->isValid()) {
Log::info('Picture is not valid');
$validator->errors()->add('picture', 'Picture is not valid');
}
});
if ($validator->fails()) {
Log::info('Validation failed, returning back');
$messages = $validator->messages();
return back()
->withErrors($validator)
->withInput(Input::except('picture'));
}
Log::info('Validation succeed, continuing');
编辑:我以这种方式记录了Validator类:
protected function validateRequired($attribute, $value)
{
Log::info('Just logging required validation');
Log::info('is_null: '.is_null($value));
if (is_null($value)) {
Log::info('Reason: is_null');
return false;
} elseif (is_string($value) && trim($value) === '') {
return false;
} elseif ((is_array($value) || $value instanceof Countable) && count($value) < 1) {
return false;
} elseif ($value instanceof File) {
Log::info('File, getpath '.$value->getPath());
return (string) $value->getPath() != '';
}
Log::info('Continuing');
return true;
}
这是我在提交带有文件的表单时得到的结果:
[2016-08-15 12:18:27] local.INFO: Validating store picture request
[2016-08-15 12:18:27] local.INFO: Just logging required validation
[2016-08-15 12:18:27] local.INFO: is_null: 1
[2016-08-15 12:18:27] local.INFO: Reason: is_null
[2016-08-15 12:18:27] local.INFO: Just logging required validation
[2016-08-15 12:18:27] local.INFO: is_null: 1
[2016-08-15 12:18:27] local.INFO: Reason: is_null
[2016-08-15 12:18:27] local.INFO: After method
[2016-08-15 12:18:27] local.INFO: Validation failed, returning back
编辑:当没有文件时,我得到相同的日志输出,所以现在它的行为方式相同..而且我不知道为什么每次requeset执行两次:/
答案 0 :(得分:0)
我刚刚注意到,在您的规则数组中,您在pictures
键中有一个空格
我试图检查,如果该空格导致任何错误。是的,它确实无法通过验证。我想,这不应该导致错误。
尝试删除该空间。
public static $rules = array(
'picture' => 'required|mimes:jpg,jpeg,png', //Remove space from 'picture'
'description' => 'required'
);