Модуль Magento 2, чтобы продлить выпуск клиента

Я пытаюсь создать модуль Magento 2 для расширения по умолчанию Customer::loadByEmail() класс и метод с некоторой дополнительной логикой.

Поскольку мой модуль содержит несколько разных классов / файлов, я создал публичную суть, содержащую код, а не загрязняю этот пост кучами кода.

Полный код: https://gist.github.com/JasonMortonNZ/90ada76ad5511a37d2c6

Также для справки весь код находится в папке project-root/app/code/Jason/OCUsers,

Что работает:

  • Модуль распознает мой Magento, когда я запускаю magento module:status Команда из командной строки.
  • Я могу успешно включить и отключить модуль, хотя миграции (обновления схемы), похоже, не запускаются.

какой НЕ за работой:

  • Обновления схемы при установке и обновлении не работают. Обновления схемы базы данных не сохраняются и не вступают в силу.
  • Казалось бы, DI не правильно, как новый Customer класс и loadByEmail метод, который я создал, не попал.

Любая помощь или предложения о том, почему эти два вопроса происходят, будет высоко ценится 🙂

module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Jason_OCUser" setup_version="2.0.0"/>
<sequence>
<module name="Magento_Customer"/>
</sequence>
</config>

di.xml

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Customer\Api\Data\CustomerInterface" type="Jason\OCUser\Model\Customer" />
<type name="Magento\Framework\Model\ActionValidator\RemoveAction">
<arguments>
<argument name="protectedModels" xsi:type="array">
<item name="customer" xsi:type="string">Jason\OCUser\Model\Customer</item>
</argument>
</arguments>
</type>
</config>

Customer.php

<?php
namespace Jason\OCUser\Model;

use Magento\Customer\Model\Customer as MCustomer;

class Customer extends MCustomer
{
/**
* Load customer by email
*
* @param   string $customerEmail
* @return  $this
*/
public function loadByEmail($customerEmail)
{
die('Not reaching this :( ');
}
}

InstallSchema.php

<?php

namespace Jason\OCUser\Setup;

use Magento\Framework\DB\Ddl\Table;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\Setup\InstallSchemaInterface;

class InstallSchema implements InstallSchemaInterface
{

/**
* Installs DB schema for a module
*
* @param SchemaSetupInterface $setup
* @param ModuleContextInterface $context
* @return void
*/
public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
{

$installer = $setup;

$installer->startSetup();

/**
* Add salt column and oc user status
*/
$installer->getConnection()->addColumn(
'customer_entity',
'oc_salt',
[
'type' => Table::TYPE_TEXT,
'nullable' => true,
'default' => null,
'length' => 9,
'comment' => ''
]
);

$installer->getConnection()->addColumn(
'customer_entity',
'oc_user',
[
'type' => Table::TYPE_BOOLEAN,
'nullable' => false,
'default' => 0,
'comment' => ''
]
);

$installer->endSetup();
}
}

1

Решение

Ваш di.xml кажется неправильным. Увидеть for атрибут на preference тег. Смотри ниже я заменил Magento\Customer\Api\Data\CustomerInterface с Magento\Customer\Model\Customer,

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Customer\Model\Customer" type="Jason\OCUser\Model\Customer" />
<type name="Magento\Framework\Model\ActionValidator\RemoveAction">
<arguments>
<argument name="protectedModels" xsi:type="array">
<item name="customer" xsi:type="string">Jason\OCUser\Model\Customer</item>
</argument>
</arguments>
</type>
</config>
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]