Чи можна ввести залежність до моделі Magento 2 CRUD?
Тобто - Magento 2 має базовий абстрактний клас моделі: Magento\Framework\Model\AbstractModel
. Якщо ви хочете створити простий об’єкт "Створити, прочитати, оновити", "Видалити модель", ви розширите цей клас власним класом.
class Foo extends Magento\Framework\Model\AbstractModel
{
}
Чи можливо ввести __construct
метод залежно від методу вашої моделі ? Коли я намагаюся, я отримую таку помилку.
Фатальна помилка: Неможливо створити абстрактний клас Magento \ Framework \ Модель \ ResourceModel \ AbstractResource
Злочинець , здається, AbstractModel
«S __construct
метод.
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 = []
) {
У цьому конструкторі є два підказки типу ( Magento\Framework\Model\ResourceModel\AbstractResource
, Magento\Framework\Data\Collection\AbstractDb
), які не є інтерфейсами Magento-менеджера об'єктів. Вони абстрактні класи. Коли я розширюю цей клас і намагаюся додати свою ін'єкційну залежність
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 віддає під заставу, коли менеджер об'єктів намагається створити абстрактні класи.
Я можу "виправити" це, перемістивши свою об'єктну залежність перед абстрактними класами
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 = [],
) {
Однак це змінило порядок аргументів. У класі, яким керували повністю об'єкти, це не було б проблемою. Однак, факт існування цих абстрактних натяків типу класу означає, що існують частини системи Magento, які вручну (тобто не через диспетчер об'єктів або DI) інстанціюють об'єкти CRUD та передаватимуть об'єкти, які відповідають натякам на тип у цьому конкретному порядку .
Це безпечно? Чи є ці абстрактні класи в конструкторі абстрактної моделі лише застарілим кодом і не використовуються? Або частини системи все одно використовуватимуть це, тобто неможливо ввести залежності в модель CRUD?