Я хочу получать только инициированные сообщения, но я получаю все зарегистрированные сообщения.
$inputFilter = $factory->createInput(array(
'name' => 'image',
'required' => true,
'validators' => array(
array(
'name' => '\Zend\Validator\File\IsImage',
'options' => ['message' => 'File has to be valid image.']
),
array(
'name' => '\Zend\Validator\File\Extension',
'options' => ['extension' => 'png,jpg,jpeg', 'message' => 'Image extension has to be png,jpg or jpeg.'],
),
array(
'name' => '\Zend\Validator\File\Size',
'options' => ['max' => '2MB', 'message' => 'Maximum file size for image is 2MB.'],
),
),
));
позже в контроллере:
if(!$filter->isValid()){
var_dump($filter->getMessages());
}
Если я пытаюсь загрузить изображение размером 5 МБ, я получаю все сообщения:
array(
'image' => array(
'fileIsImageNotReadable' => 'File has to be valid image'
'fileExtensionNotFound' => 'Image extension has to be png,jpg or jpeg'
'fileSizeNotFound' => 'Maximum file size for image is 2MB'
)
);
Но ожидайте только «Максимальный размер файла для изображения составляет 2 МБ».
Есть ли способ вернуть только запущенные сообщения?
Должно ли это быть поведением по умолчанию метода getMessages ()?
Возможным решением для этого является использование Цепи валидатора.
В некоторых случаях имеет смысл, чтобы валидатор разрывал цепочку, если его процесс валидации не удался.
Zend\Validator\ValidatorChain
поддерживает такие случаи использования со вторым параметромattach()
метод. Установив$breakChainOnFailure
вTRUE
добавленный валидатор прервет выполнение цепочки при сбое, что позволит избежать запуска любых других валидаций, которые определены как ненужные или неподходящие для ситуации.
Таким образом, проверка останавливается при первом сбое, и у вас будет только сообщение о том, что проверка не пройдена. Вы также можете установить приоритеты, чтобы ваши валидаторы применялись в определенном порядке. Этот пример, приведенный в документации, использует метод attach
, Это не то, что вам нужно точно.
В вашем случае вы можете просто использовать break_chain_on_failure
введите в своей спецификации валидатора значение со значением true. Что-то вроде этого :
$inputFilter = $factory->createInput(array(
'name' => 'image',
'required' => true,
'validators' => array(
array(
'name' => '\Zend\Validator\File\IsImage',
'options' => ['message' => 'File has to be valid image.']
'break_chain_on_failure' => true,
),
),
));
Других решений пока нет …