Magento 2'ye neden ProductRepositoryInterface enjekte edemiyorum?


12

Ürün deposunu enjekte etmek istediğim bir denetleyici eylemim var

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;
    }

Yapıcı argümanlarımı hangi sıraya koyarsam yapayım, Magento'nun bağımlılık enjeksiyonu productRepositoryPHP'nin atmasına ve argüman hatasına neden olan argüman için her zaman geçersiz bir sınıf enjekte eder . storeManagerGetd sadece para cezası enjekte etti. Önbellekleri temizlemek işe yaramadı.

İşte atılan istisna:

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.

Hata iletisindeki sınıf adları ve bağımsız değişken konumları değişir ancak hata tanımı her zaman aynıdır. Yapıcıdan kaldırılması ProductRepositoryInterfaceher şeyi tekrar yapar.


Re: "Magento'nun bağımlılık enjeksiyonu her zaman productRepository argümanı için geçersiz bir sınıf enjekte eder" Kesin hatayı dahil etmek, diğer insanların sorunu teşhis etmesine yardımcı olacaktır.
Alan Storm

1
var / nesil'i temizledin mi?
Marius

@AlanStorm. Bunun için üzgünüm. Soruyu düzenledim.
Mridang Agarwalla

Yanıtlar:


18

Bu genellikle kurucuya başka bir parametre eklediğinizde ortaya çıkar çünkü Magento onu var / generation'de önbelleğe alır. Magento'yu önleme cihazını yenilemeye zorlayan var / jenerasyonu temizlemeniz gerekir .


Haklı görünüyorsun. Yönetici önbelleklerini temizledim ve bu yardımcı olmadı.
Mridang Agarwalla

2
Yeni kurulumda gibi görünüyor, oluşturulan klasör var değil kök klasör yapısında, yardımcı olabilir
xelber

Özel bir modül oluşturduk ve bu kodu Custom \ Module \ MagentoU \ Test sınıfında deniyorum; 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" />
Ashwani Shukla

Hala aynı hatayı alan her şeyi denedim 4. Özel \ Modül \ MagentoU \ Test :: __ construct () parametresine iletilen Argüman 4, Özel \ Modül \ Api \ ProductRepositoryInterface örneği, Magento \ Katalog \ Model \ ProductRepository \ Interceptor örneği verilmiş olmalıdır
Ashwani Shukla

Ondan php bin/magento setup:upgradesonra koş
Black

4

Daha fazla ayrıntı olmadan söylemek zor, ama youe kod örneği aslında böyle bir şey olduğunu varsayalım

namespace Packagename\Module\Controller;
class Test extends Action
{

    private $_productRepository;

    public function __construct(
        Context $context,
        StoreManagerInterface $storeManager,
        ProductRepositoryInterface $productRepository    
    ) {
        parent::__construct($context);
        $this->_storeManager = $storeManager;
        $this->_productRepository = $productRepository;
    }
}

yani bir PHP ad alanı ile (çünkü tüm kontrolörlerin Magento 2'de ad alanları vardır).

Bu durumda, kod örneğinizde aslında bir Packagename\Module\Controller\ProductRepositoryInterfacesınıf enjekte etmeye çalışıyorsunuzdur . Ad alanı öneki olmadan bir sınıf adı kullanırsanız, PHP geçerli ad alanında bir sınıf istediğinizi varsayar .


4

Bu hata iletisiyle bir denetleyiciye herhangi bir modül enjekte edemedim. Var / nesil silinmesi benim için çalıştı


2

Benim için çalışan derleme komutunu çalıştırmak.

/ var / www / magento2-root $ php bin / magento kurulumu: di: derleme

0

Magento 2.2'de silme klasörü:

"generated/code"

Ve bu sorunu çözecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.