/** * buildValidatorMessages * * @param $fieldName * @param InputInterface $input * * @return void */ protected function buildValidatorMessages($fieldName, InputInterface $input) { $validatorChain = $input->getValidatorChain(); $validators = $validatorChain->getValidators(); // We get the input messages because input does validations outside of the validators $allMessages = $input->getMessages(); foreach ($validators as $fkey => $validatorData) { /** @var \Zend\Validator\AbstractValidator $validator */ $validator = $validatorData['instance']; $params = []; if ($validator instanceof MessageParamInterface) { $params = $validator->getMessageParams(); } try { $messagesParams = $validator->getOption('messageParams'); $params = array_merge($params, $messagesParams); } catch (\Exception $exception) { // Do nothing } $inputMessages = $validator->getMessages(); // Remove the messages from $allMessages as we get them from the validators $allMessages = array_diff($allMessages, $inputMessages); $this->buildApiMessages($fieldName, $inputMessages, $params); } $params = []; if ($input instanceof MessageParamInterface) { $params = $input->getMessageParams(); } // get any remaining messages that did not come from validators $this->buildApiMessages($fieldName, $allMessages, $params); }