UrlRewriteExceptionMessageFactory.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\UrlRewrite\Model\Message;
  7. use Magento\Framework\Message\ExceptionMessageFactoryInterface;
  8. use Magento\UrlRewrite\Model\Exception\UrlAlreadyExistsException;
  9. use Magento\Framework\Message\MessageInterface;
  10. use Magento\Framework\Message\Factory;
  11. use Magento\Framework\Exception\RuntimeException;
  12. class UrlRewriteExceptionMessageFactory implements ExceptionMessageFactoryInterface
  13. {
  14. const URL_DUPLICATE_MESSAGE_MAP_ID = 'urlDuplicateMessageMapId';
  15. /**
  16. * @var \Magento\Framework\Message\Factory
  17. */
  18. private $messageFactory;
  19. /**
  20. * @var \Magento\Framework\UrlInterface
  21. */
  22. private $urlBuilder;
  23. /**
  24. * @param Factory $messageFactory
  25. * @param \Magento\Framework\UrlInterface $urlBuilder
  26. */
  27. public function __construct(Factory $messageFactory, \Magento\Framework\UrlInterface $urlBuilder)
  28. {
  29. $this->messageFactory = $messageFactory;
  30. $this->urlBuilder = $urlBuilder;
  31. }
  32. /**
  33. * @inheritdoc
  34. */
  35. public function createMessage(\Exception $exception, $type = MessageInterface::TYPE_ERROR)
  36. {
  37. if ($exception instanceof UrlAlreadyExistsException) {
  38. $generatedUrls = [];
  39. $urls = $exception->getUrls();
  40. if ($urls && is_array($urls)) {
  41. foreach ($urls as $id => $url) {
  42. $adminEditUrl = $this->urlBuilder->getUrl(
  43. 'adminhtml/url_rewrite/edit',
  44. ['id' => $id]
  45. );
  46. $generatedUrls[$adminEditUrl] = $url['request_path'];
  47. }
  48. }
  49. return $this->messageFactory->create($type)
  50. ->setIdentifier(self::URL_DUPLICATE_MESSAGE_MAP_ID)
  51. ->setText($exception->getMessage())
  52. ->setData(['urls' => $generatedUrls]);
  53. }
  54. throw new RuntimeException(
  55. __('Exception instance doesn\'t match %1 type', UrlAlreadyExistsException::class)
  56. );
  57. }
  58. }