我正在尝试为上传的文件执行一些自定义验证逻辑,因此我创建了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.';
}
}
答案 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');