Задать вопрос

Почему кнопка в yii2 отрабатывает только при втором клике?

Во View есть кнопка:
<?php $newForm = ActiveForm::begin(); ?>
    <div class="form-group">
        <?= Html::submitButton('Clear',['class'=>'btn btn-danger', 'name' => 'submit', 'value' => 'clear_unique_users_table']) ?>
    </div>
    <?php ActiveForm::end(); ?>


Обработчик в контроллере:
if(Yii::$app->request->post('submit')==='clear_unique_users_table'){
            if($uniqueUsersModel->clearTable()){
                return $this->refresh();
            }
        }

Действие происходит только после второго клика по кнопке.
Что я делаю не так?
Спасибо.
  • Вопрос задан
  • 1021 просмотр
Подписаться 1 Простой 4 комментария
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Надо искать js, который перехватывает клик по кнопке. Видимо Вы написали где-то обработчик клика с сильно общим селектором, типа:
$('button').on('click',finction(e){
e.preventDefault();
//some code
});

Или перехват отправки формы или еще что либо подобное. В любом случае, если запрос не идет, то дело в js, а не в php и уж тем более не в контролере.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Isolution666
@Isolution666
Full-Stack Developer
Здравствуйте.
--
Помоему проблема в двойных условиях, два if чудят. Я с подобной ситуацией сталкивался. Вам надо написать просто:
public function actionCleartable() 
{
   $ok = Yii::$app->request->post('submit');
   if(isset($ok)) {
      $uniqueUsersModel->clearTable();
      return $this->refresh();
   } else {
      return $this->render('cleartable');
   }
}

То есть, как в старые добрые девяностые, когда был php 4 ))) Мы писали, если введено имя кнопки submit, тогда происходит то или это, если не нажали, тогда ничего не происходит.
Этот же подход к делу подойдёт, если не хочешь использовать ActiveForm

<?= Html::beginForm(['order/update', 'id' => $id], 'post', ['enctype' => 'multipart/form-data']) ?>
<?= Html::submitButton('Отправить', ['class' => 'submit', 'name' => 'submit']) ?>
<?= Html::endForm() ?>


Можно сделать таких форм в на одной странице хоть с десяток, а сработает та, у которой name соответствует правилам, прописанным в контроллере, я так форму поиска впихнул в верхнее меню без привязки каждой странице к конкретной модели, и ошибок никаких нет. Главное, если будешь впихивать input, посмотри пример здесь
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы