123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Framework\App\Scope;
- use InvalidArgumentException;
- use Magento\Framework\App\Config\ScopeConfigInterface;
- use Magento\Framework\App\ScopeResolverPool;
- use Magento\Framework\Exception\NoSuchEntityException;
- use Magento\Framework\Exception\LocalizedException;
- use Magento\Framework\Phrase;
- /**
- * Class Validator validates scope and scope code.
- */
- class Validator implements ValidatorInterface
- {
- /**
- * @var ScopeResolverPool
- */
- private $scopeResolverPool;
- /**
- * @param ScopeResolverPool $scopeResolverPool
- */
- public function __construct(ScopeResolverPool $scopeResolverPool)
- {
- $this->scopeResolverPool = $scopeResolverPool;
- }
- /**
- * {@inheritdoc}
- */
- public function isValid($scope, $scopeCode = null)
- {
- if ($scope === ScopeConfigInterface::SCOPE_TYPE_DEFAULT && empty($scopeCode)) {
- return true;
- }
- if ($scope === ScopeConfigInterface::SCOPE_TYPE_DEFAULT && !empty($scopeCode)) {
- throw new LocalizedException(new Phrase(
- 'The "%1" scope can\'t include a scope code. Try again without entering a scope code.',
- [ScopeConfigInterface::SCOPE_TYPE_DEFAULT]
- ));
- }
- if (empty($scope)) {
- throw new LocalizedException(new Phrase('A scope is missing. Enter a scope and try again.'));
- }
- $this->validateScopeCode($scopeCode);
- try {
- $scopeResolver = $this->scopeResolverPool->get($scope);
- $scopeResolver->getScope($scopeCode)->getId();
- } catch (InvalidArgumentException $e) {
- throw new LocalizedException(
- new Phrase('The "%1" value doesn\'t exist. Enter another value and try again.', [$scope])
- );
- } catch (NoSuchEntityException $e) {
- throw new LocalizedException(
- new Phrase('The "%1" value doesn\'t exist. Enter another value and try again.', [$scopeCode])
- );
- }
- return true;
- }
- /**
- * Validate scope code
- * Throw exception if not valid.
- *
- * @param string $scopeCode
- * @return void
- * @throws LocalizedException if scope code is empty or has a wrong format
- */
- private function validateScopeCode($scopeCode)
- {
- if (empty($scopeCode)) {
- throw new LocalizedException(new Phrase('A scope code is missing. Enter a code and try again.'));
- }
- if (!preg_match('/^[a-z]+[a-z0-9_]*$/', $scopeCode)) {
- throw new LocalizedException(new Phrase(
- 'The scope code can include only lowercase letters (a-z), numbers (0-9) and underscores (_). '
- . 'Also, the first character must be a letter.'
- ));
- }
- }
- }
|