Magento 2 Class * Factory ไม่มีอยู่


15

ฉันพยายามติดตั้งปลั๊กอินและฉันลบ var / generation และ var / cache / * ฉันได้ตรวจสอบ MAGE_MODE และฉันอยู่ในนักพัฒนา แต่ตอนนี้เมื่อฉันเข้าถึงส่วนหน้าและผู้ดูแลระบบฉันได้รับข้อผิดพลาดแบบสุ่มที่บอกว่าหมายถึงสิ่งต่าง ๆ เช่น: Class Magento\Customer\Model\CustomerFactory does not exist

ระดับวีโอไอพี \ ขาย \ รุ่น \ ResourceModel \ รายงาน \ OrderFactoryไม่อยู่

บางคลาสกำลังถูกสร้าง แต่ไม่ใช่ทั้งหมด ฉันพยายามล้างแคชอีกครั้งและโฟลเดอร์สร้าง แต่แล้วฉันก็พบข้อผิดพลาดเดียวกัน

ความคิดใด ๆ


1
ตรวจสอบสิทธิ์ในโฟลเดอร์ var / generation
Marius

มันเขียนว่า drwxrwxrw- 5
jstrez77

ฉันต้องทำความสะอาดโฟลเดอร์ var / generation สองสามครั้งไปที่หน้าแรกก่อนอื่นจากนั้นผู้ดูแลระบบจากนั้นเข้าสู่ระบบจากนั้นล้าง ... และใช้งานได้ ... ?? ฉันไม่เข้าใจสิ่งนี้
jstrez77

สิทธิ์อย่างแน่นอนภายในโฟลเดอร์ 'var / generation'
Travis van der Font

คำตอบ:


21

Magento 2 สร้างคลาส Factory ภายในvar/generationไดเรกทอรี ดังนั้นหากมีปัญหาการอนุญาตโฟลเดอร์หรือปัญหาเจ้าของโฟลเดอร์ในไดเรกทอรีนั้นจะไม่สามารถสร้างคลาสจากโรงงานและคุณได้รับข้อผิดพลาดดังกล่าว

เมื่อคุณล้างvar/generationไดเรกทอรีและตั้งค่าการอนุญาตที่เหมาะสมแล้วข้อผิดพลาดนี้ควรได้รับการแก้ไข

ดูเพิ่มเติมเกี่ยวกับการสร้างรหัสใน Magento 2


อาจจะยังvar/diหรือvar/cacheดูdevdocs.magento.com/guides/v2.2/install-gde/trouble/...
อิวาน

10

สำหรับฉันฉันลบvar/generationโฟลเดอร์จากนั้นฉันรันmagento setup:di:compileซึ่งสร้างคลาสที่จำเป็นทั้งหมด

(ในกรณีของฉัน: จากนั้นฉันพบปัญหาแคชฉันลบโฟลเดอร์แคชเริ่มต้น)

จากนั้นก็แก้ไขปัญหาของฉัน ไชโย !!


1
จำเป็นต้องเปลี่ยนเจ้าของไฟล์ในตอนท้าย
moshe beeri

5

ในเวอร์ชันใหม่ของ magento เช่น 2.2.2 และสูงกว่าพา ธ การสร้างโค้ดนี้เปลี่ยนเป็น

<Magento root folder>/generated

ดังนั้นคุณต้องตรวจสอบการอนุญาตสำหรับโฟลเดอร์นี้ด้วย คุณต้องเรียกใช้คำสั่งต่อไปนี้ที่รากของไดเรกทอรีการติดตั้ง Magento จะแก้ปัญหานี้ได้:

sudo chmod -R 777 generated/

ล้างแคชและเริ่มต้น
Hassan Ali Shahzad

มันทำงานให้ฉัน
ครบกำหนด

1

จำเป็นต้องใช้คำสั่งต่อไปนี้:

sudo php -f bin/magento setup:di:compile 

sudo rm -rf pub/static/*/*; sudo rm -rf var/*/*; 
sudo php -f bin/magento setup:static-content:deploy -f  

sudo php bin/magento cache:clean

นอกจากนี้ยังจำเป็นต้องได้รับอนุญาตที่เหมาะสม ถ้าเกี่ยวกับการผลิตคุณจะต้องดำเนินการอนุญาตที่เหมาะสม แต่บนเครื่องท้องถิ่นคุณสามารถเรียกใช้สิทธิ์เต็มรูปแบบ:

sudo chmod -R 777 *

1

ให้สิทธิ์ 777 และเปลี่ยนความเป็นเจ้าของให้กับ www-data ของโฟลเดอร์ที่สร้างขึ้น / รหัสแล้วเรียกใช้คำสั่ง sudo php bin/magento setup:di:compileล้างแคชและการแก้ไขปัญหาของคุณจะได้รับการแก้ไข


1

มันเป็นเพียง<magento-root>/var/ปัญหาการอนุญาตโฟลเดอร์

ดำเนินการคำสั่งด้านล่างโดยใช้โหมด CLI

sudo chmod -R 777 var/

0

Magento 2 สร้างคลาสจากโรงงานในvar/generationโฟลเดอร์และหากคุณเพิ่มพารามิเตอร์ใหม่ลงใน__construct()คลาสของคุณและคลาสของ Factory นั้นไม่มีอยู่ Magento 2 จะแสดงข้อความแสดงข้อผิดพลาดด้านบน แม้ว่าจะมีวิธีแก้ปัญหาเพียงเล็กน้อยสำหรับคำถามของคุณ แต่ฉันสามารถแนะนำวิธีแก้ปัญหาอื่นที่ไม่ต้องการให้คุณลบโฟลเดอร์รุ่นของคุณ โปรดใช้คำสั่งด้านล่างหลังจากทำการเปลี่ยนแปลงใด ๆ ที่เกี่ยวข้องกับคลาสของโรงงาน:

bin/magento setup:di:compile

คำสั่งนี้มีประโยชน์มากขึ้นบนเซิร์ฟเวอร์ที่ใช้งานจริง


-2

คลาส ... โรงงานไม่มีอยู่หมายความว่าคลาสรุ่นของคุณไม่โหลด ในฐานะ Magento 2 ที่ใช้การเขียนโปรแกรมแบบแยกส่วนดังนั้นเราต้องระบุ class model ที่เราต้องการใช้อย่างชัดเจน เราสามารถใช้คลาสโมเดลของเราในสองประเภท:

1. โดย "ใช้"

use Magento\Customer\Setup\CustomerSetupFactory;

public function __construct(CustomerSetupFactory $customerSetupFactory)
{
    $this->customerSetupFactory = $customerSetupFactory;
}
  1. โดยตรง

    public function __construct(Magento\Customer\Setup\CustomerSetupFactory $customerSetupFactory){
    
    $this->customerSetupFactory = $customerSetupFactory;
    
    }

เมื่อคุณกด URL ( http://domain.com/ ชื่อโมดูลส่วนหน้าของคุณ) ของปลั๊กอินบนเบราว์เซอร์กว่า Magento จะสร้างรหัสสำหรับโมดูลของคุณดังต่อไปนี้:

\var\generation\Your Vendor Directory\Your Module Directory\Controller
\var\generation\Your Vendor Directory\Your Module Directory\Model

ในกรณีของคุณคุณต้องตรวจสอบ "CustomerFactory" และ "OrderFactory" ใช้เป็นรูปแบบข้างต้นหรือไม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.