এক্সটেনশনঅ্যাট্রিবিউটস () প্রয়োগের সঠিক উপায়


11

আমি ভাবছিলাম, এক্সটেনসিবল ইএভি মডেলটি বাস্তবায়নের সঠিক উপায় কী।

আমি দেখতে পাচ্ছি যে Magento\Catalog\Model\Productপদ্ধতিটি getExtensionAttributes()এভাবে প্রয়োগ করা হয়:

public function getExtensionAttributes()
{
    $extensionAttributes = $this->_getExtensionAttributes();
    if (!$extensionAttributes) {
        return $this->extensionAttributesFactory->create('Magento\Catalog\Api\Data\ProductInterface');
    }
    return $extensionAttributes;
}

তবে অন্যদের মধ্যে গ্রাহক বা বিভাগের মডেলগুলির মতো এটি ঠিক

public function getExtensionAttributes()
{
    return $this->_getExtensionAttributes();
}

এক্সটেনশন_ট্রিবিউট কী আগে সেট না করা থাকলে এটি একটি NUL ফলাফলের দিকে নিয়ে যায়।

ব্যবহারিকভাবে, আমি প্রথমটি পছন্দ করব। এই Magento\Framework\Api\ExtensionAttributesInterfaceমডেলটি সবেমাত্র তাত্ক্ষণিকভাবে চালিত হওয়া সত্ত্বেও আমি সর্বদা উদাহরণটি পেতে নিশ্চিত হতে পারি ।

তবে কেন এটি অন্য মডিউলগুলিতে ব্যবহৃত হয় না? আমরা গ্রাহক মডিউলটিতে যে ডেটা মডেলগুলি দেখি তা কি নতুন বিচ্ছেদের বিরুদ্ধে? যদি তা হয় তবে কীভাবে আমরা এক্সটেনশন বৈশিষ্ট্যগুলি আরম্ভ করার কথা?

উত্তর:


1

Magento যদি কোন এক্সটেনশন বৈশিষ্ট্য আছে একটি খালি বস্তুর জেনারেট করতে AbstractExtensibleObject ::: _ getExtensionAttributes পদ্ধতি আপডেট https://github.com/magento/magento2/commit/375132a81b95fafa4a03a17b72dbacdc90afa745#diff-56d044692f579051647a8284ff39cc0eR165 তাই এটি নাল ফেরত আসবে না। তাদের এখনও এপিআই টীকা আপডেট করার দরকার নেই, যেমন: বিক্রেতা / ম্যাজেন্টো / মডিউল-গ্রাহক / মডেল / ডেটা / গ্রাহক

 /**
 * {@inheritdoc}
 *
 * @return \Magento\Customer\Api\Data\CustomerExtensionInterface|null
 */
public function getExtensionAttributes()
{
    return $this->_getExtensionAttributes();
}

2

আমি আংশিকভাবে আমার নিজের প্রশ্নের উত্তর দিতে পারি কারণ আমি জানতে পারি যে পদ্ধতিটি কার্যকরভাবে প্রয়োগ করা হয়েছে Magento\Catalog\Model\Productতা অবশ্যই ভুল এবং এটি বাজে বাগের দিকে নিয়ে যেতে পারে:

extension_attributesএখনও যদি কোনও ডেটা না থাকে, অর্থাত্ _getExtensionAttributes()নাল ফেরায়, পদ্ধতিটি এক্সটেনশন অ্যাট্রিবিউটস ইন্টারফেসের একটি খালি উদাহরণ দেয়।

সুস্পষ্ট চুক্তিটি সম্পাদন করা ভাল এবং "নালার উপর কোনও সদস্য ফাংশনে কল করুন" ত্রুটিগুলি প্রতিরোধ করে তবে এটি সর্বদা একটি নতুন ফাঁকা দৃষ্টান্ত ফেরত দেয় যা অন্তর্নিহিত চুক্তিটি পূর্ণ করে না, অর্থাত্ এই নির্দিষ্ট উদাহরণের জন্য আমি একটি এক্সটেনশন বৈশিষ্ট্য ধারক পেয়েছি ।

এর মানে:

$product->getExtensionAttributes()->setStockItem($stockItem);
var_dump($product->getExtensionAttributes()->getStockItem());

আউটপুট:

NULL

এর চেয়ে ভাল বাস্তবায়ন দেখতে হবে:

public function getExtensionAttributes()
{
    $extensionAttributes = $this->_getExtensionAttributes();
    if (!$extensionAttributes) {
        $extensionAttributes = $this->extensionAttributesFactory->create('Magento\Catalog\Api\Data\ProductInterface');
        $this->_setExtensionAttributes($extensionAttributes);
    }
    return $extensionAttributes;
}

তবে কেন এটি অন্য মডিউলগুলিতে ব্যবহৃত হয় না? আমরা গ্রাহক মডিউলটিতে যে ডেটা মডেলগুলি দেখি তা কি নতুন বিচ্ছেদের বিরুদ্ধে? যদি তা হয় তবে কীভাবে আমরা এক্সটেনশন বৈশিষ্ট্যগুলি আরম্ভ করার কথা?

সেটার কাছে আমার কাছে এখনও কোনও উত্তর নেই



আপনি কি কখনও এর উত্তর পেয়েছেন - বা এটির সাথে উত্তম আচরণ করা কীভাবে সেরা? একটি অর্ডার অবজেক্ট বাড়ানোর সময় আমি এই সমস্যাটি বর্তমানে পাচ্ছি।
ওলবব ডোল

@ ol'bobdole, আমি জন্য শূন্য পেয়ে ছিল $order->getExtensionAttributes() এবং নিচের যেমন অর্ডার পাওয়ার পর মুকুব করা হয়েছে: $order = $this->orderRepositoryInterface->get($order->getId());। অর্ডার সংগ্রহস্থল ইন্টারফেস হয় Magento\Sales\Api\OrderRepositoryInterface। আপনার সমস্যাটি
একরকম

0

কোডটি বিভিন্ন এক্সটেনশনে বিভিন্নভাবে ব্যবহৃত হয়। কার্যকারিতা সেই ইন্টারফেসের কোনও বৈশিষ্ট্যকে আবদ্ধ করতে ব্যবহৃত হয়। এটির আরও ভাল বোঝার জন্য, এই লিঙ্কটিটি দেখুন :


এই নিবন্ধটি আমার প্রশ্নের উত্তর দেয় না। আমি কীভাবে বিদ্যমান সত্তাগুলিতে এক্সটেনশন বৈশিষ্ট্য যুক্ত করতে জানি, আমি getExtensionAttributes()কাস্টম সত্তাগুলি বাস্তবায়নের বিষয়ে বিশেষভাবে জিজ্ঞাসা করছিলাম
ফ্যাবিয়ান শেমংলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.