15 class Baseurl extends \Magento\Framework\App\Config\Value
25 private $urlValidator;
42 \
Magento\Framework\View\Asset\MergeService $mergeService,
44 \
Magento\Framework\
Data\Collection\AbstractDb $resourceCollection =
null,
47 $this->_mergeService = $mergeService;
59 $value = $this->getValue();
61 if (!$this->_validateUnsecure(
$value) && !$this->_validateSecure(
$value)) {
62 $this->_validateFullyQualifiedUrl(
$value);
65 $field = $this->getFieldConfig();
66 $label = $field && is_array($field) ? $field[
'label'] :
'value';
67 $msg =
__(
'Invalid %1. %2',
$label, $e->getMessage());
68 $error = new \Magento\Framework\Exception\LocalizedException($msg, $e);
79 private function _validateUnsecure(
$value)
81 $placeholders = [
'{{unsecure_base_url}}'];
82 switch ($this->getPath()) {
83 case \Magento\Store\Model\Store::XML_PATH_UNSECURE_BASE_URL:
84 $this->_assertValuesOrUrl([
'{{base_url}}'],
$value);
86 case \Magento\Store\Model\Store::XML_PATH_UNSECURE_BASE_LINK_URL:
87 $this->_assertStartsWithValuesOrUrl($placeholders,
$value);
89 case \Magento\Store\Model\Store::XML_PATH_UNSECURE_BASE_STATIC_URL:
90 case \Magento\Store\Model\Store::XML_PATH_UNSECURE_BASE_MEDIA_URL:
91 $this->_assertStartsWithValuesOrUrlOrEmpty($placeholders,
$value);
105 private function _validateSecure(
$value)
107 $placeholders = [
'{{unsecure_base_url}}',
'{{secure_base_url}}'];
108 switch ($this->getPath()) {
109 case \Magento\Store\Model\Store::XML_PATH_SECURE_BASE_URL:
110 $this->_assertValuesOrUrl([
'{{base_url}}',
'{{unsecure_base_url}}'],
$value);
112 case \Magento\Store\Model\Store::XML_PATH_SECURE_BASE_LINK_URL:
113 $this->_assertStartsWithValuesOrUrl($placeholders,
$value);
115 case \Magento\Store\Model\Store::XML_PATH_SECURE_BASE_STATIC_URL:
116 case \Magento\Store\Model\Store::XML_PATH_SECURE_BASE_MEDIA_URL:
117 $this->_assertStartsWithValuesOrUrlOrEmpty($placeholders,
$value);
136 throw new \Magento\Framework\Exception\LocalizedException(
137 __(
'Value must be a URL or one of placeholders: %1', implode(
',',
$values))
150 private function _assertStartsWithValuesOrUrl(array
$values,
$value)
152 $quoted = array_map(
'preg_quote',
$values, array_fill(0, count(
$values),
'/'));
153 if (!preg_match(
'/^(' . implode(
'|', $quoted) .
')(.+\/)?$/',
$value) && !$this->_isFullyQualifiedUrl(
$value)
155 throw new \Magento\Framework\Exception\LocalizedException(
157 'Specify a URL or path that starts with placeholder(s): %1, and ends with "/".',
172 private function _assertStartsWithValuesOrUrlOrEmpty(array
$values,
$value)
179 }
catch (\
Magento\Framework\Exception\LocalizedException $e) {
180 $msg =
__(
'%1 An empty value is allowed as well.', $e->getMessage());
181 $error = new \Magento\Framework\Exception\LocalizedException($msg, $e);
193 private function _validateFullyQualifiedUrl(
$value)
195 if (!$this->_isFullyQualifiedUrl(
$value)) {
196 throw new \Magento\Framework\Exception\LocalizedException(
__(
'Specify a fully qualified URL.'));
206 private function _isFullyQualifiedUrl(
$value)
208 return preg_match(
'/\/$/',
$value) && $this->getUrlValidator()->isValid(
$value, [
'http',
'https']);
219 switch ($this->getPath()) {
220 case \Magento\Store\Model\Store::XML_PATH_UNSECURE_BASE_URL:
221 case \Magento\Store\Model\Store::XML_PATH_UNSECURE_BASE_MEDIA_URL:
222 case \Magento\Store\Model\Store::XML_PATH_SECURE_BASE_URL:
223 case \Magento\Store\Model\Store::XML_PATH_SECURE_BASE_MEDIA_URL:
224 $this->_mergeService->cleanMergedJsCss();
228 return parent::afterSave();
237 private function getUrlValidator()
239 if (!$this->urlValidator) {
242 return $this->urlValidator;
__construct(\Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList, \Magento\Framework\View\Asset\MergeService $mergeService, \Magento\Framework\Model\ResourceModel\AbstractResource $resource=null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection=null, array $data=[])