Magento 2 - 如何基于默认值创建属性集


Magento 2 - How to create an attribute set based on default

我目前有以下代码可以创建一个新的属性集:

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 模型有一个创建函数,该函数采用可选的骨架 ID,新集合可以基于该 ID。我最终使用对象管理器进行快速修复,我相信有更好的方法。

下面扩展了上面的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();
}