Редактируемый виджет Yii2 Kartik

#ajax #yii2

#ajax #yii2

Вопрос:

У меня проблема с редактируемым виджетом ввода текста в Kartik. Это повлияло на tema столбец в моей таблице. Проблема в том, что в моем инструменте разработчика Chrome он возвращает «Внутреннюю ошибку сервера» при обработке AJAX. Содержимое заголовка ответа такое: Content-Type: application/json; charset=UTF-8 но соединение остается close . Что-то не так с моим кодом? Примечание: начальным значением метки редактируемого является NOT SET (которое должно быть значением столбца «tema», полученного из моего $model->tema ). Название модели — Home .

Мой домашний контроллер :

   public function actionIndex()
  {
        $searchModel = new HomeSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        $model = new Home;
        // Check if there is an Editable ajax request
        if (isset($_POST['hasEditable'])) {

           // use Yii's response format to encode output as JSON
           Yii::$app->response->format = yiiwebResponse::FORMAT_JSON;

           $temaId=Yii::$app->request->post('editableKey');
           $query= Home::find()->where(['id'=> $temaId])->one();

           // read your posted model attributes
           if ($model->load($_POST)) {
               // read or convert your posted information
               $value = $query->tema;
               $value->save();
               // return JSON encoded output in the below format
               return ['output'=>$value, 'message'=>''];

               // alternatively you can return a validation error
               // return ['output'=>'', 'message'=>'Validation error'];
           }  else {
               // else if nothing to do always return an empty JSON encoded output
               return ['output'=>'', 'message'=>''];
            }

        };


   return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
            'model'=>$model,
           ]);

    }


  

Файл просмотра

 use kartikeditableEditable;

<?php 

    echo Editable::widget([
       'model' => $model, 
       'attribute' => 'tema',
       'type' => 'post',
       'value'=>$model->tema,
       'header'=>'tema', 
       'size'=> 'lg',
       'inputType' => Editable::INPUT_TEXT,
       'editableValueOptions' => ['class' => 'text-success h3']
    ]);         
?>



  

Пожалуйста, помогите. Потратил на это два дня. Спасибо!

Комментарии:

1. Internal server error предназначен для серверной части и не имеет ничего общего с запросом javascript или браузером, возможно, вам придется просмотреть журналы сервера для устранения фактической проблемы

2. @MuhammadOmerAslam Ты прав. Я получаю «попытку получить свойство не-объекта» в своем журнале, и я изменил свой запрос с one на all и зациклил результат. Но возникает новая проблема, редактируемое входное значение меняется, но оно не сохраняется в базе данных. Что-то не так?

3. когда вы сохраняете его, что он показывает в консоли, должна быть какая-то ошибка, которую он выдает, также проверьте параметры, которые вы публикуете, если они правильные

4. @MuhammadOmerAslam Я получил ответ : Call to a member function load() on null на эту строку : if ($model->load($_POST)) . Он не должен был быть нулевым, поскольку у меня есть результат в моей базе данных. Как получить значение редактируемого поля в Kartik Editable? Ранее в моем коде я использовал ` $ temaId= Yii::$app-> request-> post (‘editableKey’);` но я думаю, что свойство «editableKey» существует только в виджете сетки Kartik, а не в виджете ввода редактируемого текста Kartik. В необработанном PHP мы можем просто получить значение с помощью get или post , просто используя $_POST['inputName']; значение по умолчанию input name для поля Kartik? Спасибо