|
21 | 21 | use Magento\Framework\App\RequestInterface; |
22 | 22 | use Magento\Framework\Controller\Result\Redirect; |
23 | 23 | use Magento\Framework\Exception\LocalizedException; |
| 24 | +use Magento\Framework\Message\AbstractMessage; |
24 | 25 | use Magento\Framework\Message\MessageInterface; |
25 | 26 | use Magento\Framework\Phrase; |
26 | 27 | use Magento\Store\Model\StoreManagerInterface; |
|
40 | 41 | use Magento\Framework\Exception\InputException; |
41 | 42 | use Magento\Framework\Data\Form\FormKey\Validator; |
42 | 43 | use Magento\Customer\Controller\AbstractAccount; |
| 44 | +use Magento\Framework\Validator\Exception as ValidatorException; |
43 | 45 |
|
44 | 46 | /** |
45 | 47 | * Post create customer action |
@@ -423,10 +425,7 @@ public function execute() |
423 | 425 | ] |
424 | 426 | ); |
425 | 427 | } catch (InputException $e) { |
426 | | - $this->messageManager->addErrorMessage($e->getMessage()); |
427 | | - foreach ($e->getErrors() as $error) { |
428 | | - $this->messageManager->addErrorMessage($error->getMessage()); |
429 | | - } |
| 428 | + $this->processInputException($e); |
430 | 429 | } catch (LocalizedException $e) { |
431 | 430 | $this->messageManager->addErrorMessage($e->getMessage()); |
432 | 431 | } catch (\Exception $e) { |
@@ -517,6 +516,65 @@ private function getMessageManagerSuccessMessage(): MessageInterface |
517 | 516 | return $message; |
518 | 517 | } |
519 | 518 |
|
| 519 | + /** |
| 520 | + * Process InputException and add error messages to message manager |
| 521 | + * |
| 522 | + * @param InputException $exception |
| 523 | + * @return void |
| 524 | + */ |
| 525 | + private function processInputException(InputException $exception): void |
| 526 | + { |
| 527 | + if ($exception instanceof ValidatorException) { |
| 528 | + $this->processValidatorException($exception); |
| 529 | + } else { |
| 530 | + $this->processStandardInputException($exception); |
| 531 | + } |
| 532 | + } |
| 533 | + |
| 534 | + /** |
| 535 | + * Process ValidatorException by extracting, translating and merging again individual messages |
| 536 | + * |
| 537 | + * @param ValidatorException $exception |
| 538 | + * @return void |
| 539 | + */ |
| 540 | + private function processValidatorException(ValidatorException $exception): void |
| 541 | + { |
| 542 | + $validatorMessages = $exception->getMessages(); |
| 543 | + if (empty($validatorMessages)) { |
| 544 | + $this->messageManager->addErrorMessage($exception->getMessage()); |
| 545 | + return; |
| 546 | + } |
| 547 | + |
| 548 | + $translatedMessages = []; |
| 549 | + foreach ($validatorMessages as $message) { |
| 550 | + $messageText = $message instanceof AbstractMessage |
| 551 | + ? $message->getText() |
| 552 | + : (string)$message; |
| 553 | + $translatedMessages[] = (string)__($messageText); |
| 554 | + } |
| 555 | + |
| 556 | + $combinedTranslatedMessage = implode(' ', $translatedMessages); |
| 557 | + $this->messageManager->addErrorMessage($combinedTranslatedMessage); |
| 558 | + } |
| 559 | + |
| 560 | + /** |
| 561 | + * Process standard InputException by extracting individual errors |
| 562 | + * |
| 563 | + * @param InputException $exception |
| 564 | + * @return void |
| 565 | + */ |
| 566 | + private function processStandardInputException(InputException $exception): void |
| 567 | + { |
| 568 | + $errors = $exception->getErrors(); |
| 569 | + if (!empty($errors)) { |
| 570 | + foreach ($errors as $error) { |
| 571 | + $this->messageManager->addErrorMessage($error->getMessage()); |
| 572 | + } |
| 573 | + } else { |
| 574 | + $this->messageManager->addErrorMessage($exception->getMessage()); |
| 575 | + } |
| 576 | + } |
| 577 | + |
520 | 578 | /** |
521 | 579 | * Convert punycode email back to Unicode |
522 | 580 | * |
|
0 commit comments