Magento 2: «Запрошенный магазин не найден. Проверьте магазин и попробуйте снова. ” - PullRequest
1 голос
/ 01 апреля 2020

Каждый раз, когда я переключаюсь с обзора магазина Engli sh на итальянский и наоборот, он выводит меня на эквивалентную домашнюю страницу (неважно, где я нахожусь) и выдает эту ошибку:

The store that was requested wasn't found. Verify the store and try again.

Вот мои настройки:

  • Magento 2.3.4 (fre sh установка, самостоятельное размещение)
  • 1 веб-сайт, 1 магазин, 2 магазина
  • Для каждого магазина один домен (Engli sh магазин -> example.com, итальянский магазин -> example.it)
  • Я добавил поверх основного .htaccess эти env:

    SetEnvIf Host ^(.*)\.example\.com MAGE_RUN_CODE=en
    SetEnvIf Host ^(.*)\.example\.com MAGE_RUN_TYPE=store
    SetEnvIf Host ^(.*)\.example\.it MAGE_RUN_CODE=it
    SetEnvIf Host ^(.*)\.example\.it MAGE_RUN_TYPE=store
    

Резюме: Если, например, я на примере. com / my-beautiful-product. html [ Engli sh представление магазина ], и я переключаюсь на представление итальянского магазина, оно приводит меня к example.it и показывает эту ошибку («Запрошенный магазин не найден. Проверьте магазин и попробуйте снова.») Вместо того, чтобы взять меня на example.it / my-beautiful-product. html без ошибок. * 10 33 *

Есть идеи?


Что я тестировал:

  • Я пытался жестко закодировать коды представлений магазина в / vendor / magento / module-store / Controller / Store / SwitchAction. php в строке 106 и $ requiredUrlToRedirect:

    ...
    public function execute()
    {
        $targetStoreCode = $this->_request->getParam(
            \Magento\Store\Model\StoreManagerInterface::PARAM_NAME
        );
        $fromStoreCode = $this->_request->getParam(
            '___from_store',
            $this->storeCookieManager->getStoreCodeFromCookie()
        );
    
        $requestedUrlToRedirect = 'https://example.it/my-beautiful-product.html';
        $redirectUrl = $requestedUrlToRedirect;
        // $requestedUrlToRedirect = $this->_redirect->getRedirectUrl();
        // $redirectUrl = $requestedUrlToRedirect;
    
        $error = null;
        try {
            $fromStore = $this->storeRepository->get('en');
            $targetStore = $this->storeRepository->getActiveStoreByCode('it');
            // $fromStore = $this->storeRepository->get($fromStoreCode);
            // $targetStore = $this->storeRepository->getActiveStoreByCode($targetStoreCode);
        } catch (StoreIsInactiveException $e) {
            $error = __('Requested store is inactive');
        } catch (NoSuchEntityException $e) {
            $error = __("The store that was requested wasn't found. Verify the store and try again.");
        }
        if ($error !== null) {
            $this->messageManager->addErrorMessage($error);
        } else {
            $redirectUrl = $this->storeSwitcher->switch($fromStore, $targetStore, $requestedUrlToRedirect);
        }
    
        $this->getResponse()->setRedirect($redirectUrl);
    }
    ...
    

    Вот пример URL переключателя: https://example.com/stores/store/redirect/___store/it/___from_store/en/uenc/aHR0cHM6Ly9kZXYudGVjbmljbWFuLml0Lz9fX19zdG9yZT1pdA%2C%2C/

Затем я переключился с итальянского магазина на Engli sh один и он работал! Так что кажется, что он не может получить правильные значения $ targetStoreCode и $ requiredUrlToRedirect . Есть идеи?

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Это ошибка Magento 2.3.1 до 2.3.5. Проблема в представлении ... и именно в модуле store / view / frontend / templates / switch / languages.p html в строке 28.

НЕПРАВИЛЬНО

<li class="view-<?= $block->escapeHtml($_lang->getCode()) ?> switcher-option">
    <a href="<?= $block->escapeUrl($block->getViewModel()->getTargetStoreRedirectUrl($_lang)) ?>">
        <?= $block->escapeHtml($_lang->getName()) ?>
    </a>
</li>

ПРАВИЛЬНО

<li class="view-<?= $block->escapeHtml($_lang->getCode()) ?> switcher-option">
    <a href="#" data-post='<?= /* @noEscape */ $block->getTargetStorePostData($_lang) ?>'>
        <?= $block->escapeHtml($_lang->getName()) ?>
    </a>
</li>

... и теперь это работает как шарм!

0 голосов
/ 10 апреля 2020

Вам нужно выполнить следующий запрос в вашей базе данных, а затем попытаться открыть сайт.

SET FOREIGN_KEY_CHECKS=0;
UPDATE `store` SET store_id = 0 WHERE code='admin';
UPDATE `store_group` SET group_id = 0 WHERE name='Default';
UPDATE `store_website` SET website_id = 0 WHERE code='admin';
UPDATE `customer_group` SET customer_group_id = 0 WHERE 
customer_group_code='NOT LOGGED IN';
SET FOREIGN_KEY_CHECKS=1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...