Laravel - 文件要求验证反之亦然

时间:2016-08-15 10:45:56

标签: php validation laravel file-upload laravel-5.2

好的,这个问题非常有趣,但我需要解决它:

我正在使用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执行两次:/

1 个答案:

答案 0 :(得分:0)

我刚刚注意到,在您的规则数组中,您在pictures键中有一个空格 我试图检查,如果该空格导致任何错误。是的,它确实无法通过验证。我想,这不应该导致错误。

尝试删除该空间。

public static $rules = array(
    'picture' => 'required|mimes:jpg,jpeg,png', //Remove space from 'picture'
    'description' => 'required'
);