2015-05-21 3 views
0
$inputFilter->add(array(
    'name'  => 'seatingCapacity', 
    'required' => TRUE, 
    'filters' => array(
     array('name' => 'Int'), 
    ), 
)); 

В моей доктрине доктрины у меня есть метод getInputFilter, который я использую для проверки формы. Вышеприведенный фрагмент кода для одного из входных элементов. Моя проблема: required => true не работает, даже если я отправлю пустую форму.zf2 doctrine form int required not working

После исследования я узнал, что Int фильтр преобразует пустой вход в 0 и подает его, и именно поэтому required валидатор не работает. Мне просто нужны причины, почему это может не работать.

Для справки, где я искал

Zend Framework 2 - Integer Form Validation

, где он предлагает использовать Between валидатор

$inputFilter->add($factory->createInput(array(
     'name'  => 'zip', 
     'required' => true, 
     'filters' => array(
      array('name' => 'Int'), 
     ), 
     'validators' => array(
      array(
       'name' => 'Between', 
       'options' => array(
        'min' => 1, 
        'max' => 1000, 
       ) 
      ) 
     ) 
    ) 
)); 

Я хочу знать, почему я должен использовать Between и почему required не удается.

+0

Похоже, вы ответили на свой вопрос. «... и поэтому« обязательный »валидатор не работает» – srayner

+0

Я не тестировал вещь (так что это скорее комментарий, чем ответ), но вы не можете использовать (сочетание) значение [to null ] (http://framework.zend.com/manual/current/en/modules/zend.filter.set.html#tonull), [is int] (http://framework.zend.com/manual/current /en/modules/zend.i18n.validator.int.html) валидатор и [не пусто] (http://framework.zend.com/manual/current/en/modules/zend.validator.not-empty.html) валидатор? –

ответ

0

Вы должны использовать только валидатор Between для проверки того, установлено ли заданное значение между min и max. Это не имеет никакого отношения к решению вашего пустого значения до 0.

Вы должны задать себе 2 вопроса:

  • ли 0 допустимое значение?
  • Должен ли я автоматически лить null пустую строку ('') и другие пустые значения для этого 0 или нет?

Если вы действительно хотите, чтобы предотвратить, что Int фильтр устанавливает пустое значение 0, может быть, тогда вы не должны использовать этот фильтр вообще тогда?

Вы можете вместо этого добавить an IsInt validator, чтобы проверить, является ли заданное целое. Ваша настройка required => true будет работать так, как ожидалось, и проверка не сработает на любом другом (не целочисленном) вводе, а также на нулевых пустых строках и т. Д.

+0

Спасибо, Уилт. Внимательно оцените ваши усилия. На самом деле я не получал сообщение об ошибке «Значение», в то время как я должен был беспокоиться, вводятся ли цифры или нет. И с течением времени я обнаружил, что 0 должно быть действительным значением. Поэтому не имеет значения, пуст ли вход, но он не должен содержать ничего, кроме цифр. И я встретился с моим требованием, как объяснено. – netmantle

0

Спасибо за ваше время, энергия & усилием. На самом деле я решил проблему.

У меня был скопированный код, который я должен был быть осторожным при этом.

То, что я узнал, там нет такого фильтра под названием «Int» и на самом деле это «Цифры»

$inputFilter->add(array(
'name'  => 'seatingCapacity', 
'required' => TRUE, 
'filters' => array(
    array('name' => 'Int'), 
), 

));

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

$inputFilter->add(array(
'name'  => 'seatingCapacity', 
'required' => TRUE, 
'filters' => array(
    array('name' => 'Digits'), 
), 

));

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

Счастливое кодирование