Как привязать форму для вывода ошибок валидации при загрузке из файла в БД

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
svil
Сообщения: 560
Зарегистрирован: 2018.02.12, 22:41

Как привязать форму для вывода ошибок валидации при загрузке из файла в БД

Сообщение svil » 2019.11.12, 13:29

Контроллер

Код: Выделить всё

 public function importExcel($inputFile)
    {
        $model = new ClientForm(['scenario' => 'insert']);
        if ($model->load(Yii::$app->request->post()) && $model->importExcel($inputFile)) {
            Yii::$app->session->setFlash('success', 'Регистрация прошла успешно');
            return $this->redirect(['index']);
        }
        }
Метод модели, отвечающий за загрузку

Код: Выделить всё

public function importExcel($inputFile)
    {
     
            $inputFileType = IOFactory::identify($inputFile);
            $objReader = IOFactory::createReader($inputFileType);
            $objPHPExcel = $objReader->load($inputFile);

            $sheet = $objPHPExcel->getSheet(0);
            $highestRow = $sheet->getHighestRow();
            $highestColumn = $sheet->getHighestColumn();

            for ($rowNumber = 2; $rowNumber <= $highestRow; $rowNumber++) {
                $rowData = $sheet->rangeToArray(
                    'A' . $rowNumber . ':' . $highestColumn . $rowNumber,
                    NULL,
                    TRUE,
                    FALSE
                );

                $surname = $rowData[0][0];
                $name = $rowData[0][1];
                $secondName = $rowData[0][2];
                $phone = $rowData[0][3];
                $email = $rowData[0][4];
                $type = $rowData[0][5];
                $sex = $rowData[0][6];
                $house = $rowData[0][7];
                $entrance = $rowData[0][8];
                $room = $rowData[0][9];

                $existingUser = \backend\models\User::find()->where(['phone' => $phone])->one();
                if (empty($existingUser)) {

                    $user = new User();

                    $user->surname = $surname;

                    $user->name = $name;
                    $user->second_name = $secondName;
                    $user->phone = (string)$phone;
                    $user->email = $email;
                    $user->type = $type;
                    $user->sex = $sex;
                    $user->status = User::STATUS_ACTIVE;
                    $user->generateAuthKey();
                    $user->setPassword(Yii::$app->security->generateRandomString(6));
                    $user->created_at = date('Y-m-d H:i:s');
                    $user->updated_at = date('Y-m-d H:i:s');
                    $user->save();

                    $user->role = User::ROLE_CUSTOMER;

                    $houseExists = House::find()->where(['id' => $house])->exists();
                    if (isset($house) && !empty($houseExists)) {
                        $address['house'] = (int)$house;
                        $address['entrance'] = (int)$entrance;
                        $address['room'] = (string)$room;

                        Client::saveAddress($user->id, $address);


                    }

                }

            }
        return true;

        }
        
В модели или в контроллере надо прописать

Код: Выделить всё

if ($this->validate()) {
...}
else
{
 return $this->render('_form', [
                'model' => $user,
               
            ]);
}
Как сделать?

Аватара пользователя
svil
Сообщения: 560
Зарегистрирован: 2018.02.12, 22:41

Re: Как привязать форму для вывода ошибок валидации при загрузке из файла в БД

Сообщение svil » 2019.11.12, 13:30

Рендеринг в разных местах отличается https://yiiframework.com.ua/ru/doc/guid ... ure-views/
Вот так не работает в модели, валидация у меня в модели проверяется

Код: Выделить всё

  else {
                     echo \Yii::$app->view->renderFile('@app/views/client/__form.php');

                }

yiiliveext
Сообщения: 499
Зарегистрирован: 2019.08.13, 01:49

Re: Как привязать форму для вывода ошибок валидации при загрузке из файла в БД

Сообщение yiiliveext » 2019.11.12, 16:08

Рендерить должен контроллер. Возвращайте модель user из метода importExcel() и проверяйте $user->hasErrors()

Код: Выделить всё

if ($model->load(Yii::$app->request->post()) && $user = $model->importExcel($inputFile) && !$user->hasErrors()) {
дальше рендерите в конроллере, если есть ошибки

Ответить