Magento 2 - Как создать набор атрибутов на основе значений по умолчанию


В настоящее время у меня есть следующий код, который создает новый набор атрибутов:

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);

    }

}

Однако набор не имеет присвоенных ему атрибутов. Как бы я создал набор на основе набора по умолчанию, чтобы он был предварительно заполнен основными атрибутами?

Любая помощь будет очень признательна.

Author: jhdevuk, 2016-01-15

1 answers

Оказывается, модель AttributeSetManagementInterface имеет функцию create, которая принимает необязательный идентификатор скелета, на котором может быть основан новый набор. Я закончил тем, что использовал ObjectManager для быстрого исправления, я уверен, что есть лучший способ.

Ниже раскрывается приведенный выше код операции:

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();

}
 2
Author: jhdevuk, 2016-08-03 13:41:47