Данные проверки Ajax в модальном окне yii2
У меня есть модальное окно в моем главном окне
<?php
Modal::begin([
'header' => 'Log in or register or restore password',
'id' => 'modal',
'size' => 'modal-lg',
]);
echo "<div id='modalContent'></div>";
Modal::end();
?>
И у меня есть дополнительный вид, чтобы отобразить его в моем модальном окне в главном виде
<div class="row">
<div class="col-lg-5">
<?php $form = ActiveForm::begin(['id' => 'login-form']); ?>
<?= $form->field($login_model, 'username')->textInput() ?>
<?= $form->field($login_model, 'password')->passwordInput() ?>
<div class="form-group">
<?= Html::submitButton('Login', ['class' => 'btn btn-primary', 'name' => 'login-button', 'data-pjax' => 1]) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
</div>
Используя это
\frontend\assets\OverviewAsset::register($this);
Я зарегистрировал свой код JS
$(document).ready(function() {
$(function() {
var id_user_tag = 'id_user';
$(document).on('click','[' + id_user_tag + ']', function () {
var id_user = this.getAttribute(id_user_tag);
$.ajax({
url: '/client/is-full-page-accessed',
type: 'post',
data: {
id_user: id_user
},
success: function (response) {
if(response) {
window.location = 'full-page?id_user=' + id_user;
} else {
$.get(
'/client/log-in',
function (data) {
$('#modal').modal('show')
.find('#modalContent')
.html(data);
}
);
}
}
});
});
});});
А у меня контроллер
public function actionLogIn()
{
if (!\Yii::$app->user->isGuest) {
return $this->goHome();
}
$password_reset_request_model = new PasswordResetRequestForm();
if ($password_reset_request_model->load(Yii::$app->request->post()) && $password_reset_request_model->validate()) {
if ($password_reset_request_model->sendEmail()) {
Yii::$app->session->setFlash('success', 'Check your email for further instructions.');
return $this->goHome();
} else {
Yii::$app->session->setFlash('error', 'Sorry, we are unable to reset password for email provided.');
}
}
$login_model = new LoginForm();
if ($login_model->load(Yii::$app->request->post()) && $login_model->login()) {
return $this->goBack();
} else {
$model['login'] = $login_model;
return $this->renderAjax('log-in', ['login_model' => $login_model, 'password_reset_request_model' => $password_reset_request_model]);
}
}
Итак, наконец то, что у меня есть
Я нажимаю на какую-то кнопку, и если я не вошел в систему - я должен открыть мое модальное окно и получить дополнительный вид, который я рендерил в контроллере. Это работает, но когда я помещаю неправильные данные в модальное окно - моя страница переходит к этому /client/log-in
URL. Но я хочу отобразить мои неверные данные в модальном окне.
Как это сделать?
Дайте мне знать, нужна ли какая-либо другая информация.
2 ответа
Прости еще раз. Моя вина. Я просто должен закрыть свою форму, чтобы
<?php yii\widgets\Pjax::begin(['id' => 'log-in']) ?>
<?php $form = ActiveForm::begin(['id' => 'login-form', 'options' => ['data-pjax' => true]]); ?>
<?php yii\widgets\Pjax::end() ?>
И это все, что я сделал. Документация, документация и еще раз документация!
если вы используете kartiks DetailView и не можете понять, почему атрибут data-pjax не применяется. Вот правильный синтаксис для этого:
'formOptions' => ['options' => ['data-pjax' => true]],