Magento 2 CRUD modeline bağımlılık enjekte etmek mümkün müdür?
Yani - Magento 2 baz soyut bir model sınıfı vardır: Magento\Framework\Model\AbstractModel
. Basit bir Oluşturma, Okuma, Güncelleme, Silme modeli nesnesi oluşturmak istiyorsanız, bu sınıfı kendi sınıfınızla genişletirsiniz.
class Foo extends Magento\Framework\Model\AbstractModel
{
}
Modelinizin __construct
yöntemine bağımlılıklar eklemek mümkün mü ? Denediğimde, aşağıdaki hatayı alıyorum.
Önemli hata: Soyut sınıf Magento \ Framework \ Model \ ResourceModel \ AbstractResource somutlaştırılamıyor
Suçlu gibi görünüyor AbstractModel
bireyin __construct
yöntemi.
public function __construct(
\Magento\Framework\Model\Context $context,
\Magento\Framework\Registry $registry,
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
array $data = []
) {
Bu yapıcıda ( Magento\Framework\Model\ResourceModel\AbstractResource
, Magento\Framework\Data\Collection\AbstractDb
) Magento nesne yöneticisi arabirimleri olmayan iki tür ipucu vardır . Bunlar soyut sınıflar. Bu sınıfı genişletip enjekte edilen bağımlılığımı eklemeye çalıştığımda
class Foo extends Magento\Framework\Model\AbstractModel
{
public function __construct(
\Magento\Framework\Model\Context $context,
\Magento\Framework\Registry $registry,
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
array $data = [],
\Package\Module\Model\Mine $mine,
) {
//...
parent::__construct($context, $registry, $resource, $resourceCollection, $data);
}
}
Magento, nesne yöneticisi soyut sınıfları somutlaştırmaya çalıştığında kefaletle serbest bırakılır.
Nesneye bağımlılığımı soyut sınıfların önüne taşıyarak bunu "düzeltebilirim"
public function __construct(
\Magento\Framework\Model\Context $context,
\Magento\Framework\Registry $registry,
\Package\Module\Model\Mine $mine,
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
array $data = [],
) {
Ancak bu, argüman sırasını değiştirdi. Tamamen nesne tarafından yönetilen bir sınıfta, bu bir sorun olmazdı. Bununla birlikte, bu soyut sınıf tipi ipuçlarının mevcut olması Magento sisteminin CRUD nesnelerini manuel olarak (yani nesne yöneticisi veya DI yoluyla değil) başlatan ve belirli bir sırayla tip ipuçlarına uyan nesnelere geçecek kısımları olduğunu ima eder .
Bu güvenli mi? Yani soyut bir modelin yapıcısındaki bu soyut sınıflar sadece eski kodlar mıdır ve kullanılmazlar mı? Yoksa sistemin bazı bölümleri hala bunları kullanacak mı, yani bir CRUD modeline bağımlılık enjekte etmek mümkün değil mi?