共计 3419 个字符,预计需要花费 9 分钟才能阅读完成。
1、UpgradeSchema.php
<?php
namespace VenderName\ModuleName\Setup;
use Magento\Framework\Setup\UpgradeSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
class UpgradeSchema implements UpgradeSchemaInterface
{
/**
* @param SchemaSetupInterface $setup
* @param ModuleContextInterface $context
*/
public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
{$setup->startSetup();
if (version_compare($context->getVersion(), '1.0.1', '<')) {$setup->getConnection()->addColumn($setup->getTable('customer_entity'),
'account_type',
[
'type' => \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
'nullable' => true,
'default' => null,
'comment' => 'Account type (0:old website account 1:new website account)'
]
);
}
$setup->endSetup();}
}
2、UpgradeData.php
<?php
namespace VenderName\ModuleName\Setup;
use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\UpgradeDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
/**
* @codeCoverageIgnore
*/
class UpgradeData implements UpgradeDataInterface
{
/**
* @var \Magento\Eav\Setup\EavSetupFactory
*/
protected $eavSetupFactory;
/**
* @var \Magento\Eav\Model\Config
*/
protected $eavConfig;
/**
* @param EavSetupFactory $eavSetupFactory
* @param \Magento\Eav\Model\Config $eavConfig
*/
public function __construct(
\Magento\Eav\Setup\EavSetupFactory $eavSetupFactory,
\Magento\Eav\Model\Config $eavConfig
) {
$this->eavSetupFactory = $eavSetupFactory;
$this->eavConfig = $eavConfig;
}
public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{if (version_compare($context->getVersion(), '1.0.1') < 0) {$setup->startSetup();
$eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
$eavSetup->addAttribute(
\Magento\Customer\Model\Customer::ENTITY,
'account_type',
[
'type' => 'static',
'label' => 'Account Type',
'input' => 'select',
'source' => 'VenderName\ModuleName\Model\Config\Source\AccountType',
'required' => false,
'visible' => true,
'user_defined' => true,
'position' => 999,
'system' => false
]
);
$attribute = $this->eavConfig->getAttribute(\Magento\Customer\Model\Customer::ENTITY, 'account_type');
$attribute->setData(
'used_in_forms',
['adminhtml_customer', 'customer_account_create', 'customer_account_edit', 'checkout_register']
);
$attribute->save();
$setup->endSetup();}
}
}
3、AccountType.php
<?php
namespace VenderName\ModuleName\Model\Config\Source;
class AccountType extends \Magento\Eav\Model\Entity\Attribute\Source\AbstractSource
{
/**
* Get all options
*
* @return array
*/
public function getAllOptions()
{if ($this->_options === null) {
$this->_options = [['value' => '','label'=> __('Please Select')],
['value' => '0', 'label' => __('Old Account')],
['value' => '1', 'label' => __('New Account')]
];
}
return $this->_options;
}
/**
* Get text of the option value
*
* @param string|integer $value
* @return string|bool
*/
public function getOptionValue($value)
{foreach ($this->getAllOptions() as $option) {if ($option['value'] == $value) {return $option['label'];
}
}
return false;
}
}
代码添加后,执行 php bin/magento setup:upgrade,字段即添加成功。
注:执行脚本之前最好确认下模块(module.xml)的版本号是否也已修改;
后续对该字段的获取和设值可通过 Customer Model 来处理,示例如下:
$customerSession = \Magento\Framework\App\ObjectManager::getInstance()->get('Magento\Customer\Model\Session');
$customerId = $customerSession->getCustomer()->getId();
$customer = \Magento\Framework\App\ObjectManager::getInstance()->create('Magento\Customer\Model\Customer')->load($customerId);
// set account_type
$customer->setAccountType($accountType);
$customer->save();
// get account type
$customer->getAccountType($accountType);
正文完