#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? Спасибо