Saya memiliki aksi pengontrol di mana saya ingin menyuntikkan repositori-produk
namespace Nosto\Tagging\Controller\Export;
use Magento\Catalog\Api\ProductRepositoryInterface;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Backend\App\Action;
use Magento\Framework\App\Action\Context;
class Test extends Action
{
private $_productRepository;
public function __construct(
Context $context,
StoreManagerInterface $storeManager,
ProductRepositoryInterface $productRepository
) {
parent::__construct($context);
$this->_storeManager = $storeManager;
$this->_productRepository = $productRepository;
}
Tidak peduli urutan apa pun yang saya tempatkan argumen konstruktor saya, ketergantungan-injeksi Magento selalu menyuntikkan kelas yang tidak valid untuk productRepository
argumen yang menyebabkan PHP untuk melempar dan kesalahan argumen. The storeManager
getd disuntikkan baik-baik saja. Membersihkan cache tidak membantu.
Inilah pengecualian yang dilemparkan:
Recoverable Error: Argument 3 passed to Nosto\Tagging\Controller\Export\Test::__construct() must implement interface Magento\Catalog\Api\ProductRepositoryInterface, instance of Nosto\Tagging\Helper\Account given.
Nama kelas dan posisi argumen dalam pesan kesalahan berubah tetapi definisi kesalahan selalu sama. Menghapus ProductRepositoryInterface
dari konstruktor membuat semuanya baik kembali.
magento2
controllers
dependency-injection
action
Mridang Agarwalla
sumber
sumber
Jawaban:
Ini biasanya muncul ketika Anda menambahkan parameter lain ke konstruktor karena Magento menyimpannya dalam var / generation. Anda perlu menghapus var / generasi yang memaksa Magento untuk membuat ulang interceptor.
sumber
public function __construct( \Magento\Catalog\Api\ProductRepositoryInterface $productRepository, \Magento\Catalog\Model\ProductFactory $productFactory, \Magento\Checkout\Model\Session $session, \Custom\Module\Api\ProductRepositoryInterface $unit1ProductRepository, array $data, $justAParameter = "" )
<preference for="Custom\Module\Api\ProductRepositoryInterface" type="Magento\Catalog\Model\ProductRepository" />
php bin/magento setup:upgrade
setelahnyaSulit untuk mengatakan tanpa rincian lebih lanjut, tetapi saya akan menganggap Anda sampel kode benar-benar terlihat seperti ini
yaitu dengan namespace PHP (karena semua pengontrol memiliki ruang nama di Magento 2).
Jika itu masalahnya, maka dalam sampel kode Anda, Anda benar-benar mencoba menyuntikkan
Packagename\Module\Controller\ProductRepositoryInterface
kelas. Jika Anda menggunakan nama kelas tanpa awalan namespace, PHP menganggap Anda menginginkan kelas di namespace saat ini .sumber
Saya tidak dapat menyuntikkan modul apa pun ke controller dengan pesan kesalahan ini. Menghapus var / generasi bekerja untuk saya ..
sumber
Apa yang berhasil bagi saya adalah menjalankan perintah kompilasi.
sumber
Di folder hapus magento 2.2:
Dan itu akan menyelesaikan masalah.
sumber