Magento 2 - Trình quản lý đối tượng cố gắng khởi tạo lớp Trừu tượng. ( Lỗi nghiêm trọng )


37

Chơi xung quanh với Magento 2 nhưng gặp vấn đề tôi không thể quấn đầu. Trình quản lý đối tượng cố gắng khởi tạo lớp Trừu tượng, điều này gây ra Lỗi nghiêm trọng. Có ai biết điều gì có thể gây ra điều này hoặc chỉ cho tôi đi đúng hướng?

Lỗi

Fatal error: Cannot instantiate abstract class Magento\Framework\Model\Resource\AbstractResource in /lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php on line 75

Vấn đề

Mô-đun của tôi có một mô hình mở rộng \Magento\Quote\Model\Quote. Hàm tạo của mô hình này có dòng sau đây tiêm vào đây:

\Magento\Framework\Model\Resource\AbstractResource $resource = null,.

Bộ điều khiển khởi tạo mô hình mở rộng \Magento\Backend\App\Actionvà sử dụng $this->_objectManager->create()để khởi tạo mô hình.

Điều tôi không thể quấn lấy đầu là nếu tôi khởi tạo mô hình Magento thì nó chỉ hoạt động nhưng nếu tôi khởi tạo mô hình của mình thì nó cố gắng khởi tạo lớp trừu tượng này để ném lỗi ở trên. Điều gì bảo người quản lý đối tượng làm điều này và làm thế nào tôi có thể giải quyết vấn đề của mình?

Suy nghĩ đầu tiên của tôi là Magento sử dụng di.xmlđể thay thế cái này, thực hiện cái này hay cái gì đó, đây không phải là trường hợp.

Cảm ơn đã dành thời gian để đọc. Bất kỳ trợ giúp hoặc đầu vào về vấn đề này được đánh giá cao.


bạn có thể gửi mã của bạn trong câu hỏi?
Marius

Có lẽ bạn có thể cụ thể hơn một chút? Toàn bộ lớp điều khiển và mô hình khởi tạo là rất lớn và việc thêm chúng vào câu hỏi không giúp dễ hiểu vấn đề ban đầu hơn. Hàm hành động hoặc hàm tạo sẽ đủ?
rofavadeka

Đủ công bằng. Đăng tên lớp của bạn, những gì nó mở rộng, những gì nó thực hiện và __constructphương pháp của mô hình của bạn.
Marius

Theo yêu cầu :) phần trên cùng của mô hình. Tôi nghĩ Chris có giải pháp, sẽ kiểm tra điều này và lấy lại cho bạn. Cảm ơn Marius.
rofavadeka

Vâng. Tôi nghĩ Chris đã nhận nó. :)
Marius

Câu trả lời:


109

Điều này có thể xảy ra nếu lớp phụ của bạn thêm các phụ thuộc mới sau các phụ thuộc tùy chọn hiện có của lớp cha.

Đoạn trích từ cha mẹ

    \Magento\Quote\Model\Cart\CurrencyFactory $currencyFactory,  // required
    JoinProcessorInterface $extensionAttributesJoinProcessor,    // required
    \Magento\Framework\Model\Resource\AbstractResource $resource = null,       //optional
    \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,  //optional
    array $data = [] //optional
)}

Làm thế nào mã có thể thay đổi những gì là tùy chọn

    \Magento\Quote\Model\Cart\CurrencyFactory $currencyFactory,  // required
    JoinProcessorInterface $extensionAttributesJoinProcessor,    // required
    \Magento\Framework\Model\Resource\AbstractResource $resource = null,       // required (even though it has a default value, because it is followed by parameters that don't have default values)
    int $x, // required
    \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,  // optional (still optional because there are no required parameters following it)
    array $data = [] // optional
)}

Trình quản lý đối tượng Magento 2 sẽ cố gắng đưa vào bất kỳ tham số cần thiết nào. Vì vậy, điều này có thể xảy ra nếu bạn thêm một tham số bắt buộc vào cuối hàm tạo.

Bạn có thể khắc phục điều này bằng cách di chuyển bất kỳ tham số cần thiết mới nào lên trên các tham số tùy chọn.


1
Chris, bạn đã kiếm được một lời cảm ơn lớn! Bạn đã giải quyết vấn đề của tôi thời gian lớn.
rofavadeka

Và một LỚN CẢM ƠN BẠN. Tôi yêu bạn
Yonn Trimoreau

Giải pháp @Chris do bạn cung cấp đã giúp tôi, cảm ơn
Mukesh

Giải thích tuyệt vời!
Henry Bùi

Vấn đề của tôi là khi sử dụng tính năng tự động hoàn thành trong phpStorm, nó cũng không mang lại phần = null: /
OZZIE

0

Đôi khi một số mô-đun đã được cập nhật và các tham chiếu dưới / được tạo chưa được cập nhật.

Chỉ cần làm một bin/magento setup:di:compilevà thử lại.

(Làm việc cho tôi khi cập nhật mô-đun thanh toán và / thanh toán không tải)

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.