Элементы Zend и setRequired, setAllowEmpty, NotEmpty - PullRequest
2 голосов
/ 18 апреля 2011

Я проверяю массив данных на Zend Form, где требуются некоторые элементы, т.е. setRequired (true), а другие являются необязательными, т.е. setRequired (false).

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

Звучит довольно просто, но это поставило меня в тупик.В необязательных элементах я использовал setAllowEmpty (false), полагая, что Zend Validate будет принудительно проверять наличие соответствующего ключа в массиве и игнорировать его в противном случае.На самом деле происходит то, что Zend Validate показывает ошибку, даже если элемент не существует в массиве.

Есть идеи?

ОБНОВЛЕНИЕ:

Я провел несколько тестов свсе возможные комбинации настроек элемента и диапазон различных типов $ data [element].Файл журнала приведен ниже.

Я не уверен, что результаты совпадают с документацией, и я также подозреваю, что использование setAutoInsertNotEmptyValidator () влияет на работу простого валидатора Alnum.(См. Тесты 3, 4, 13 и 14 ниже).

Кто-то хочет проверить мой код?Я рад отправить его.

2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): РАЗРЕШЕНО: org / testform (kim@kimprince.com, admin) 2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7):
2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): Настройки элемента: 2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): ================= 2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): 1: setRequired () [по умолчанию:false] 2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): 2: setAllowEmpty () [по умолчанию: true] 2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): 3:setAutoInsertNotEmptyValidator () [по умолчанию: true] 2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): 4: добавить Alnum Validator 2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7):
2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): Условия данных: 2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): ================ 2011-04-19T13: 06: 59 + 10:00 DEBUG (7): A: data [element] = Foo 2011-04-19T13: 06: 59 + 10:00 DEBUG (7): B: данные [элемент] являются ПУСТОЙ 2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): C: данные [элемент] НЕ СУЩЕСТВУЮТ 2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА(7):
2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): # 1 === 2 === 3 === 4 ===== A ======= B ======= C ===== 2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7):
2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): 1 Т |T |T |T: pass FAIL FAIL
2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): Ошибка B: значение требуется и не может быть пустым 2011-04-19T13: 06: 59 + 10:00 ОТЛАДКА (7): Ошибка C: значение является обязательным и не может быть пустым 2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7):
2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): 2 Т |T |T |F: pass FAIL FAIL
2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): Ошибка B: значение требуется и не может быть пустым 2011-04-19T13: 06: 59 + 10:00 ОТЛАДКА (7): Ошибка C: значение является обязательным и не может быть пустым 2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7):
2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): 3 Т |T |F |T: pass FAIL FAIL
2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): Ошибка B: '' - пустая строка 2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): Ошибка C: указан неверный тип.Ожидается строка, целое число или число с плавающей запятой 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 4 T |T |F |F: pass pass pass
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 5 T |F |T |T: pass FAIL FAIL
2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): Ошибка B: значение требуется и не может быть пустым 2011-04-19T13: 06: 59 + 10:00 ОТЛАДКА (7): Ошибка C: значение является обязательным и не может быть пустым 2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7):
2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): 6 Т |F |T |F: pass FAIL FAIL
2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): Ошибка B: значение требуется и не может быть пустым 2011-04-19T13: 06: 59 + 10:00 ОТЛАДКА (7): Ошибка C: значение является обязательным и не может быть пустым 2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7):
2011-04-19T13: 06: 59 + 10: 00 ОТЛАД (7): 7 T |F |F |T: pass FAIL FAIL
2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): Ошибка B: '' - пустая строка 2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): Ошибка C: указан неверный тип.Ожидается строка, целое число или число с плавающей запятой 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 8 T |F |F |F: pass pass pass
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 9 F |T |T |T: pass pass pass
2011-04-19T13: 06: 59 + 10:00 DEBUG (7):
2011-04-19T13: 06: 59 + 10:00 DEBUG (7): 10 F |T |T |F: pass pass pass
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 11 F |T |F |T: pass pass pass
2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7):
2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): 12 F |T |F |F: pass pass pass
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 13 F |F |T |T: pass FAIL FAIL
2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): Ошибка B: '' - пустая строка 2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): Ошибка C: указан неверный тип.Ожидается строка, целое число или число с плавающей запятой 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 14 F |F |T |F: pass pass pass
2011-04-19T13: 06: 59 + 10:00 DEBUG (7):
2011-04-19T13: 06: 59 + 10:00 DEBUG (7): 15 F |F |F |T: pass FAIL FAIL
2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): Ошибка B: '' - пустая строка 2011-04-19T13: 06: 59 + 10: 00 ОТЛАДКА (7): Ошибка C: указан неверный тип.Ожидается строка, целое число или число с плавающей запятой 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 16 F |F |F |F: проход проход проход

Ответы [ 2 ]

3 голосов
/ 18 апреля 2011

setRequired () представляется избыточной функцией , потому что setAllowEmpty практически одинаково. Я думаю, что это обсуждается где-то как проблема.

Однако в дополнение к валидаторам вы можете использовать setRequired(flag), чтобы указать, что требуется элемент. По умолчанию этот флаг false. В сочетании с setAllowEmpty(flag), который по умолчанию равен true, и setAutoInsertNotEmptyValidator(flag), который по умолчанию равен true, вы можете изменить поведение процесса проверки:

  • по умолчанию, с использованием флагов по умолчанию, когда вы не передаете значение или пустую строку, валидаторы пропускаются и возвращается true
  • оставляя все флаги по умолчанию и используя setAllowEmpty(false) будет проверяться по валидатору для этого элемента
  • оставляя все флаги по умолчанию и используя setRequired(true) добавит NotEmpty валидатор. Поэтому, если значение не передается, мы уведомляем пользователя и запрещаем выполнение других валидаторов, потому что мы знаем, что это неверные данные

Таким образом, setAllowEmpty (false), оставляя все флаги по умолчанию, будет таким же, как setRequired (true) и setAutoInsertNotEmptyValidator (false); это сбивает с толку из-за наименования

Надеюсь, это поможет;)

1 голос
/ 18 апреля 2011

Попробуйте использовать

 $form->isValidPartial($partialData)

Это проверяет только те ключи, которые присутствуют в переменной $partaldata.Это может сделать только то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...