আমি কেন ম্যাজেন্টো 2-তে প্রোডাক্টের রিপোসিটোরি ইন্টারফেস ইনজেক্ট করতে পারি না?


12

আমার একটি কন্ট্রোলার অ্যাকশন রয়েছে যার মধ্যে আমি পণ্য-সংগ্রহশালা ইনজেকশন করতে চাই

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

আমি আমার নির্মাতার যুক্তিগুলি কী আদেশ করি তা বিবেচনা না করেই, ম্যাজেন্টোর নির্ভরতা-ইনজেকশন সর্বদা productRepositoryপিএইচপি নিক্ষেপ এবং যুক্তি ত্রুটির জন্য ত্রুটির জন্য একটি অবৈধ শ্রেণিকে ইনজেকশন দেয়। storeManagerGetd ইনজেকশনের শুধু জরিমানা। ক্যাশে সাফ করা কোনও সহায়তা করেনি।

এখানে ফেলে দেওয়া ব্যতিক্রম এখানে:

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.

ত্রুটি বার্তায় শ্রেণীর নাম এবং যুক্তির অবস্থানগুলি পরিবর্তন হয় তবে ত্রুটির সংজ্ঞা সর্বদা একই থাকে। ProductRepositoryInterfaceকনস্ট্রাক্টর থেকে অপসারণ আবার সবকিছু ঠিক করে তোলে।


পুনরায়: "ম্যাজেন্টোর নির্ভরতা-ইনজেকশন সর্বদা পণ্যগুলির জন্য একটি অবৈধ শ্রেণিকে ইনজেকশন রেপোসিটরি যুক্তি" সঠিক ত্রুটি সহ অন্যান্য লোকেরা সমস্যা নির্ণয় করতে সহায়তা করবে।
অ্যালান ঝড়

1
আপনি কি ভেরি / জেনারেশন সাফ করেছেন?
মারিয়াস

@AlanStorm। এর জন্যে দুঃখিত. আমি প্রশ্নটি সম্পাদনা করেছি।
মৃডাং আগারওয়ালা

উত্তর:


18

আপনি যখন কনস্ট্রাক্টরের সাথে অন্য একটি প্যারামিটার যুক্ত করেন এটি সাধারণত ফসল আপ করে দেয় কারণ ম্যাগেন্টো এটিকে বিভিন্ন / প্রজন্মের মধ্যে ক্যাশে করে। আপনাকে ভের / প্রজন্মকে সাফ করতে হবে যা ম্যাজেন্টোকে ইন্টারসেপ্টরটিকে পুনরায় তৈরি করতে বাধ্য করে।


দেখে মনে হচ্ছে আপনি ঠিক বলেছেন। আমি অ্যাডমিনের কাছ থেকে ক্যাশে সাফ করে দিচ্ছি এবং তাতে কোন লাভ হয়নি।
মৃডাং আগারওয়ালা

2
নতুন ইনস্টলেশনতে দেখে মনে হচ্ছে, উত্পন্ন ফোল্ডারটি মূল ফোল্ডারের কাঠামোতে
ভেরায় নেই

আমি একটি কাস্টম মডিউল তৈরি করেছি এবং এই কোডটি কাস্টম \ মডিউল \ MagentoU \ পরীক্ষার ক্লাসের মধ্যে চেষ্টা করে দেখছি; 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" />
আশ্বানি শুক্ল

চেষ্টা সবকিছু এখনও একই ত্রুটি পেয়ে আর্গুমেন্ট 4 কাস্টম \ মডিউল \ MagentoU \ টেস্ট :: __ কনস্ট্রাক্ট () কাস্টম \ মডিউল \ Api, \ ProductRepositoryInterface, Magento \ ক্যাটালগ দৃষ্টান্ত একটি দৃষ্টান্ত হতে হবে \ মডেল \ ProductRepository \ আটককারী দেওয়া প্রেরণ
অশ্বিনী শুক্লা

চালান php bin/magento setup:upgradeপরে
ব্ল্যাক

4

আরও বিশদ ছাড়াই বলা শক্ত, তবে আমি ধরে নিচ্ছি যে আপনার কোড নমুনাটি আসলে এরকম কিছু দেখাচ্ছে

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

যেমন একটি পিএইচপি নেমস্পেসের সাথে (যেহেতু সব কন্ট্রোলারদের ম্যাজেন্টো 2 তে নেমস্পেস রয়েছে)।

যদি এটি হয় তবে আপনার কোডের নমুনায় আপনি আসলে একটি Packagename\Module\Controller\ProductRepositoryInterfaceবর্গ ইনজেক্ট করার চেষ্টা করছেন । যদি আপনি কোনও নেমস্পেস উপসর্গ ব্যতীত কোনও শ্রেণীর নাম ব্যবহার করেন তবে পিএইচপি ধরে নেয় আপনি বর্তমান নেমস্পেসে একটি ক্লাস চান ।


4

আমি এই ত্রুটি বার্তাটি দিয়ে কোনও নিয়ামকের কাছে কোনও মডিউল ইনজেক্ট করতে সক্ষম হইনি। ভেরি / প্রজন্ম মোছা আমার পক্ষে কাজ করেছে ..


2

আমার জন্য যা কাজ করেছে তা কম্পাইল কমান্ড চালাচ্ছে।

/ var / www / magento2-root $ পিএইচপি বিন / ম্যাজেন্টো সেটআপ: ডি: সংকলন

0

ম্যাজেন্টো ২.২ এ ফোল্ডার মুছুন:

"generated/code"

এবং এটি সমস্যার সমাধান করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.