Php 如何在laravel规则中获取上载文件的内容?
我正在尝试为上传的文件执行一些自定义验证逻辑,因此我创建了一个Php 如何在laravel规则中获取上载文件的内容?,php,laravel,laravel-5.5,Php,Laravel,Laravel 5.5,我正在尝试为上传的文件执行一些自定义验证逻辑,因此我创建了一个规则,并开始编辑passes()方法。但是$value仅包含上载文件的基本名称 如何获取文件内容或上传文件的完整路径,以便验证内容 以下是使用artisan创建的标准样板规则: <?php namespace App\Rules; use Illuminate\Support\Facades\Storage; use Illuminate\Contracts\Validation\Rule; class MyFileVal
规则
,并开始编辑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.';
}
}
您可以通过全局帮助器访问Reuqest
对象:
您还可以使用IoC注入请求
对象:
$request = app('Illuminate\Http\Request');
$file = $request->file('some_file');
好吧,这是愚蠢的,但也许其他人将来也会有同样的问题,并发现这一点
我的问题是我忘了将enctype=“multipart/form data”
添加到
元素,因此实际上发送到服务器的只是文件的基本名称。这就解释了为什么我在规则中只看到了这些
添加正确的enctype属性后,我得到了illighted\Http\UploadedFile
的一个实例,作为规则中的$value
request()->file($value)
在passes()
方法中返回null。@LarsNyström使用输入元素名,而不是同样返回null
的$value
。@LarsNyström请显示dd(request()->all())的展开结果代码>哦,对不起,我刚刚意识到我忘记在我的表单中添加enctype=“multipart/form data”
。。。现在我觉得自己很愚蠢。添加后,$value
实际上是illumb\Http\UploadedFile
的一个实例,我可以从中获得绝对路径。
$request = app('Illuminate\Http\Request');
$file = $request->file('some_file');