Подтвердите выбор хотя бы одного флажка с помощью правил модели. Yii2

Я использую следующий код, чтобы проверить, что у меня установлен хотя бы один флажок, но у меня есть проблема.

JS

$("#btn_enviar").click(function() {

    var invalido = 0;
    $(".item").each(function( ) {
       if ($(this).find("select").val() == 1) {
         var cont = 0;
         $(this).find("input:checkbox, input:radio").each(function() {

              if($(this).is(":checked")){
                  cont++;
              }

         });
       }
       if(cont < 1){
           $(this).find(".text-error-check").show();
           $(this).find(".dynamicform_inner").css({
              "border": "2px solid #dd4b39",
              "background-color": "white"
            });

            invalido = 1;
        }
    });

}); ');

Например, если я сначала отправляю данные без установленного флажка, они работают для меня, но игнорируют другие проверки правил, и я получаю только ошибку выбора, если я затем выбираю флажок и снова отправляю данные, проверки правила работы модели.

Сначала отправить

введите здесь описание изображения

Вторая отправка

введите здесь описание изображения

Я пытался сделать это с помощью правил в моей модели, но безуспешно. Как я могу включить его вместе с другими правилами модели?

PD: Я использую динамическую форму для создания флажков и полей ввода.


person Miguel Angel    schedule 12.01.2021    source источник
comment
Взгляните сюда: stackoverflow.com/questions/41209265/, похоже, это похоже на вашу проблему.   -  person Serghei Leonenco    schedule 13.01.2021
comment
Отправьте запрос из браузера.   -  person Serghei Leonenco    schedule 15.01.2021


Ответы (1)


Я бы сделал это так:

Правила модели

public function rules()
    {
        return [
            // an inline validator defined as the model method checkSelection()
            ['checkboxes', 'checkSelection'],
        ...
        ];
    }

public function checkSelection($attribute, $params, $validator)
{
    $error = true;
    foreach ($this->checkboxes as $checkbox) {
        //if at least 1 checkbox is checked then we skip error.
        if ($checkbox) {
            $error = false;
        }
    }
    if ($error) {
        $this->addError('checkboxes', 'You must select at least one checkbox to continue');
    }
};
person Serghei Leonenco    schedule 13.01.2021
comment
Я пытался применить этот метод, но он не работал для меня. - person Miguel Angel; 14.01.2021
comment
Вы можете опубликовать свой ajax request в вопросе? - person Serghei Leonenco; 14.01.2021
comment
Опубликован ли jquery, который я использую, или какую часть вы имеете в виду? - person Miguel Angel; 15.01.2021