Magento 2 Class * Nhà máy không tồn tại


15

Tôi đã cố gắng cài đặt một plugin và tôi đã loại bỏ var / Generation và var / cache / *. Tôi đã kiểm tra MAGE_MODE và tôi là nhà phát triển nhưng bây giờ khi tôi truy cập vào giao diện người dùng và quản trị viên, tôi nhận được các lỗi ngẫu nhiên nói những điều có nghĩa như: Class Magento\Customer\Model\CustomerFactory does not exist

Class Magento \ Sales \ Model \ ResourceModel \ Report \ OrderFactory không tồn tại

Một số lớp đang được tạo, nhưng không phải tất cả. Tôi đã thử xóa bộ nhớ cache một lần nữa và thư mục thế hệ nhưng sau đó tôi cũng gặp phải lỗi tương tự.

Có ý kiến ​​gì không?


1
kiểm tra các quyền trên thư mục var / thế hệ
Marius

nó nói drwxrwxrw- 5
jstrez77

Tôi đã phải dọn dẹp thư mục var / Generation một vài lần, vào trang chủ trước, dọn dẹp, sau đó quản trị viên, sau đó đăng nhập, sau đó dọn dẹp ... và nó đã hoạt động ... ?? Tôi không hiểu điều này
jstrez77 24/2/2016

Quyền chắc chắn trong thư mục 'var / thế hệ'.
Travis van der Font

Câu trả lời:


21

Magento 2 tạo các lớp Factory bên trong var/generationthư mục. Vì vậy, nếu có vấn đề về quyền thư mục hoặc vấn đề chủ sở hữu thư mục với thư mục đó thì lớp nhà máy không thể được tạo và bạn gặp phải lỗi đó.

Khi bạn xóa var/generationthư mục và thiết lập quyền thích hợp cho nó thì lỗi này sẽ được giải quyết.

Xem thêm về tạo mã trong Magento 2


Cũng có thể var/dihoặc var/cache, xem devdocs.magento.com/guides/v2.2/install-gde/trouble/ mẹo
Yvan

9

Đối với tôi, tôi đã xóa var/generationthư mục sau đó tôi chạy magento setup:di:compilemà tạo ra tất cả các lớp cần thiết.

(trong trường hợp của tôi: Sau đó, tôi đã gặp phải vấn đề về bộ đệm, tôi đã xóa thư mục bộ đệm ban đầu.)

Sau đó, nó đã giải quyết vấn đề của tôi. Chúc mừng !!


1
cần thiết để thay đổi chủ sở hữu tập tin vào cuối
moshe beeri

5

Trong magento phiên bản mới như 2.2.2 trở lên, đường dẫn tạo mã này đã thay đổi thành

<Magento root folder>/generated

Vì vậy, bạn cần phải kiểm tra quyền cho thư mục này là tốt. Bạn cần chạy lệnh sau ở thư mục gốc của thư mục cài đặt Magento sẽ giải quyết vấn đề này:

sudo chmod -R 777 generated/

xóa bộ nhớ cache khi bắt đầu
Hassan Ali Shahzad

nó hoạt động với tôi
chiếu vào

1

Các lệnh sau là cần thiết để được thực thi:

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

Ngoài ra, sự cho phép thích hợp là cần thiết. Nếu trên sản xuất, bạn cần thực thi quyền thích hợp. Nhưng, trên máy cục bộ, bạn có thể chạy toàn quyền:

sudo chmod -R 777 *

1

Cấp quyền 777 và thay đổi quyền sở hữu đối với dữ liệu www của thư mục được tạo / mã và sau đó chạy lệnh sudo php bin/magento setup:di:compilexóa bộ nhớ cache và giải quyết vấn đề của bạn


1

Đó chỉ là <magento-root>/var/vấn đề cấp phép thư mục.

Thực hiện lệnh bên dưới bằng chế độ CLI

sudo chmod -R 777 var/

0

Magento 2 tạo các lớp Factory trong var/generationthư mục và nếu bạn thêm một tham số mới trong __construct()lớp Factory của bạn và nó không tồn tại thì Magento 2 sẽ ném thông báo lỗi ở trên. Mặc dù có một vài giải pháp đã đưa ra cho bạn câu hỏi, tôi có thể đề xuất cho bạn một giải pháp khác không yêu cầu bạn xóa thư mục thế hệ của mình. Vui lòng sử dụng lệnh dưới đây sau khi bất kỳ thay đổi nào được thực hiện liên quan đến các lớp Factory:

bin/magento setup:di:compile

Lệnh này có thể hữu ích hơn trên máy chủ sản xuất.


-2

Lớp ... Nhà máy không tồn tại có nghĩa là lớp mô hình của bạn không được tải. Vì Magento 2 dựa trên lập trình mô-đun, vì vậy chúng tôi cần chỉ định lớp mô hình nơi chúng tôi muốn sử dụng rõ ràng. Chúng ta có thể sử dụng lớp mô hình của mình theo hai loại:

1.by "sử dụng"

use Magento\Customer\Setup\CustomerSetupFactory;

public function __construct(CustomerSetupFactory $customerSetupFactory)
{
    $this->customerSetupFactory = $customerSetupFactory;
}
  1. Trực tiếp

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

Khi bạn nhấn URL ( http://domain.com/your tên trước của mô-đun) của plugin trên trình duyệt so với Magento sẽ tạo mã cho mô-đun của bạn như dưới đây:

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

Trong trường hợp của bạn, bạn cần kiểm tra "CustomerFactory" và "OrderFactory" có được sử dụng như định dạng trên hay không.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.