Неверный файл шаблона - проблема с обновлением с 2.2.6 до 2.2.7 или 2.3

15

Я обновил версию 2.2.6 до версии 2.2.7, но на моем сайте отображается ошибка, показанная ниже.

1 exception(s):
Exception #0 (Magento\Framework\Exception\ValidatorException): Invalid template file: 'C:/xampp2/htdocs/magento2/demo1/vendor/magento/module-theme/view/frontend/templates/page/js/require_js.phtml' in module: '' block's name: 'require.js'

Exception #0 (Magento\Framework\Exception\ValidatorException): Invalid template file: 'C:/xampp2/htdocs/magento2/demo1/vendor/magento/module-theme/view/frontend/templates/page/js/require_js.phtml' in module: '' block's name: 'require.js'
#0 C:\xampp2\htdocs\magento2\demo1\vendor\magento\framework\View\Element\Template.php(300): Magento\Framework\View\Element\Template->fetchView('C:/xampp2/htdoc...')
#1 C:\xampp2\htdocs\magento2\demo1\vendor\magento\framework\View\Element\AbstractBlock.php(667): Magento\Framework\View\Element\Template->_toHtml()
#2 C:\xampp2\htdocs\magento2\demo1\vendor\magento\framework\View\Result\Page.php(248): Magento\Framework\View\Element\AbstractBlock->toHtml()
#3 C:\xampp2\htdocs\magento2\demo1\vendor\magento\framework\View\Result\Layout.php(170): Magento\Framework\View\Result\Page->render(Object(Magento\Framework\App\Response\Http\Interceptor))
#4 C:\xampp2\htdocs\magento2\demo1\vendor\magento\framework\Interception\Interceptor.php(58): Magento\Framework\View\Result\Layout->renderResult(Object(Magento\Framework\App\Response\Http\Interceptor))
#5 C:\xampp2\htdocs\magento2\demo1\vendor\magento\framework\Interception\Interceptor.php(138): Magento\Framework\View\Result\Page\Interceptor->___callParent('renderResult', Array)
#6 C:\xampp2\htdocs\magento2\demo1\vendor\magento\framework\Interception\Interceptor.php(153): Magento\Framework\View\Result\Page\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Response\Http\Interceptor))
#7 C:\xampp2\htdocs\magento2\demo1\generated\code\Magento\Framework\View\Result\Page\Interceptor.php(130): Magento\Framework\View\Result\Page\Interceptor->___callPlugins('renderResult', Array, Array)
#8 C:\xampp2\htdocs\magento2\demo1\vendor\magento\framework\App\Http.php(139): Magento\Framework\View\Result\Page\Interceptor->renderResult(Object(Magento\Framework\App\Response\Http\Interceptor))
#9 C:\xampp2\htdocs\magento2\demo1\generated\code\Magento\Framework\App\Http\Interceptor.php(24): Magento\Framework\App\Http->launch()
#10 C:\xampp2\htdocs\magento2\demo1\vendor\magento\framework\App\Bootstrap.php(257): Magento\Framework\App\Http\Interceptor->launch()
#11 C:\xampp2\htdocs\magento2\demo1\index.php(39): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http\Interceptor))
#12 {main}

Та же проблема, с которой я сталкиваюсь, если я обновлю сайт с 2.6 до 2.3.

Есть ли решение?

Санджай Джетва
источник
этот пост решил мою проблему.
Санджай Джетва

Ответы:

21

если ваша установка magento выполняется в windows, чем в некоторых версиях magento, таких как в 2.2.7, мы должны заменить код файла vendor / magento / framework / view / element / template / file / validator.php этим.

protected function isPathInDirectories($path, $directories)
{
    $realPath = str_replace('\\', '/', $this->fileDriver->getRealPath($path));
    if (!is_array($directories)) {
        $directories = (array)$directories;
    }

    foreach ($directories as $directory) {
        if (0 === strpos($realPath, $directory)) {
            return true;
        }
    }
    return false;
}

и теперь перезагрузите приложение magento.

Навин Джейн
источник
1
Работал отлично. Большое спасибо. +1
Шоаиб Мунир
1
Большое спасибо, вы спасли мой день. +1
Зеешан Хуваджа
12

Это должно быть только проблемой вашей локальной установки, потому что ваш экземпляр Magento работает в Windows.

Так что это может быть временное исправление в vendor\magento\framework\View\Element\Template\File\Validator.php

Перейти к номеру строки 114 и изменить номер строки и заменить ниже строки

$filename = str_replace('\\', '/', $filename);

с

$filename = str_replace('\\', '/', $this->fileDriver->getRealPath($filename));
torhoehn
источник
Здравствуйте @tho, я применил это решение, и теперь веб-сайт загружается, но домашняя страница и логин администратора показывают пустую страницу.
Санджай Джетва
1
Спасибо друг. работал на меня. +1
Шоаиб Мунир
0

Чтобы обновить Magento 2.2.6 до Magento 2.3.0 без каких-либо проблем, я просто обновил один из наших текущих проектов с Magento 2.2.6 до 2.3.0, и ничто не нарушило функциональность текущего проекта.

вы можете легко обновить с помощью командной строки Magento,

Вам нужно выполнить четыре шага, чтобы обновить старую версию до последней версии Magento 2.3

For upgrade to Magento 2.3 You must require PHP 7.1.3+ or PHP 7.2.

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

Надеюсь, вы будете полезны выше шагов.

Ракеш Джесадия
источник
Здравствуйте @Rakesh, я использую php версии 7.1.7 и применил решение Mr. tho, и веб-сайт не показывает никаких ошибок. мой магазин находится в режиме разработки. но показывает пустую страницу.
Санджай Джетва
0

У меня была эта проблема, в моем случае это был модуль, который я использовал в файле registration.php

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Vendor_Module',
    isset($file) ? dirname($file) : __DIR__
);

проблема в этой строке " isset ($ file)? dirname ($ file): __DIR__", поэтому я изменил на " __DIR__", и теперь это работает, я надеюсь, что это помогает.

Рауль Энсинас
источник
0

Я знаю, что это довольно старая проблема, и все уже знают решение, но я создал быстрый пакет на основе композитора с исправлением, просто запустите его в корне Magento:

композитор требует perfectcode / magento2-windows-совместимость

Надеюсь это будет полезно.

Евгений Левинский
источник
0

Я получил ту же ошибку на Linux. Если вы используете Magento в режиме разработчика, это может произойти, потому что Magento не понимает символические ссылки. Чтобы разрешить символические ссылки, просто выполните следующий sql:

update `core_config_data` set `value`='1' where `path`='dev/template/allow_symlink';

Затем запустите: bin/magento cache:flush

HoaiNP
источник