Я проверяю массив данных на форму Zend, где требуются некоторые элементы, т. Е. 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 DEBUG (7): ALLOWED: org / testform (kim@kimprince.com, admin) 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): Настройки элемента: 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): =========== ====== 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 1: setRequired () [default: false] 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7 ): 2: setAllowEmpty () [default: true] 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 3: setAutoInsertNotEmptyValidator () [default: true] 2011-04-19T13: 06: 59+ 10:00 DEBUG (7): 4: добавить Alnum Validator 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): Условия данных: 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): =========== ===== 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): A: data [element] = Foo 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): B : data [element] BLANK 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): C: данные [элемент] НЕ СУЩЕСТВУЕТ 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7 ):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): # 1 === 2 === 3 === 4 ===== A ======= B ==== === C ===== 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 1 T | T | T | T: пройти FAIL FAIL
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): Ошибка B: Значение требуется и не может быть пустым 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): Ошибка C : Значение требуется и не может быть пустым 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 2 T | T | T | F: передать FAIL FAIL
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): Ошибка B: Значение требуется и не может быть пустым 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): Ошибка C : Значение требуется и не может быть пустым 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 3 T | T | F | T: пройти FAIL FAIL
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): Ошибка B: '' – пустая строка 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): Ошибка C: Неверный тип данный. String, integer или float ожидается 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 4 T | T | F | F: проходный проход
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 5 T | F | T | T: пройти FAIL FAIL
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): Ошибка B: Значение требуется и не может быть пустым 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): Ошибка C : Значение требуется и не может быть пустым 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 6 T | F | T | F: передать FAIL FAIL
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): Ошибка B: Значение требуется и не может быть пустым 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): Ошибка C : Значение требуется и не может быть пустым 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 7 T | F | F | T: пройти FAIL FAIL
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): Ошибка B: '' – пустая строка 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): Ошибка C: Неверный тип данный. String, integer или float ожидается 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 8 T | F | F | F: проходный проход
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 9 F | T | T | T: пройти проходной проход
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 10 F | T | T | F: проходный проход
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 11 F | T | F | T: пройти проходной проход
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 12 F | T | F | F: проходный проход
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 13 F | F | T | T: пройти FAIL FAIL
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): Ошибка B: '' – пустая строка 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): Ошибка C: Неверный тип данный. String, integer или float ожидается 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 14 F | F | T | F: проходный проход
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 15 F | F | F | T: пройти FAIL FAIL
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): Ошибка B: '' – пустая строка 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): Ошибка C: Неверный тип данный. String, integer или float ожидается 2011-04-19T13: 06: 59 + 10: 00 DEBUG (7):
2011-04-19T13: 06: 59 + 10: 00 DEBUG (7): 16 F | F | F | F: проходный проход
setRequired () кажется избыточной функцией, потому что setAllowEmpty довольно то же самое. Я думаю, что это где-то проблема.
Однако в дополнение к валидаторам вы можете использовать setRequired(flag)
чтобы указать, что требуется элемент. По умолчанию этот флаг имеет значение false
. В сочетании с setAllowEmpty(flag)
, который по умолчанию является true
, и setAutoInsertNotEmptyValidator(flag)
, который по умолчанию является true
, вы можете изменить поведение процесса проверки:
setAllowEmpty(false)
будет проверять валидатор для этого элемента setRequired(true)
, добавит валидатор NotEmpty
. Поэтому, если значение не передано, мы уведомляем пользователя и запрещаем выполнение других валидаторов, поскольку мы знаем, что это недопустимые данные Поэтому setAllowEmpty (false), оставляющий все флаги по умолчанию, будет таким же, как setRequired (true) и setAutoInsertNotEmptyValidator (false); это путает из-за именования
Надеюсь, это поможет 😉
Попробуйте использовать
$form->isValidPartial($partialData)
Это проверяет только ключи, которые присутствуют в переменной $ partialData. Это может сделать то, что вам нужно.