В настоящее время у меня есть следующий код, который создает новый набор атрибутов:
use Magento\Framework\ObjectManagerInterface;
use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\ModuleDataSetupInterface;
class AttributeModel extends \Magento\Framework\Model\AbstractModel
{
const ENTITY_TYPE = \Magento\Catalog\Model\Product::ENTITY;
protected $_objectManager;
protected $_moduleDataSetup;
protected $_eavSetupFactory;
public function __construct(
ObjectManagerInterface $objectManager,
ModuleDataSetupInterface $moduleDataSetup,
EavSetupFactory $eavSetupFactory,
) {
$this->_objectManager = $objectManager;
$this->_moduleDataSetup = $moduleDataSetup;
$this->_eavSetupFactory = $eavSetupFactory;
}
public function createSet($name)
{
$eavSetup = $this->_eavSetupFactory->create([
'setup' => $this->_moduleDataSetup
]);
$eavSetup->addAttributeSet(self::ENTITY_TYPE, $name, 0);
}
}
Однако у набора нет назначенных ему атрибутов. Как мне создать набор на основе набора по умолчанию, чтобы он был предварительно заполнен базовыми атрибутами?
Любая помощь высоко ценится.
Оказывается, модель AttributeSetManagementInterface имеет функцию создания, которая принимает необязательный идентификатор скелета, на котором может основываться новый набор. В итоге я использовал ObjectManager для быстрого исправления, я уверен, что есть лучший способ.
Ниже раскрывается приведенный выше код OP:
public function createSet($name)
{
$eavSetup = $this->_eavSetupFactory->create([
'setup' => $this->_moduleDataSetup
]);
$defaultId = $eavSetup->getDefaultAttributeSetId(self::ENTITY_TYPE);
$model = $this->_objectManager
->create('Magento\Eav\Api\Data\AttributeSetInterface')
->setId(null)
->setEntityTypeId(4)
->setAttributeSetName($name);
$this->_objectManager
->create('Magento\Eav\Api\AttributeSetManagementInterface')
->create(self::ENTITY_TYPE, $model, $defaultId)
->save();
}
Других решений пока нет …