Nieprawidłowy plik szablonu - problem z aktualizacją z 2.2.6 do 2.2.7 lub 2.3

16

Zaktualizowałem wersję 2.2.6 do wersji 2.2.7, ale wyświetla się poniżej błędu w mojej witrynie.

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}

Ten sam problem, z którym mam do czynienia, jeśli zaktualizuję witrynę z wersji 2.6 do wersji 2.3.

Czy jest jakieś rozwiązanie?

Sanjay Jethva
źródło
ten post rozwiązał mój problem.
Sanjay Jethva,

Odpowiedzi:

22

jeśli twoja instalacja magento działa w systemie Windows niż w niektórych wersjach magento, takich jak 2.2.7, musimy zastąpić tym kodem dostawcy pliku / 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;
}

i teraz ponownie załaduj aplikację magento.

Naveen Jain
źródło
1
Działał idealnie. Wielkie dzięki. +1
Shoaib Munir
1
wielkie dzięki, uratowałeś mi dzień. +1
Zeeshan Khuwaja,
12

Powinien to być tylko problem z lokalną instalacją, ponieważ instancja Magento działa w systemie Windows.

Może to być tymczasowa poprawka vendor\magento\framework\View\Element\Template\File\Validator.php

Przejdź do linii numer 114 i zmień numer linii i zamień poniżej linii

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

z

$filename = str_replace('\\', '/', $this->fileDriver->getRealPath($filename));
torhoehn
źródło
Witam @tho, zastosowałem to rozwiązanie, a strona się ładuje, ale strona główna i login administratora pokazują pustą stronę.
Sanjay Jethva,
1
Dzięki stary. pracował dla mnie. +1
Shoaib Munir
0

Aby bez problemu zaktualizować Magento 2.2.6 do Magento 2.3.0, właśnie zaktualizowałem jeden z naszych bieżących projektów z Magento 2.2.6 do 2.3.0 i nic nie zakłóca funkcjonalności trwającego projektu.

możesz łatwo zaktualizować za pomocą wiersza poleceń Magento,

Aby wykonać aktualizację ze starszej wersji do najnowszej wersji Magento 2.3, należy wykonać cztery kroki

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

Nie można po prostu dokonać aktualizacji, używając wyłącznie polecenia aktualizacji Composer.

Mam nadzieję, że będziesz pomocny powyżej kroków.

Rakesh Jesadiya
źródło
Witaj @Rakesh, używam php w wersji 7.1.7 i zastosowałem rozwiązanie Mr. Tho, a strona internetowa nie wyświetla żadnych błędów. mój sklep jest w trybie programowania. ale pokazuje pustą stronę.
Sanjay Jethva,
0

Miałem ten problem w moim przypadku był to moduł, którego użyłem w pliku register.php

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

problem leży w tym wierszu „ isset ($ file)? dirname ($ file): __DIR__”, więc zmieniłem go na „ __DIR__”, a teraz działa, mam nadzieję, że to pomoże.

Raul Encinas
źródło
0

Wiem, że to dość stary problem i wszyscy już znają rozwiązanie, ale stworzyłem szybki pakiet oparty na kompozytorze z poprawką, po prostu uruchom go w katalogu głównym Magento:

Kompozytor wymaga kompatybilności idealcode / magento2-windows

Mam nadzieję, że się przyda.

Jewgienij Lewiński
źródło
0

Mam ten sam błąd na Linuksie. Jeśli używasz Magento w trybie programisty, może się tak zdarzyć, ponieważ Magento nie rozumie dowiązań symbolicznych. Aby zezwolić na dowiązania symboliczne, po prostu uruchom następującą sql:

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

Następnie uruchomić: bin/magento cache:flush

HoaiNP
źródło