Не могу разобраться с валидацией формы при отправке ajax. У меня есть виджет с формой, во вьюхе которого находится ActiveForm.
//Это виджет формы
<?php
namespace app\components;
use yii\base\Widget;
use yii\helpers\Html;
use app\models\AppForm;
use app\models\ApplicationDAO;
use Yii;
class ApplicationForm extends Widget{
public function run(){
$model = new AppForm();
if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
$model->id = Yii::$app->user->id;// добавляем id
$applicationDAO = new ApplicationDAO();
if($applicationDAO->create($model)) {
return '1';
} else {
Yii::$app->response->format = Response::FORMAT_JSON;
return ActiveForm::validate($model);
}
}
return $this->render('apform');
}
}
Это вьюха виджета (на деле полей больше)
<?php
use yii\helpers\Html;
use yii\helpers\Url;
use yii\widgets\ActiveForm;
use yii\widgets\MaskedInput;
?>
<?php $form = ActiveForm::begin([
'id' => 'create_application',
//'validationUrl' => Url::toRoute(['service/verify']),
'enableAjaxValidation' => true,
]); ?>
<?= $form->field($model, 'name') ?>
<?= $form->field($model, 'phone') ?>
<div class="form-group">
<?= Html::submitButton('Отправить', ['class' => 'button_form']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
Если это важно, то код ajax:
$('#create_application').on('submit', function(event){
event.preventDefault();
var data = $(this).serialize();
var action = $(this).attr("action");
$.ajax({
url : action,
type: "POST",
data : data,
success: function(res) {
},
error: function (req, text, error) {
alert('Ошибочка! ' + text + ' : ' + error);
},
});
});
В БД все сохраняется идеально, но валидация формы не проходит. Если отправлять пустые данные, в консоли выводит ошибку, типо нельзя сохранять пустые данные в бд, ну он должен же сначала проверять на стороне клиента что форма пустая и нужно заполнить. Не работает в общем. Буду благодарна любой помощи.
Мда, я просто случайно подключила два файла jQuery, не думая о том, что в Yii2 он уже есть, и в итоге валидация никак не могла сработать.
Если вы хотите проверять на стороне клиента, то сделайте проверку перед ajax запросом на jQuery или javascript
('#create_application').on('submit', function(event){
event.preventDefault();
var data = $(this).serialize();
var action = $(this).attr("action");
if ($('input[name=name]')){
alert('field name with error')
}
else{
$.ajax({
...
)};
}
)};
если проверять на js не хотите то укажите в модели что если поле заполнено то ответ 1 иначе ошибка. Это для общего , что бы каждое поле не прописовать
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть API которое выдает список пользователей с N количеством параметров у пользователя(имя, телефон
Всем привет! Заголовок запроса может быть не понятен, но я сейчас попробую объяснитьНа сервере есть тексты, как эти:
как можно добавить ко всем товарам сразу тег, я пробовал вот так присваивать, но не вышло