2015-11-24 3 views
2

Я хочу сделать chekbox для использования. Я нашел интересное решение, заданное webcoder How to validate a checkbox in ZF2zf2 Отказ рендеринга по formInput не удается

Дело в том, что у меня сложная структура HTML, поэтому я не могу использовать ни formRow, ни formCollection для рендеринга. Я пытаюсь использовать следующий подход вместо:

$agreement = $form->get('agreement'); 
echo $this->formInput($agreement); 
echo $this->formElementErrors($agreement); 

И я получаю пустое значение:

<input type="checkbox" name="agreement" class="checkbox" value=""> 

Я также попытался добавить скрытое поле, но моя попытка также не удалась:

$agreement = $form->get('agreement'); 
echo $this->formHidden($agreement); 
echo $this->formInput($agreement); 
echo $this->formElementErrors($agreement); 

HTML, является:

<input type="hidden" name="agreement" class="checkbox" value=""> 
<input type="checkbox" name="agreement" class="checkbox" value=""> 

В результате я получаю ошибки «Значение требуется и не может быть пустым»

Может быть, кто-нибудь может дать мне подсказку, как правильно снять флажок в моем случае?

код моего inputFilter:

<?php 
namespace Auth\Form; 

use Zend\InputFilter\InputFilter; 
use Zend\Validator\Digits; 

class UserFormFilter extends InputFilter { 

    public function __construct() { 

     $this->add(array(
      'name' => 'agreement', 
      'validators' => array(
       array(
        'name' => 'Digits', 
        'break_chain_on_failure' => true, 
        'options' => array(
         'messages' => array (
          Digits::NOT_DIGITS => 'You must agree to the terms of use.', 
         ) 
        ), 
       ), 

      ), 
     )); 
    } 
} 
?> 
+0

Можете ли вы добавить код вашего InputFilter? – StoryTeller

+0

добавил, я использовал тот, который указан в ссылке http://stackoverflow.com/questions/13459581/how-to-validate-a-checkbox-in-zf2 – Sabine

+1

Возможно, стоит прочитать документы об использовании 'formCheckbox 'рассмотрите помощника и используйте это вместо этого, если' formInput' -> http://framework.zend.com/manual/current/en/modules/zend.form.elements.html#checkbox – Crisp

ответ

0

Проверьте это, пожалуйста.

$this->add(array(
     'type' => 'Zend\Form\Element\Checkbox', 
     'name' => 'agreeterms', 
     'options' => array(
      'label' => 'I agree to all terms and conditions', 
      'use_hidden_element' => true, 
      'checked_value' => 1, 
      'unchecked_value' => 'no' 
     ), 
     'attributes' => array(//the difference is here 
      'value' => 'yes' 
     ) 
    )); 

если добавить атрибуты массива он должен работать.

Смежные вопросы