Laravel表单请求的hasFile()方法无法正常工作

4

我正在使用Laravel表单请求验证一组输入。 我需要使用循环检查文件进行自定义验证。 但是它显示此错误。

Error
Call to undefined method Symfony\Component\HttpFoundation\ParameterBag::hasFile()

我的HTML输入(createUser.blade.php)

<input type="text"  name="users[0][name]">
<input type="number"  name="users[0][age]">
<input type="file"  name="users[0][profile_pic]">

<input type="text"  name="users[1][name]">
<input type="number"  name="users[1][age]">
<input type="file"  name="users[1][profile_pic]">

我的表单请求(CreateUserFormRequest.php)

dd($this->request->hasFile('users');

1
什么是 Laravel 版本? - Daniel W.
1
请展示您的控制器,您在哪里使用了 dd(...) 这行代码?请提供上下文,您所在的类是什么? - Daniel W.
Laravel 7.2 版本 - camille
这是控制器之前,在表单请求中。 - camille
1
请查看Laravel 7.x FormRequest文档:有一个hasFile()方法。如果$this->hasFile()无法运行,则说明您错了类。 - Daniel W.
1个回答

5

FormRequest类内,如果你想检查请求是否有值,可以像下面这样做:

$this->has('users')

如果你想检查请求中是否有文件,则

 $this->hasFile('logo')

也要确保输入类型为文件

要检查请求中的所有数据,然后

 $this->all()

对于文件,请确保输入类型为文件

<input type="file"  name="users[1][profile_pic]">

确保表单标签中的enctype="multipart/form-data"

<form method="POST" action="" enctype="multipart/form-data">

Updated
<form method="POST" action="{{route("testing")}}" enctype="multipart/form-data">
@csrf
    <input type="number"  name="users[0][name]">
    <input type="number"  name="users[0][age]">
    <input type="file"  name="users[0][profile_pic]">

    <input type="number"  name="users[1][name]">
    <input type="number"  name="users[1][age]">
    <input type="file"  name="users[1][profile_pic]">
<button type="submit">Submit</button>

</form>

在表单请求中

 foreach ($this->users as $key=>$value){
            if($value['profile_pic']!=null){
                dump($value['profile_pic']);
            }
        }

如果您正在寻找文件验证,可以执行以下操作:

public function rules()
    {
        return [
            'users.*.profile_pic'=>'required|file'
        ];
    }

而在你看来

   <input type="file"  name="users[0][profile_pic]">
    {{ $errors->first('users.0.profile_pic') }}

    <input type="file"  name="users[1][profile_pic]">
    {{ $errors->first('users.1.profile_pic') }}

$this->hasFile('logo')。这会在表单请求中返回一个错误,"Call to undefined method Symfony\Component\HttpFoundation\ParameterBag::hasFile()"。 - camille
抱歉,这是我的错误。我进行了编辑,即使我添加了那样的内容,它仍然返回未定义方法错误。 - camille
hasFile() 不是 Symfony ParameterBag 的一部分,而是 Laravel Request 对象的一部分。你的上下文($this)是不同的。 - Daniel W.
1
@camille 更新的帖子,不确定为什么您需要在FormRequest中循环检查hasfile。相反,您可以添加数组验证。 - John Lobo
谢谢。现在我终于可以在FormRequest中获取文件了。我正在执行一个自定义验证函数,需要检查文件是否存在以及其他一些参数值。 - camille
1
非常重要,请确保在表单标签中使用 enctype="multipart/form-data"。 - vins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接