Widzę, że w branży rozwoju w Magento 2 repo metody load
oraz save
od Magento\Framework\Model\AbstractModel
klasy są przestarzałe.
Ale w rdzeniu znajdują się klasy gazillionów, które rozszerzają tę klasę i używają save
i load
.
Tworząc własny moduł dla części CRUD moich podmiotów, kieruję się tymi samymi wytycznymi, co moduł podstawowy.
Ale ponieważ te metody są przestarzałe, wolałbym być przygotowany na przyszłość.
Czego powinienem użyć zamiast nich? Czy powinienem przedłużyć coś jeszcze?
57
Odpowiedzi:
Powinieneś skorzystać z umowy serwisowej modułu.
Na przykład dla produktu należy użyć interfejsu ProductRepositoryInterface
Jeśli umowa serwisowa modułu nie jest dostępna, możesz użyć ResourceModel do zapisania encji.
źródło
ProductRepositoryInterface
nadal wykorzystujeload
metodyget
igetById
. Czy powinienem używać modelu zasobów dla mojego modułu zamiast tejload
metody?Z tego, co zrozumiałem, to, co się stanie, to że Magento przełączy się na hydratatory za pomocą
extract()
ihydrate()
metod.Ten link kiedyś działał, ale wygląda na to, że zespół Magento wycofał go: https://github.com/magento/magento2/blob/develop/lib/internal/Magento/Framework/Model/Entity/EntityHydrator.php
Historię zatwierdzenia można znaleźć tutaj: https://github.com/magento/magento2/tree/09132da06e18dde0f90aabfc962db2bc19b64f3c/lib/internal/Magento/Framework/Model/Entity
Ważne pliki to:
EntityHydrator.php
EntityMetadata.php
HydratorInterface.php
MetadataPool.php
Sugeruję również sprawdzenie plików w
Action
folderze, a takżeSequence
plików.Z tego, co zrozumiałem (mogę się tutaj całkowicie mylić):
Action
folderze to akcje CRUDSequence
pliki są iteratory?To była rozmowa, która wydarzyła się jakiś czas temu (czy to Alan Storm wspomniał o tym? Nie pamiętam), więc nie jestem pewien, czy zespół Magento nadal podąża tą drogą.
Aktualizacja
Z moich badań wynika, że wewnętrzny bilet Magento dotyczący tej zmiany to MAGETWO-50676, oto powiązane zobowiązania, które udało mi się znaleźć:
Prawdopodobnie jest więcej TBH, ale nie mam ochoty przeglądać całego repozytorium w poszukiwaniu komunikatów zatwierdzania ^^
Jeśli nie znasz hydratorów, sugeruję sprawdzić ten link: http://www.webconsults.eu/blog/entry/108-What_is_a_Hydrator_in_Zend_Framework_2
Aktualizacja z 2.1
Magento używa teraz
EntityManager
klasy do zastąpienia dziedziczenia, więcej informacji można znaleźć tutaj: Magento 2.1: korzystanie z menedżera encjiźródło
load()/save()
na hydratory. Zakładam, żeSequences
praca jest jak iteratory iActions
są działaniami CRUDZobacz opis w kodzie klasy https://github.com/magento/magento2/blob/2.1/lib/internal/Magento/Framework/Model/AbstractModel.php#L626
źródło
load
save
i kiedydelete
odejdziesz?Alternatywą dla przestarzałej metody ładowania Magento 2 jest metoda ładowania modelu zasobów.
tutaj pierwszym parametrem jest obiekt modelu, a drugim parametrem jest identyfikator, który chcesz załadować.
Alternatywą dla przestarzałej metody zapisu Magento 2 jest metoda zapisu modelu zasobów.
Metoda save akceptuje tylko jeden parametr, który jest obiektem modelu.
źródło