无效的模板文件-从2.2.6升级到2.2.7或2.3的问题


16

我已经将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,我将面临同样的问题。

有什么解决办法吗?


这篇文章解决了我的问题。
Sanjay Jethva '18

Answers:


22

如果您的magento安装是在Windows上运行的,而不是像2.2.7中的magento的某些版本那样运行,我们必须此文件替换文件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
Shoaib Munir

1
非常感谢,您救了我的一天。+1
Zeeshan Khuwaja

12

这应该只是本地安装的问题,因为您的Magento实例正在Windows上运行。

所以这可能是暂时的解决方法 vendor\magento\framework\View\Element\Template\File\Validator.php

转到行号114并更改行号并在行下方替换

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

$filename = str_replace('\\', '/', $this->fileDriver->getRealPath($filename));

您好@tho,我已经应用了此解决方案,现在网站正在加载,但主页和管理员登录显示空白页。
Sanjay Jethva '18

1
谢了哥们。为我工作。+1
Shoaib Munir

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 update命令简单地进行升级。

希望以上步骤对您有所帮助。


您好@Rakesh,我使用的是PHP版本7.1.7,并应用了Mrtho tho解决方案,并且网站未显示任何错误。我的商店处于开发模式。但显示空白页。
Sanjay Jethva '18

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

我知道这是一个非常老的问题,每个人都已经知道了解决方案,但是我创建了带有修复程序的基于Composer的快速软件包,只需在您的Magento根目录中运行:

作曲家需要Idealcode / magento2-windows-compatibility

我希望它会有用。


0

我在Linux上遇到了同样的错误。如果您以开发人员模式运行Magento,则可能会发生这种情况,因为Magento无法理解符号链接。要允许符号链接,只需执行以下sql:

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

然后运行: bin/magento cache:flush

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.