Проверка не проходит, даже если она имеет значения Maatwebsite Laravel Validation - PullRequest
0 голосов
/ 31 января 2020

В настоящее время я использую коллекцию Maatwebsite при обработке импортируемого CSV-файла и его проверке, так как мне трудно использовать метод 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"
    ]
}

Теперь моя проблема в том, что, хотя все значения верны и действительны, это все еще терпит неудачу в проверке. Я пытаюсь присвоить указанную переменную c, чтобы в случае сбоя она возвращала имя строки вместо номера строки. Даже если я использую номер строки, он все равно не работает.

Ответы [ 2 ]

1 голос
/ 31 января 2020

См. https://laravel.com/docs/5.8/validation#automatic -направление

//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();
1 голос
/ 31 января 2020

Вы использовали неправильный синтаксис для 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;
        }
    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...