Prestashop 1.7 -我不能访问后台办公室(管理面板)



非常感谢您的帮助。我可以在我的网页上访问后台办公室。网页工作没有问题,但当我访问BO时,我收到了一个错误,我认为这与symfony配置有关。我得到一个与YAML文件相关的错误:没有定义常量(CLOSED_ALLOWED_FAILURES)。我已经复制了错误和下面的文件:/src/PrestaShopBundle/资源/config/服务/核心/currency.ymlsrc/核心/汇率/ExchangeRateProvider.php→在这个文件中定义了常量CLOSED_ALLOWED_FAILURES

PS:奇怪的是,如果我在web运行时恢复几天前的备份,我得到同样的错误!

  • 我已经手动删除了cache/var/cache

我将非常感谢您的帮助

感谢(3/3) FileLoaderLoadException

文件"/home/customer/www/…/public_html/src/prestashopbundle/resources/config/services/core/currency.yml"常量"PrestaShopPrestaShopCoreCurrencyExchangeRateProvider::CLOSED_ALLOWED_FAILURES"php/const PrestaShopPrestaShopCoreCurrencyExchangeRateProvider::CLOSED_ALLOWED_FAILURES")在/home/customer/www/public_html/src/prestashopbundle/resources/config/services/core/currency.yml(正在从"/home/customer/www/…com/public_html/src/PrestaShopBundle/Resources/config/services.yml")中没有定义。

导出文件文件aquí y tamamichan más abajo el archivo src/Core/Currency/ExchangeRateProvider.php

服务:_defaults:公众:真正的

prestashop.core.currency.grid_data_factory:
class: 'PrestaShopPrestaShopCoreCurrencyCurrencyGridDataFactory'
arguments:
- '@prestashop.core.grid.data_provider.currency'
- '@translator'
prestashop.core.currency.exchange_rate.settings:
class: PrestaShopCircuitBreakerFactorySettings
arguments:
- !php/const PrestaShopPrestaShopCoreCurrencyExchangeRateProvider::CLOSED_ALLOWED_FAILURES
- !php/const PrestaShopPrestaShopCoreCurrencyExchangeRateProvider::CLOSED_TIMEOUT_SECONDS
- !php/const PrestaShopPrestaShopCoreCurrencyExchangeRateProvider::OPEN_THRESHOLD_SECONDS
calls:
- ['setStrippedFailures', [!php/const PrestaShopPrestaShopCoreCurrencyExchangeRateProvider::OPEN_ALLOWED_FAILURES]]
- ['setStrippedTimeout', [!php/const PrestaShopPrestaShopCoreCurrencyExchangeRateProvider::OPEN_TIMEOUT_SECONDS]]
- ['setStorage', ['@prestashop.core.circuit_breaker.storage']]
- ['setClientOptions', [{'method': 'GET', 'subscribers': ['@prestashop.core.circuit_breaker.guzzle.cache_subscriber']}]]
# create a factory for cache_subscriber so that we can easily adapt the cache duration
prestashop.core.currency.exchange_rate.circuit_breaker:
class: 'PrestaShopCircuitBreakerContractCircuitBreakerInterface'
factory: ["@prestashop.core.circuit_breaker.advanced_factory", create]
arguments:
- "@prestashop.core.currency.exchange_rate.settings"
prestashop.core.exchange_rate.provider:
class: PrestaShopPrestaShopCoreCurrencyExchangeRateProvider
arguments:
- !php/const PrestaShopPrestaShopCoreCurrencyExchangeRateProvider::CURRENCY_FEED_URL
- '@=service("prestashop.adapter.data_provider.currency").getDefaultCurrencyIsoCode()'
- '@prestashop.core.currency.exchange_rate.circuit_breaker'
- '@cache.app'






<?php
/**
* Copyright since 2007 PrestaShop SA and Contributors
* PrestaShop is an International Registered Trademark & Property of PrestaShop SA
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.md.
* It is also available through the world-wide-web at this URL:
* https://opensource.org/licenses/OSL-3.0
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to https://devdocs.prestashop.com/ for more information.
*
* @author    PrestaShop SA and Contributors <contact@prestashop.com>
* @copyright Since 2007 PrestaShop SA and Contributors
* @license   https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
*/
namespace PrestaShopPrestaShopCoreCurrency;
use PrestaShopCircuitBreakerContractCircuitBreakerInterface;
use PrestaShopDecimalNumber;
use PrestaShopPrestaShopCoreCurrencyExceptionCurrencyFeedException;
use PrestaShopPrestaShopCoreDomainCurrencyValueObjectExchangeRate;
use SimpleXMLElement;
use SymfonyComponentCacheAdapterAdapterInterface as CacheInterface;
/**
* Retrieves the exchange rate of a currency (based on the default currency). It uses a circuit breaker
* to avoid being blocked in case of network problems and it saves each of its request in a cache to be
* able to have a fallback response.
*/
class ExchangeRateProvider
{
/**
* This url was set in the _PS_CURRENCY_FEED_URL_ const but it is not accessible in every
* context because it is weirdly defined in defines_uri.inc.php So it is safer to define
* it properly here.
*/
const CURRENCY_FEED_URL = 'http://api.prestashop.com/xml/currencies.xml';
const CLOSED_ALLOWED_FAILURES = 3;
const CLOSED_TIMEOUT_SECONDS = 1;
const OPEN_ALLOWED_FAILURES = 3;
const OPEN_TIMEOUT_SECONDS = 2;
const OPEN_THRESHOLD_SECONDS = 3600; // 1 hour
const CACHE_KEY_XML = 'currency_feed.xml';
/** @var string */
private $currencyFeedUrl;
/** @var string */
private $defaultCurrencyIsoCode;
/** @var CircuitBreakerInterface */
private $remoteServiceProvider;
/** @var CacheInterface */
private $cache;
/** @var string */
private $sourceIsoCode;
/** @var array */
private $currencies = [];
/**
* @param string $currencyFeedUrl
* @param string $defaultCurrencyIsoCode
* @param CircuitBreakerInterface $remoteServiceProvider
* @param CacheInterface $cache
*/
public function __construct(
$currencyFeedUrl,
$defaultCurrencyIsoCode,
CircuitBreakerInterface $remoteServiceProvider,
CacheInterface $cache
) {
$this->currencyFeedUrl = $currencyFeedUrl;
$this->defaultCurrencyIsoCode = $defaultCurrencyIsoCode;
$this->remoteServiceProvider = $remoteServiceProvider;
$this->cache = $cache;
}
/**
* @param string $currencyIsoCode
*
* @return Number
*
* @throws CurrencyFeedException
*/
public function getExchangeRate($currencyIsoCode)
{
$this->fetchCurrencyFeed();
// Default feed currency (usually EUR)
if ($this->defaultCurrencyIsoCode == $currencyIsoCode) {
return ExchangeRate::getDefaultExchangeRate();
}
/*
* Search for the currency rate in the source feed, this represents the rate
* relative to the source feed (compared to the feed default currency)
*/
$sourceRate = $this->getExchangeRateFromFeed($currencyIsoCode);
/*
* Fetch the exchange rate of the default currency (compared to the source currency)
* and finally compute the asked currency rate compared to the shop default currency rate
*/
$defaultExchangeRate = $this->getExchangeRateFromFeed($this->defaultCurrencyIsoCode);
return $sourceRate->dividedBy($defaultExchangeRate);
}
/**
* @param string $currencyIsoCode
*
* @return Number
*
* @throws CurrencyFeedException
*/
private function getExchangeRateFromFeed(string $currencyIsoCode)
{
if ($this->sourceIsoCode == $currencyIsoCode) {
return new Number('1.0');
}
if (!isset($this->currencies[$currencyIsoCode])) {
throw new CurrencyFeedException(sprintf('Exchange rate for currency with ISO code %s was not found', $currencyIsoCode));
}
return $this->currencies[$currencyIsoCode];
}
/**
* Fetch the currency from its url using circuit breaker, if no content was fetched
* fallback on the cache file. This is only performed once per process, if the currencies
* are already present then there is nothing to do.
*
* @throws CurrencyFeedException
*/
private function fetchCurrencyFeed()
{
if (!empty($this->currencies)) {
return;
}
$remoteFeedData = $this->remoteServiceProvider->call($this->currencyFeedUrl);
$cachedFeedData = $this->getCachedCurrencyFeed();
if (empty($remoteFeedData) && empty($cachedFeedData)) {
throw new CurrencyFeedException('Currency feed could not be fetched');
}
$xmlFeed = $this->parseAndSaveXMLFeed($remoteFeedData);
if (null === $xmlFeed) {
$xmlFeed = $this->parseAndSaveXMLFeed($cachedFeedData);
}
if (null === $xmlFeed) {
throw new CurrencyFeedException('Invalid currency XML feed');
}
$this->parseXmlFeed($xmlFeed);
}
/**
* @param string $feedContent
*
* @return SimpleXMLElement|null
*/
private function parseAndSaveXMLFeed($feedContent)
{
$xmlFeed = @simplexml_load_string($feedContent);
if (!$xmlFeed || !$this->isValidXMLFeed($xmlFeed)) {
return null;
}
//Cache the feed
$cacheItem = $this->cache->getItem(self::CACHE_KEY_XML);
$cacheItem->set($feedContent);
$this->cache->save($cacheItem);
return $xmlFeed;
}
/**
* @param SimpleXMLElement $xmlFeed
*/
private function parseXmlFeed($xmlFeed)
{
$xmlCurrencies = $xmlFeed->list->currency;
$this->sourceIsoCode = (string) ($xmlFeed->source['iso_code']);
foreach ($xmlCurrencies as $currency) {
$this->currencies[(string) $currency['iso_code']] = new Number((string) $currency['rate']);
}
}
/**
* @return string
*/
private function getCachedCurrencyFeed()
{
$cacheItem = $this->cache->getItem(self::CACHE_KEY_XML);
if (!$cacheItem->isHit()) {
return '';
}
$feedContent = $cacheItem->get();
return !empty($feedContent) ? $feedContent : '';
}
/**
* @param SimpleXMLElement $xmlFeed
*
* @return bool
*/
private function isValidXMLFeed(SimpleXMLElement $xmlFeed)
{
return $xmlFeed && $xmlFeed->list && count($xmlFeed->list->currency) && $xmlFeed->source;
}
}

我也有同样的问题!我试图更新一键模块,之后在后台办公室有一个白屏。启用错误日志后,我有关于CLOSED_ALLOWED_FAILURES的相同消息:

The constant "PrestaShopPrestaShopAdapterNewsNewsDataProvider::CLOSED_ALLOWED_FAILURES" is not defined at line 10 (near "- !php/const PrestaShopPrestaShopAdapterNewsNewsDataProvider::CLOSED_ALLOWED_FAILURES").

白色屏幕似乎是PrestaShop的一个主要问题,同时我考虑转移到一个更稳定的系统,因为这花费了我太多的时间和业务损失。

相关内容

  • 没有找到相关文章

最新更新