почему AjaxValidation не работает в форме обновления в yii2? - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть форма, которая имеет текстовое поле paperDOI textInput. он должен быть уникальным

<?php $form = ActiveForm::begin(['id' => $model->formName(),'enableAjaxValidation'=>true,'options' => ['enctype' => 'multipart/form-data']]); ?>
<?= $form->field($model->paper, 'paperDOI')->textInput(['maxlength' => true])->label(false) ?>
<?php ActiveForm::end(); ?>

и в правилах бумажной модели есть правило типа [['paperDOI'], 'unique']

и в моем контроллере:

 use yii\widgets\ActiveForm;
 public function actionCreate(){
    $model = new PaperMagazine();
    $paper = new Paper();
    $requestPost = Yii::$app->request->post();
    $model->populateRelation('paper', $paper);
    if (Yii::$app->request->isAjax && $model->paper->load($requestPost) && $model->load($requestPost)) {
            Yii::$app->response->format=Response::FORMAT_JSON;
            return ActiveForm::validate($model->paper);
       }
    if ($model->paper->load($requestPost) && $model->load($requestPost))
       {some code for save model...}
}

и actioUpdate:

 public function actionUpdate($id)
    {
        $requestPost = Yii::$app->request->post();
        $model = PaperMagazine::findOne($id);
        if (Yii::$app->request->isAjax && $model->paper->load($requestPost) && $model->load($requestPost)) {
            Yii::$app->response->format=Response::FORMAT_JSON;
            return ActiveForm::validate($model->paper);
        }
        if ($model->load($requestPost) && $model->paper->load($requestPost)) {some codes for save ...}

в действии создания это работает хорошо и показывает ошибку проверки, если paperDOI уже существует. но в форме обновления это не работает и происходит странное событие. когда я вхожу в paperDOI, который существует в БД в первый раз, он показывает правильную ошибку проверки но только один раз работает хорошо, когда я ввожу другой код и покидаю textInput, он выдает ошибку:

{"name":"PHP Notice","message":"Array to string conversion","code":8,"type":"yii\\base\\ErrorException","file":"D:\\Project Files\\Git\\SAME\\vendor\\yiisoft\\yii2\\db\\ColumnSchema.php","line":157,"stack-trace":["#0 D:\\Project Files\\Git\\SAME\\vendor\\yiisoft\\yii2\\db\\QueryBuilder.php(375): yii\\db\\mysql\\ColumnSchema->dbTypecast()","#1 D:\\Project Files\\Git\\SAME\\vendor\\yiisoft\\yii2\\db\\mysql\\QueryBuilder.php(249): yii\\db\\QueryBuilder->prepareInsertValues()","#2 D:\\Project Files\\Git\\SAME\\vendor\\yiisoft\\yii2\\db\\QueryBuilder.php(345): yii\\db\\mysql\\QueryBuilder->prepareInsertValues()","#3 D:\\Project Files\\Git\\SAME\\vendor\\yiisoft\\yii2\\db\\Command.php(470): yii\\db\\QueryBuilder->insert()","#4 D:\\Project Files\\Git\\SAME\\vendor\\yiisoft\\yii2\\db\\Schema.php(432): yii\\db\\Command->insert()","#5 D:\\Project Files\\Git\\SAME\\vendor\\yiisoft\\yii2\\db\\ActiveRecord.php(549): yii\\db\\Schema->insert()","#6 D:\\Project Files\\Git\\SAME\\vendor\\yiisoft\\yii2\\db\\ActiveRecord.php(515): yii\\db\\ActiveRecord->insertInternal()","#7 D:\\Project Files\\Git\\SAME\\vendor\\yiisoft\\yii2\\db\\BaseActiveRecord.php(670): yii\\db\\ActiveRecord->insert()","#8 D:\\Project Files\\Git\\SAME\\backend\\models\\Log.php(37): yii\\db\\BaseActiveRecord->save()","#9 D:\\Project Files\\Git\\SAME\\common\\OOP\\CommonController.php(124): backend\\models\\Log::Log()","#10 D:\\Project Files\\Git\\SAME\\vendor\\yiisoft\\yii2\\base\\Controller.php(159): common\\OOP\\CommonController->afterAction()","#11 D:\\Project Files\\Git\\SAME\\vendor\\yiisoft\\yii2\\base\\Module.php(528): yii\\base\\Controller->runAction()","#12 D:\\Project Files\\Git\\SAME\\vendor\\yiisoft\\yii2\\web\\Application.php(103): yii\\base\\Module->runAction()","#13 D:\\Project Files\\Git\\SAME\\vendor\\yiisoft\\yii2\\base\\Application.php(386): yii\\web\\Application->handleRequest()","#14 D:\\Project Files\\Git\\SAME\\backend\\web\\index.php(17): yii\\base\\Application->run()","#15 {main}"]}

что это? почему он хорошо работает на actionCreate, а не на actionUpdate? в чем проблема?

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