验证图像上传

时间:2017-01-13 11:43:55

标签: laravel-5

哟!我正在制作一张附有图片的表格。

形式:

$table->engine = 'InnoDB';

验证:

{{ Form::file('attachments[]', array('multiple')) }}

我也试过' image'作为验证器规则,但每当我使用jpg图像发布表单时,我都会收到错误:

  

附件必须是以下类型的文件:jpeg,jpg,png。

使用Laravel 5.3

1 个答案:

答案 0 :(得分:0)

由于您定义的输入名称为attachments[],因此附件将是包含您的文件的数组。如果您只需要上传一个文件,则可能需要将输入名称重命名为attachments,而[](或attachment在这种情况下更有意义)。如果您需要能够上传多个,可以在Request - 扩展类中构建一个迭代器,该类返回一组涵盖attachments[]内每个条目的规则

protected function attachments()
{
    $rules          = [];
    $postedValues   = $this->request->get('attachments');

    if(null == $postedValues) {
        return $rules;
    }

    // Let's create some rules!
    foreach($postedValues as $index => $value) {
        $rules["attachments.$index"] = 'required|mimes:jpeg,jpg,png';
    }
    /* Let's imagine we've uploaded 2 images. $rules would look like this:
        [
            'attachments.0' => 'required|mimes:jpeg,jpg,png',
            'attachments.1' => 'required|mimes:jpeg,jpg,png'
        ];
    */

    return $rules;
}

然后,您可以在rules()内调用该函数,将从attachments返回的数组与您可能要为该请求指定的任何其他规则合并:

public function rules()
{
    return array_merge($this->attachments(), [
       // Create any additional rules for your request here... 
    ]);
}

如果您还没有针对表单的专用Request扩展课程,则可以输入php artisan make:request MyRequestName create one与工匠cli一起使用。将在app\Http\Requests内创建一个新的请求类。这是您将上面的代码放在其中的文件。接下来,您可以在控制器端点的函数签名中typehint这个类:

public function myControllerEndpoint(MyRequestName $request)
{
    // Do your logic... (if your code gets here, all rules inside MyRequestName are met, yay!)
}