अमान्य टेम्प्लेट फ़ाइल magento2.3.0


13

मैं हाल ही में Magento के नवीनतम संस्करण यानी Magento 2.3.0 को स्थानीय वैंप मशीन के साथ स्थापित कर चुका हूं php 7.2.4

कमांड लाइन इंटरफेस का उपयोग करके इसे स्थापित किया।

लेकिन जब मैं इसे चलाने के लिए थक गया तो मुझे इसमें त्रुटि दिखाई दी

Exception #0 (Magento\Framework\Exception\ValidatorException): Invalid template file: 'D:/wamp64/www/mage23/vendor/magento/module-theme/view/frontend/templates/page/js/require_js.phtml' in module: '' block's name: 'require.js'

क्या यह आपके लिए काम कर रहा है?
रोहन हापानी

नहीं अभी भी काम नहीं कर रहे हैं सभी extenssion वहाँ हैं।
मैगलेरनर

जवाबों:


37

हाँ, यह विंडोज़ के साथ समस्या है। विंडोज विभाजक के रूप में "\" का उपयोग करता है, सरणी "निर्देशिकाओं" में विभाजक के रूप में "/" प्रविष्टियां होती हैं, इसलिए चेक हमेशा विफल रहेगा। तो आपको इसे कोर फाइल में विभाजक को बदलकर ठीक करना होगा:

Magento\Framework\View\Element\Template\File\Validator

फ़ंक्शन .PathInDirectories isPathInDirectories फ़ंक्शन में नीचे दिए गए कोड को प्रतिस्थापित करता है

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

यह एक बहुत ही सामान्य मुद्दा है, बहुत से लोग इस तथ्य से अवगत नहीं हैं कि मैगेंटो आधिकारिक तौर पर विंडोज सर्वर का समर्थन नहीं करता है! कुछ हैक्स और गैर-आधिकारिक संशोधनों जैसे कि यह एक विंडोज मशीन पर काम करने के लिए किया जाना चाहिए, यदि आप नीचे दिए गए लिंक "मैगेंटो 2.3.x प्रौद्योगिकी स्टैक आवश्यकताओं" पर जाएं तो आप देख सकते हैं कि एकमात्र समर्थित ओएस है "लिनक्स x86-64"। devdocs.magento.com/guides/v2.3/install-gde/…
Yacoub Oweis

विंडोज़ सिस्टम के लिए वास्तविक कोड क्या होना चाहिए? मैं पहली बार '\' लाइन की कोशिश कर रहा हूँ, लेकिन इस सिंगल बैक-स्लैश की अनुमति नहीं है ...
Flutterer

ठीक है, इसलिए मुझे लगता है कि वे आधिकारिक तौर पर विंडोज का समर्थन नहीं करते हैं, लेकिन क्या वे सिर्फ DIRECTORY_SEPARATORदुनिया के बाकी हिस्सों की तरह उपयोग नहीं कर सकते हैं और यह विशिष्ट समस्या नहीं है जो विंडोज में इसे काम करने से केवल एक चीज की तरह लगता है?
एसीजे

10

मेरे लिए, समाधान किया गया कार्य फ़ाइल \ विक्रेता \ magento \ फ्रेमवर्क \ View \ Element \ Template \ File \ Validator.php पर जाकर और नीचे फ़ंक्शन फ़ंक्शन को नीचे के रूप में प्रतिस्थापित करके है:

> protected function isPathInDirectories($path, $directories) {
>     if (!is_array($directories)) {
>         $directories = (array)$directories;
>     }
>     $realPath = $this->fileDriver->getRealPath($path);
>     $realPath = str_replace('\\', '/', $realPath); // extra code added
>     foreach ($directories as $directory) {
>         if (0 === strpos($realPath, $directory)) {
>             return true;
>         }
>     }
>     return false; }

पुनश्च: यह विंडोज़ विशिष्ट मुद्दा है।


6

Magento 2.3 विंडोज़ का समर्थन नहीं करता है। आप यहां मेरा समाधान पा सकते हैं: लिंक विवरण यहां दर्ज करें


2
यह खिड़कियों का समर्थन नहीं करने के लिए इसके लिए कोई मतलब नहीं है लेकिन इस तरह के एक सरल "फिक्स" है।
RT

3

यह केवल Magento 2.3.0 का मुख्य मुद्दा नहीं है, लेकिन मैंने Magento 2.2.7 में भी इस समस्या का सामना किया। रीपैथ का उपयोग करने के बजाय खिड़कियों पर कोड का काम करने के लिए, विधि में पारित $ पथ तर्क का उपयोग करें

पथ /vendor/magento/framework/View/Element/Template/File/Validator.php पर जाएं और लाइन के बजाय

if (0 === strpos($realPath, $directory)) {

उपयोग

if (0 === strpos($path, $directory)) {

या इस चर्चा का अनुसरण करें https://github.com/magento/magento2/issues/19480


2

Magento 2.2.9 में /vendor/magento/framework/View/Element/Template/File/Validator.php इस कोड के साथ फ़ंक्शन कोड को बदलें

protected function isPathInDirectories($path, $directories)
{
    if (!is_array($directories)) {
        $directories = (array)$directories;
    }
    foreach ($directories as $directory) {
        if (0 === strpos(str_replace('\\', '/', $this->fileDriver->getRealPath($path)), $directory)) {
            return true;
        }
    }
    return false;
}

1

यह संभवतः विंडोज सिस्टम के तहत विकसित होने पर होता है।

फाइल में लाइन 140 पर जाएं Path /vendor/magento/framework/View/Element/Template/File/Validator.php इस कोड को लाइन में बदलें

$realPath = $this->fileDriver->getRealPath($path);

साथ में

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

कोड की इस लाइन से सावधान रहें

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

यह शायद php बैकस्लैश स्कैप के कारण काम नहीं करेगा। आपको PHP को स्पष्ट रूप से बताने के लिए डबल बैकस्लैश करना होगा कि यह यहाँ नई लाइन से नहीं बल्कि बैकस्लैश से निपट रहा है।


1

कृपया देखें कि, यह डबल स्लैश होना चाहिए अर्थात "\\"

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

1

जैसा कि बताया गया है कि विंडोज कॉम्पैटिबिलिटी है। लेकिन मैं विंडोज़ पर स्थानीय विकास और बाद में एक लिनक्स सर्वर पर तैनाती के लिए, जैसे माइग्रेटिंग सिस्टम, यहां तक ​​कि काम करने के लिए इसे थोड़ा अलग तरीके से बदलने की सिफारिश करूंगा। ताकि केवल मामले में आप विंडोज पर काम कर रहे हैं आप पथ समायोजित करेंगे।

में

\ विक्रेता \ Magento \ ढांचे \ देखें \ तत्व \ टेम्पलेट \ फ़ाइल \ Validator.php

में

फ़ंक्शन हैPathInDirectories ()

बदलने के

$realPath = $this->fileDriver->getRealPath($path);

साथ में:

a) PHP> = 7.2:

if (PHP_OS_FAMILY === 'Windows')
  $realPath = str_replace('\\', '/', $this->fileDriver->getRealPath($path));
else
  $realPath = $this->fileDriver->getRealPath($path);

b) PHP <7.2:

if (strtolower(substr(PHP_OS, 0, 3)) === 'win')
  $realPath = str_replace('\\', '/', $this->fileDriver->getRealPath($path));
else
  $realPath = $this->fileDriver->getRealPath($path);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.