如何在laravel规则中获取上载文件的内容?

时间:2018-02-11 12:50:30

标签: php laravel laravel-5.5

我正在尝试为上传的文件执行一些自定义验证逻辑,因此我创建了Rule并开始编辑passes()方法。但$value仅包含上传文件的基本名称。

如何获取文件内容或上传文件的完整路径,以便我可以验证内容?

以下是使用artisan创建的标准样板规则:

<?php

namespace App\Rules;

use Illuminate\Support\Facades\Storage;
use Illuminate\Contracts\Validation\Rule;

class MyFileValidation implements Rule
{
    /**
     * Create a new rule instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        // This is where I need the file contents
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The validation error message.';
    }
}

2 个答案:

答案 0 :(得分:2)

好的,所以这很愚蠢,但也许其他人将来会遇到同样的问题并找到它。

我的问题是我忘记将enctype="multipart/form-data"添加到<form>元素,因此实际发送到服务器的所有内容都是文件的基本名称。这就解释了为什么这就是我在我的规则中所看到的。

添加正确的enctype属性后,我在规则中得到Illuminate\Http\UploadedFile的实例作为$value

答案 1 :(得分:0)

您可以通过全局request()帮助程序访问Reuqest对象:

$file = request()->file('some_file');

您也可以使用IoC注入Request对象:

$request = app('Illuminate\Http\Request');
$file = $request->file('some_file');