Есть такая модель:
namespace app\models;
use yii\base\Model;
class AjaxTest extends Model
{
public $text;
}
Есть действие контроллера, которое формирунет страницу с формой:
public function actionIndex()
{
return $this->render('index',['model'=> new AjaxTest()]);
}
Сама форма:
<?php
$form = \yii\widgets\ActiveForm::begin([
'id' => 'form',
'action' => '/man/test',
'enableAjaxValidation' => false,
'validationUrl' => 'my-validation-url'
]);
?>
<?= $form->field($model, 'text')->textInput(); ?>
<?= Html::submitButton('Save'); ?>
<?php $form->end(); ?>
Есть отправка формы через AJAX на JS:
$(document).ready(function() {
$('#form').on('beforeSubmit', function () {
var $yiiform = $(this);
// отправляем данные на сервер
$.ajax({
type: $yiiform.attr('method'),
url: $yiiform.attr('action'),
data: $yiiform.serializeArray()
}
)
.done(function(data) {
if(data.success) {
// данные сохранены
} else {
// сервер вернул ошибку и не сохранил наши данные
}
})
.fail(function () {
// не удалось выполнить запрос к серверу
})
return false; // отменяем отправку данных формы
})
})
Есть действие контроллера, которое принимает данные формы по AJAX^
public function actionTest()
{
$model = new AjaxTest();
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
if (Yii::$app->request->isAjax) {
$data = Yii::$app->request->post();
if ($model->load($data)) {
return [
"data" => $model->text,
"error" => null
];
} else {
return [
"data" => null,
"error" => "error1"
];
}
}else{
return [
"data" => null,
"error" => "error2"
];
}
}
Данные приходят:
{ "_csrf":"BvO32H7Bg1m8swSJQgMvbUQt3SMMXHMmJzgp8sSjXlN1nYaJOLnNKfr0Xrp0dxwjMFrofGspP3VWYHqErus9IA==", "AjaxTest":{"text":"123"} }
Вопрос
Если всё отправляется и приходит, то почему $model->text
всегда null
(хотя должен быть "123")? Что я делаю не так?
Как оказалось, ларчик просто открывался. Нужно было прописать rules
для единственного поля модели, чтобы всё заработало.
class AjaxTest extends Model
{
public $text;
public function rules()
{
return [
[
[
'text'
],
'string'
]
];
}
}
P.S. Спасибо fedornabilkin за подсказку.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Пишу свой компонент для вывода номеров телефонов, адресов и разных ссылок! То-есть всего у меня добавлено 3 поля
Мне нужно получить ссылку на аватарку пользователя ,через ответ jsonОтвет выглядит примерно так
Дано два списка строками с целыми числами через пробелНеобходимо вывести уникальные элементы(1 раз - 1 элемент), которые присутствуют и в первом...