如何在 laravel 规则中获取上传文件的内容?
How do I get the contents of an uploaded file in a laravel rule?
我正在尝试为上传的文件做一些自定义验证逻辑,所以我创建了一个 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.';
}
}
您可以通过全局 request()
帮助程序访问 Reuqest
对象:
$file = request()->file('some_file');
您还可以使用 IoC 注入 Request
对象:
$request = app('Illuminate\Http\Request');
$file = $request->file('some_file');
好吧,这很愚蠢,但也许其他人将来会遇到同样的问题并找到它。
我的问题是我忘记将 enctype="multipart/form-data"
添加到 <form>
元素,所以实际上发送到服务器的只是文件的基本名称。这解释了为什么我在规则中只看到了这些。
添加适当的 enctype 属性后,我得到了一个 Illuminate\Http\UploadedFile
的实例作为规则中的 $value
。
我正在尝试为上传的文件做一些自定义验证逻辑,所以我创建了一个 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.';
}
}
您可以通过全局 request()
帮助程序访问 Reuqest
对象:
$file = request()->file('some_file');
您还可以使用 IoC 注入 Request
对象:
$request = app('Illuminate\Http\Request');
$file = $request->file('some_file');
好吧,这很愚蠢,但也许其他人将来会遇到同样的问题并找到它。
我的问题是我忘记将 enctype="multipart/form-data"
添加到 <form>
元素,所以实际上发送到服务器的只是文件的基本名称。这解释了为什么我在规则中只看到了这些。
添加适当的 enctype 属性后,我得到了一个 Illuminate\Http\UploadedFile
的实例作为规则中的 $value
。