অবৈধ টেমপ্লেট ফাইল magento2.3.0


13

আমি সম্প্রতি স্থানীয় wamp মেশিনে magento সর্বশেষ সংস্করণ অর্থাৎ ম্যাজেন্টো ২.৩.০ ইনস্টল করেছি 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 সেখানে আছে।
MageLerner

উত্তর:


37

হ্যাঁ, উইন্ডোজগুলির সাথে এটিই সমস্যা। উইন্ডোজ "\" কে বিভাজক হিসাবে ব্যবহার করে, অ্যারে "ডিরেক্টরিগুলিতে" বিভাজক হিসাবে "/" সহ এন্ট্রি থাকে, তাই চেকটি সর্বদা ব্যর্থ হবে। সুতরাং আপনাকে কোর ফাইলটিতে বিভাজক প্রতিস্থাপনের মাধ্যমে এটি ঠিক করতে হবে:

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

ফাংশন isPathInDirectories মধ্যে কোড নিচে প্রতিস্থাপন isPathInDirectories ফাংশন

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

এটি একটি খুব সাধারণ সমস্যা, অনেক লোক এই বিষয়টি সম্পর্কে অবগত নয় যে ম্যাজেন্টো আনুষ্ঠানিকভাবে উইন্ডোজ সার্ভারগুলিকে সমর্থন করে না! কিছু হ্যাক এবং আন-অফিশিয়াল পরিবর্তন যেমন উইন্ডোজ মেশিনে এটি কাজ করার জন্য এটি করা দরকার, আপনি নীচের লিঙ্কটি "ম্যাজেন্টো ২.৩.x প্রযুক্তি স্ট্যাক প্রয়োজনীয়তা" ঘুরে দেখেন আপনি দেখতে পাচ্ছেন যে কেবলমাত্র সমর্থিত ওএস "লিনাক্স x86-64"। devdocs.magento.com/guides/v2.3/install-gde/…
ইয়াকুব

উইন্ডোজ সিস্টেমের জন্য আসল কোডটি কী হওয়া উচিত? আমি প্রথমে '\' লাইন চেষ্টা করছি তবে এই একক ব্যাক-স্ল্যাশ অনুমোদিত নয় ...
ফ্লোটারার

ঠিক আছে, তাই আমি পেয়েছি যে তারা আনুষ্ঠানিকভাবে উইন্ডোজকে সমর্থন করে না, তবে তারা কি কেবল DIRECTORY_SEPARATORবিশ্বের অন্যান্য অংশের মতো ব্যবহার করতে পারে না এবং এই নির্দিষ্ট সমস্যাটি নাও থাকতে পারে যা উইন্ডোজে এটি কাজ করা থেকে একমাত্র জিনিস বলে মনে হয়?
এসিজে

10

আমার জন্য সমাধানটি হ'ল ফাইল \ বিক্রেতা \ ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ দেখুন \ এলিমেন্ট \ টেমপ্লেট \ ফাইল \ ভ্যালিডেটার.এফপি এবং নীচের মত ফাংশন সংজ্ঞাটি প্রতিস্থাপন করে:

> 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
এটি উইন্ডোজ সমর্থন না করার জন্য কোনও ধারণা রাখে না তবে এর মধ্যে একটি সাধারণ "ফিক্স" রয়েছে।
আরটি

3

এটি কেবল ম্যাজেন্টো ২.৩.০-এর মূল সমস্যা নয়, তবে আমি ম্যাজেন্টো ২.২..7-তেও সেই সমস্যার মুখোমুখি হয়েছি। কোডটি উইন্ডোতে রিয়েলপথ ব্যবহার না করে কাজ করার জন্য কেবল পদ্ধতিতে পাস করা $ পাথ আর্গুমেন্টটি ব্যবহার করুন

লাইনের পরিবর্তে / সেকেন্ডে / উইন্ডোয়ার / মেম্যান্টো / ফ্রেমওয়ার্ক / ভিউ / এলিমেট / টেম্পলেট / ফাইল / ভ্যালিডেটার.পিএপ এ যান

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

ব্যবহার

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

অথবা এই আলোচনাটি https://github.com/magento/magento2/issues/19480 অনুসরণ করুন


2

ম্যাজেন্টো ২.২.৯ এ / কোডের সাথে / ভেন্ডর / সেমেন্টো / ফ্রেমওয়ার্ক / ভিউ / এলিমেট / টেম্পলেট / ফাইল / ভালিডেটার.এফপি isPathInD ডিরেক্টরীজ ফাংশন কোডটি এই কোডটি দিয়ে প্রতিস্থাপন করুন

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 লাইনে যান এই লাইন কোডটি প্রতিস্থাপন করুন

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

সঙ্গে

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

এই লাইন কোড থেকে সাবধান

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

এটি সম্ভবত পিএইচপি ব্যাকস্ল্যাশ স্ক্যাপের কারণে কাজ করবে না। আপনাকে পিএইচপি স্পষ্ট করে বলতে যে ডাবল ব্যাকস্ল্যাশ করতে হবে এটি এখানে নতুন লাইনটির সাথে কাজ করছে না বরং একটি ব্যাকস্ল্যাশ।


1

দয়া করে এটি দেখুন, এটি দ্বিগুণ স্ল্যাশ হওয়া উচিত "" \\ "

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

1

যেমনটি উল্লেখ করা হয়েছে উইন্ডোজ সামঞ্জস্যতা। তবে সিস্টেমগুলি মাইগ্রেট করার পরেও এটি কাজ করার জন্য কিছুটা আলাদাভাবে পরিবর্তনের সুপারিশ করব, যেমন উইন্ডোজের স্থানীয় বিকাশ এবং পরে লিনাক্স সার্ভারে স্থাপনার জন্য। যাতে আপনি যদি উইন্ডোজে অপারেট করছেন তবে আপনি পথটি সামঞ্জস্য করতে পারবেন।

ভিতরে

\ বিক্রেতা \ Magento \ ফ্রেমওয়ার্ক \ দেখুন \ উপাদান \ টেমপ্লেট \ ফাইল \ Validator.php

ভিতরে

ফাংশনটিপথইনডাইরেক্টরিজ ()

প্রতিস্থাপন করা

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

সঙ্গে:

ক) পিএইচপি> = 7.2:

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

খ) পিএইচপি <7.2:

if (strtolower(substr(PHP_OS, 0, 3)) === 'win')
  $realPath = str_replace('\\', '/', $this->fileDriver->getRealPath($path));
else
  $realPath = $this->fileDriver->getRealPath($path);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.