@hollanditkzn

Как понять что не так с валидацией?

Я пробую отредактировать запись, только запись не редактируется постоянно переходит в данную страницу с формой. Пробовал различными способами $model->errors тут пустой массив хотя в var_dump($model->validate()) пишет boolen false. Только я не могу определить где именно не срабатывает валидация и какая именно ошибка?
Если весь код показывать с action
public function actionUpdate($id)
    {
        $model = $this->findModel($id);//Модель заказа
        $client = new Client();//Модель  клиентов
        $client->scenario = Client::SCENARIO_CREATE;
        $user = User::findOne(['id' => User::USER_DISAYNER]);
        $tag = new ZakazTag();// Модель тегов
        $telegram = new Telegram();

        if ($model->load(Yii::$app->request->post()) && $client->load(Yii::$app->request->post())) {
            $model->id_client = ArrayHelper::getValue(Yii::$app->request->post('Client'), 'id');//берет только данные клиента через select 2. Не помню зачем так сделал скорее всего надо поменять этот момент. Возмодер что что клиента это отдельная модель и может пользователь в этом же окне создать
/** Сохранение файла */
            $model->file = UploadedFile::getInstance($model, 'file');
            if (isset($model->file)) {
                $model->upload('update', $id);
            }
            $model->changedUnread(); // логика прописано в модели прочитано или нет при редактирование
            var_dump($model->validate());// выводит false
/** Если клиент и заказ прошли валидацию то идет сохраннение данных*/
            if ($model->validate() && $client->validate()){
                if (!$model->save()) {
                    print_r($model->getErrors());
                } else {
/** Также сохраняет теги */
                    $arr = ArrayHelper::map($model->tags, 'id', 'id');
                    $post = Yii::$app->request->post('Zakaz')['tags_array'];
                    if ($post){
                        $tag->getZakazForm($post, $arr, $id);
                    }
/** Идет  отправка уведомление через телеграм */
                    if($model->status == Zakaz::STATUS_DISAIN && $user->telegram_chat_id){
                        $telegram->message(User::USER_DISAYNER, 'Назначен заказ '.$model->prefics.' '.$model->description);
                    }
                    Yii::$app->session->addFlash('update', 'Успешно отредактирован заказ');
                }
/** Смотря какая роль и именно туда идет редирект */
                if (Yii::$app->user->can('shop')) {
                    return $this->redirect(['shop']);
                } elseif (Yii::$app->user->can('admin')) {
                    return $this->redirect(['admin']);
                }
            }
        }
return $this->render('update', [
            'model' => $model,
            'client' => $client,
        ]);

Код большой я хочу сделать рефакторинг и сократить код, но прижде всего мне нужно понять почему не редактируются данные
  • Вопрос задан
  • 65 просмотров
Решения вопроса 1
iiifx
@iiifx
PHP, OOP, SOLID, Yii2, Composer, PHPStorm
Вместо
var_dump($model->validate());
поставьте
var_dump($model->validate());
var_dump($model->getErrors());
var_dump($client->validate());
var_dump($client->getErrors());

и увидите все ошибки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы