验证失败,即使它具有值 Maatwebsite Laravel 验证

Validation fails even if it has values Maatwebsite Laravel Validation

我目前在处理导入 CSV 文件并验证它时使用 Maatwebsite 集合,因为我很难使用 ToModel 方式。以下是我验证 csv 字段的方法:

class ImportRooms implements ToCollection, WithStartRow
{

    public function collection(Collection $rows)
    {
        foreach($rows as $row){
            \Validator::make($row->toArray(), [
                'name' => $row[0],
                'room_code' => $row[1],
                'user_name' => $row[2],
                'email' => $row[3],
                'password' => $row[4],
                'remarks' => $row[5],

                'name' =>  ['required', 'max:50'],
                'room_code' =>  ['required', 'max:50'],
                'user_name' =>  ['required', 'max:255'],
                'email' =>  ['required', 'email', 'max:255','nullable'],
                'password' =>  ['min:8','max:255','nullable'],
                'remarks' =>  ['max:500'],

            ])->validate();
        }
    }

    /**
    * @return int
    */
    public function startRow(): int
    {
        return 2;
    }
}

这是我的样本数据。

Illuminate\Support\Collection {#565 ▼
    #items: array:6 [▼
        0 => "Room name"
        1 => "Room101"
        2 => "user"
        3 => "fmacejkovic@example.org"
        4 => "password"
        5 => "remarks"
    ]
}

我现在的问题是,即使这些值都正确有效,它仍然无法通过验证。我试图分配给一个特定的变量,这样当它失败时,它将 return 行名而不是​​行号。即使我使用行号,它仍然失败。

您对 Validator::make() 使用了错误的语法,请使用:

class ImportRooms implements ToCollection, WithStartRow
    {

        public function collection(Collection $rows)
        {
            foreach($rows as $row){
                $row = $row->toArray();
                $data = [
                    'name' => $row[0],
                    'room_code' => $row[1],
                    'user_name' => $row[2],
                    'email' => $row[3],
                    'password' => $row[4],
                    'remarks' => $row[5],
                    ];
                \Validator::make($data, [
                    'name' =>  ['required', 'max:50'],
                    'room_code' =>  ['required', 'max:50'],
                    'user_name' =>  ['required', 'max:255'],
                    'email' =>  ['required', 'email', 'max:255','nullable'],
                    'password' =>  ['min:8','max:255','nullable'],
                    'remarks' =>  ['max:500'],

                ])->validate();
            }
        }

        /**
        * @return int
        */
        public function startRow(): int
        {
            return 2;
        }
    }

参考https://laravel.com/docs/5.8/validation#automatic-redirection

//Convert row data into array and store it in a variable.
$row = $row->toArray();
//Set data to be validated.
$data = [
    'name'      => $row[0],
    'room_code' => $row[1],
    'user_name' => $row[2],
    'email'     => $row[3],
    'password'  => $row[4],
    'remarks'   => $row[5]
];
//Set conditions for validation.
$conditions = [
    'name'      =>  'required|max:50',
    'room_code' =>  'required|max:50',
    'user_name' =>  'required|max:255',
    'email'     =>  'required|email|max:255|nullable',
    'password'  =>  'min:8|max:255|nullable',
    'remarks'   =>  'max:500'

];
//Validate the excel data.
\Validator::make($data, $conditions)->validate();