অ্যাবস্ট্রাক্ট মডেলটিতে সংরক্ষণ এবং লোডের পদ্ধতিগুলি অবমূল্যায়িত হয়েছে


57

আমি দেখতে পাচ্ছি যে ম্যাজেন্টো 2 এর বিকাশকারী শাখায় পদ্ধতিগুলি loadএবং শ্রেণি saveথেকে Magento\Framework\Model\AbstractModelঅবজ্ঞাত।
তবে কোরটিতে একটি গাজিলিয়ন ক্লাস রয়েছে যা এই বর্গ এবং ব্যবহার saveএবং প্রসারিত করে load
আমার সত্তাগুলির সিআরইউডি অংশের জন্য আমার নিজস্ব মডিউল তৈরি করার সময় আমি মূল মডিউলটির মতো একই নির্দেশিকাগুলি অনুসরণ করি।
তবে যেহেতু এই পদ্ধতিগুলি হ্রাস করা হয়েছে আমি বরং ভবিষ্যতের জন্য প্রস্তুত থাকব।
তাদের পরিবর্তে আমার কী ব্যবহার করা উচিত? নাকি আমার আরও কিছু বাড়ানো উচিত?


এই পদ্ধতিগুলি কি এখন হ্রাস করা হয়?
নাইট017

1
তাহলে এখনই দ্বারা আপনাকে 2.3 বলতে চাচ্ছি, হ্যাঁ তারা আছেন: github.com/magento/magento2/blob/2.3/lib/internal/Magento/...
Marius

উত্তর:


34

আপনার মডিউল পরিষেবা চুক্তি ব্যবহার করা উচিত।

পণ্যের জন্য উদাহরণস্বরূপ আপনার পণ্যরোপোসিটোরি ইন্টারফেস ব্যবহার করা উচিত

<?php
/**
 *
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

namespace Magento\Catalog\Api;

/**
 * @api
 * @since 100.0.2
 */
interface ProductRepositoryInterface
{
    /**
     * Create product
     *
     * @param \Magento\Catalog\Api\Data\ProductInterface $product
     * @param bool $saveOptions
     * @return \Magento\Catalog\Api\Data\ProductInterface
     * @throws \Magento\Framework\Exception\InputException
     * @throws \Magento\Framework\Exception\StateException
     * @throws \Magento\Framework\Exception\CouldNotSaveException
     */
    public function save(\Magento\Catalog\Api\Data\ProductInterface $product, $saveOptions = false);

    /**
     * Get info about product by product SKU
     *
     * @param string $sku
     * @param bool $editMode
     * @param int|null $storeId
     * @param bool $forceReload
     * @return \Magento\Catalog\Api\Data\ProductInterface
     * @throws \Magento\Framework\Exception\NoSuchEntityException
     */
    public function get($sku, $editMode = false, $storeId = null, $forceReload = false);

    /**
     * Get info about product by product id
     *
     * @param int $productId
     * @param bool $editMode
     * @param int|null $storeId
     * @param bool $forceReload
     * @return \Magento\Catalog\Api\Data\ProductInterface
     * @throws \Magento\Framework\Exception\NoSuchEntityException
     */
    public function getById($productId, $editMode = false, $storeId = null, $forceReload = false);

    /**
     * Delete product
     *
     * @param \Magento\Catalog\Api\Data\ProductInterface $product
     * @return bool Will returned True if deleted
     * @throws \Magento\Framework\Exception\StateException
     */
    public function delete(\Magento\Catalog\Api\Data\ProductInterface $product);

    /**
     * @param string $sku
     * @return bool Will returned True if deleted
     * @throws \Magento\Framework\Exception\NoSuchEntityException
     * @throws \Magento\Framework\Exception\StateException
     */
    public function deleteById($sku);

    /**
     * Get product list
     *
     * @param \Magento\Framework\Api\SearchCriteriaInterface $searchCriteria
     * @return \Magento\Catalog\Api\Data\ProductSearchResultsInterface
     */
    public function getList(\Magento\Framework\Api\SearchCriteriaInterface $searchCriteria);
}

যদি মডিউল পরিষেবা চুক্তিটি উপলভ্য না হয় আপনি সত্তাগুলি সংরক্ষণ করতে রিসোর্সমোডেল ব্যবহার করতে পারেন।


আমি দেখি. এইবার বুঝতে পারছি. তবে আপনি কি নিশ্চিত করতে পারবেন যে সমস্ত মূল সিআরইউডি মডিউলগুলির এক পর্যায়ে পরিষেবা চুক্তি থাকবে?
মারিয়াস

1
আমি দেখতে পাচ্ছি যে ProductRepositoryInterfaceএখনও বাস্তবায়নের loadপদ্ধতিগুলিতে getএবং ব্যবহার করে getById। আমি loadকি এই পদ্ধতির পরিবর্তে আমার মডিউলটির জন্য উত্স মডেলটি ব্যবহার করব ?
মারিয়াস

2
হ্যাঁ, আপনার মডিউল এসএল
রিসোর্সমোডেলটি

6
আমরা কীভাবে
রিসোর্সমোডেলটি

1
আপনার কোন উদাহরণ আছে? আমি সরকারী পর্যালোচনা এবং নিউজলেটার মডিউলগুলি দেখেছি এবং তারা সরাসরি "সংরক্ষণ" বলছে। রিসোর্সমোডেল ব্যবহারের উদাহরণ খুঁজে পাচ্ছি না। আমি এটি আমার মডিউলটির জন্য সংজ্ঞায়িত করেছি, তবে কীভাবে এটি ব্যবহার করব?
জোনিস এলমারিস

24

যা আমি বুঝতে পেরেছি, যা ঘটতে চলেছে তা হ'ল ম্যাজেন্টো হাইড্রেটরগুলি extract()এবং hydrate()পদ্ধতিগুলির সাথে স্যুইচ করতে চলেছে ।

এই লিঙ্কটি ব্যবহার করত তবে মনে হয় ম্যাজেন্টো দলটি এটিকে আবার ঘুরিয়ে দিয়েছে: https://github.com

যদিও আপনি এখানে প্রতিশ্রুতিবদ্ধতার ইতিহাসটি খুঁজে পেতে পারেন: https://github.com

গুরুত্বপূর্ণ ফাইলগুলি হ'ল:

  • EntityHydrator.php
  • EntityMetadata.php
  • HydratorInterface.php
  • MetadataPool.php

আমি আপনাকে Actionফোল্ডারের নীচে থাকা ফাইলগুলির পাশাপাশি ফাইলগুলিও পরীক্ষা করে দেখার পরামর্শ দিই Sequence

আমি যা বুঝতে পেরেছি তা থেকে (আমি এখানে সম্পূর্ণ ভুল হতে পারি):

  • Actionফোল্ডারের নীচে থাকা ফাইলগুলি CRUD ক্রিয়া
  • Sequenceফাইল iterators হয়?

এটি একটি কথোপকথন যা কিছুক্ষণ আগে ঘটেছিল (এটিই কি এলান স্টর্ম উল্লেখ করেছিলেন? মনে রাখতে পারছেন না) তাই আমি নিশ্চিত নই যে ম্যাজেন্টো দল এখনও সে পথে চলেছে কিনা।

হালনাগাদ

আমার গবেষণা থেকে, এই পরিবর্তন সম্পর্কিত অভ্যন্তরীণ ম্যাজেন্টো টিকিটটি হ'ল ম্যাগেটো -৫67676,, আমি যে সম্পর্কিত কমিটগুলি সন্ধান করতে পেরেছি তা এখানে:

সম্ভবত আরও টিবিএইচ রয়েছে তবে কমিটমেন্ট বার্তাগুলির জন্য পুরো রেপো ব্রাউজ করা আমার মনে হয় না ^^

আপনি যদি হাইড্রেটরগুলির সাথে পরিচিত না হন তবে আমি আপনাকে সেই লিঙ্কটি চেক করার পরামর্শ দিচ্ছি: http://www.webconsults.eu/blog/entry/108- কী_আস_এহাইড্রেটার_ইন_জেন্ড_ ফ্রেমওয়ার্ক_2

২.১ থেকে আপডেট

ম্যাজেন্টো এখন EntityManagerশ্রেণিটি উত্তরাধিকার প্রতিস্থাপনের জন্য ব্যবহার করছে আপনি এখানে আরও তথ্য পেতে পারেন: ম্যাজেন্টো ২.১: সত্তা পরিচালককে ব্যবহার করে


1
ঠিক আছে. চমৎকার তত্ত্ব। তবে আমি কোর থেকে একটি উদাহরণ ব্যবহার করতে পারি। আমি দুঃখিত, তবে আমার ম্যাজেন্টো দক্ষতা কপি / পেস্ট / প্রতিস্থাপন করতে আবার শুরু করুন :) :) আপনি অ্যাকশন এবং সিকোয়েন্স ফাইলগুলি উল্লেখ করেছেন। আপনি আরো নির্দিষ্ট হতে পারে?
মারিউস

@ মারিয়াস দুর্ভাগ্যক্রমে আমি এটাই জানি। আমি কোথা থেকে এই তথ্যটি পেয়েছি তা মনে করতে পারছি না তবে সেই সময়ের পরিকল্পনা ছিল এই নির্দিষ্ট প্রতিশ্রুতিটি ব্যবহার করা: github.com/magento/magento2/tree/… হাইড্রেটর থেকে স্যুইচটি বাস্তবায়নের জন্য load()/save()। আমি অনুমান Sequencesiterators মত কাজ এবং Actionsটি ককটেলের পদক্ষেপ নেওয়ার
ডিজিটাল Pianism এ রাফায়েল

4
আপনি বর্তমান সিমস ব্লক রিসোর্স মডেল লোড পদ্ধতিতে একটি উদাহরণ খুঁজে পান: github.com/magento/magento2/blob/deلاف / app / code / Magento / Cms/… এটি সত্তা-ম্যানেজার-> লোড github.com/magento/magento2/ ব্যবহার করে ব্লব / ডেভলপ / লিবিব / অভ্যন্তরীণ / ম্যাজেন্টো /… যা একটি রিডমেইন অপারেশন চালায় (আমার মনে হয়) github.com/magento/magento2/blob/develop/lib/intern/Magento/… যা লোড সত্তা ডেটার সাহায্যে কঙ্কাল সত্তাকে হাইড্রেট করে ( ম্যাজেন্টো থেকে দুর্দান্ত পদক্ষেপ;))
ডেভিড ভারহোলেন


2

ম্যাজেন্টো 2 অবমূল্যায়িত লোড পদ্ধতির বিকল্প হ'ল সংস্থান মডেল লোড পদ্ধতি।

public funtion getCustomer($id)
{
   $customerModel = $this->customerFactory->create();
   $this->customerResource->load($customerModel, $id);
   $customerModel->getEmail();  
}

এখানে প্রথম প্যারামিটারটি হ'ল মডেল অবজেক্ট এবং দ্বিতীয় প্যারামিটারটি আইডি যা আপনি লোড করতে চান।

ম্যাজেন্টো 2 অবহিত সংরক্ষণের পদ্ধতির বিকল্প হ'ল সংস্থান মডেল সংরক্ষণ পদ্ধতি।

public funtion save($taskData)
{
   $taskModel = $this->taskFactory->create()->setData($taskData);
   $this->resource->save($taskModel);
}

সংরক্ষণ পদ্ধতিটি কেবলমাত্র একটি পরামিতি গ্রহণ করে যা আপনার মডেল অবজেক্ট।

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