How to add a Customer Attribute in a custom module using declarative schema in Magento 2.3? Unicorn Meta Zoo #1: Why another podcast? Announcing the arrival of Valued Associate #679: Cesar ManaraCould someone please explain Declarative Database SchemaMagento 2.3 : How to implement declarative schema in custom moduleHow to drop a table in Declarative schema?Why the table column is not deleted after changing the db_schema.xml?Errors on Declarative Schema on custom module on 2.3How to get Customer attribute value by loading customer id in magento 2Custom customer attribute save encrypt valueMagento 2.3 : Insert data into table using DeclarativeSchemaMagento 2.3. Need to grant access to customer for using some APIsDeclarative schema approach to make customer's lastname optional
Do you need a weapon for Thunderous Smite, and the other 'Smite' spells?
Co-worker works way more than he should
My admission is revoked after accepting the admission offer
My bank got bought out, am I now going to have to start filing tax returns in a different state?
What was Apollo 13's "Little Jolt" after MECO?
"My boss was furious with me and I have been fired" vs. "My boss was furious with me and I was fired"
Why didn't the Space Shuttle bounce back into space as many times as possible so as to lose a lot of kinetic energy up there?
Passing args from the bash script to the function in the script
Why did Israel vote against lifting the American embargo on Cuba?
c++ diamond problem - How to call base method only once
Identify story/novel: Tribe on colonized planet, not aware of this. "Taboo," altitude sickness, robot guardian (60s? Young Adult?)
Is it acceptable to use working hours to read general interest books?
What is this word supposed to be?
Visa-free travel to the US using refugee travel document from Spain?
Multiple options vs single option UI
Map material from china not allowed to leave the country
What is the ongoing value of the Kanban board to the developers as opposed to management
Putting Ant-Man on house arrest
As an international instructor, should I openly talk about my accent?
Is Diceware more secure than a long passphrase?
Seek and ye shall find
Will I lose my paid in full property
How do I check if a string is entirely made of the same substring?
Are all CP/M-80 implementations binary compatible?
How to add a Customer Attribute in a custom module using declarative schema in Magento 2.3?
Unicorn Meta Zoo #1: Why another podcast?
Announcing the arrival of Valued Associate #679: Cesar ManaraCould someone please explain Declarative Database SchemaMagento 2.3 : How to implement declarative schema in custom moduleHow to drop a table in Declarative schema?Why the table column is not deleted after changing the db_schema.xml?Errors on Declarative Schema on custom module on 2.3How to get Customer attribute value by loading customer id in magento 2Custom customer attribute save encrypt valueMagento 2.3 : Insert data into table using DeclarativeSchemaMagento 2.3. Need to grant access to customer for using some APIsDeclarative schema approach to make customer's lastname optional
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
How to add an Attribute for a Customer Entity in a custom module using declarative schema in Magento 2.3?
magento2.3
add a comment |
How to add an Attribute for a Customer Entity in a custom module using declarative schema in Magento 2.3?
magento2.3
You can create custom attribute in normal way also in 2.3. Did you try it?
– Rohan Hapani
Dec 21 '18 at 8:43
Yes i know. but i am asking how to create in declarative approach?
– Varsha
Dec 22 '18 at 4:31
add a comment |
How to add an Attribute for a Customer Entity in a custom module using declarative schema in Magento 2.3?
magento2.3
How to add an Attribute for a Customer Entity in a custom module using declarative schema in Magento 2.3?
magento2.3
magento2.3
asked Dec 21 '18 at 8:09
VarshaVarsha
239112
239112
You can create custom attribute in normal way also in 2.3. Did you try it?
– Rohan Hapani
Dec 21 '18 at 8:43
Yes i know. but i am asking how to create in declarative approach?
– Varsha
Dec 22 '18 at 4:31
add a comment |
You can create custom attribute in normal way also in 2.3. Did you try it?
– Rohan Hapani
Dec 21 '18 at 8:43
Yes i know. but i am asking how to create in declarative approach?
– Varsha
Dec 22 '18 at 4:31
You can create custom attribute in normal way also in 2.3. Did you try it?
– Rohan Hapani
Dec 21 '18 at 8:43
You can create custom attribute in normal way also in 2.3. Did you try it?
– Rohan Hapani
Dec 21 '18 at 8:43
Yes i know. but i am asking how to create in declarative approach?
– Varsha
Dec 22 '18 at 4:31
Yes i know. but i am asking how to create in declarative approach?
– Varsha
Dec 22 '18 at 4:31
add a comment |
3 Answers
3
active
oldest
votes
I have added one customer attribute using Declarative Schema in a custom module.
<?php
namespace vendor_namemodule_nameSetupPatchData;
use MagentoFrameworkSetupPatchDataPatchInterface;
use MagentoFrameworkSetupPatchPatchVersionInterface;
use MagentoFrameworkSetupModuleDataSetupInterface;
use MagentoCustomerModelCustomer;
use MagentoCustomerSetupCustomerSetupFactory;
use MagentoEavModelEntityAttributeSetFactory as AttributeSetFactory;
use MagentoFrameworkDBDdlTable;
class AddTestAttribute implements DataPatchInterface
protected $_moduleDataSetup;
protected $_customerSetupFactory;
protected $_attributeSetFactory;
public function __construct(
ModuleDataSetupInterface $moduleDataSetup,
CustomerSetupFactory $customerSetupFactory,
AttributeSetFactory $attributeSetFactory
)
$this->_moduleDataSetup = $moduleDataSetup;
$this->_customerSetupFactory = $customerSetupFactory;
$this->_attributeSetFactory = $attributeSetFactory;
public function apply()
$customerSetup = $this->_customerSetupFactory->create(['setup' => $this->_moduleDataSetup]);
$customerEntity = $customerSetup->getEavConfig()->getEntityType(Customer::ENTITY);
$attributeSetId = $customerEntity->getDefaultAttributeSetId();
$attributeSet = $this->_attributeSetFactory->create();
$attributeSet->getDefaultGroupId($attributeSetId);
$customerSetup->removeAttribute(Customer::ENTITY, 'test');
$customerSetup->addAttribute(Customer::ENTITY, 'test', array(
'type' => Table::TYPE_DECIMAL,
'label' => 'Test',
'input' => 'text',
'required' => 0,
'default' => 0,
'visible' => 0,
'system' => 0
));
public function getAliases()
return [];
public static function getDependencies()
return [
];
its not displayed on form
– Adarsh Shukla
Mar 1 at 5:37
how can we make it visible on form
– Adarsh Shukla
Mar 1 at 6:01
i have changed visible 0 to 1 still its not visible on admin form
– Adarsh Shukla
Mar 1 at 6:02
add a comment |
After reviewing the schema.xsd; I don't see any support for it; but - you can add support for it by updating the schema in your own module and then pointing your file to it while adding support for the additional functionality. (which is alot of work unless you are building several modules and you are doing this within your "core")
Currently this is easily done the previous way via the InstallData.php; I'm not sure if anyone wants this added to declarative at this time; if so; I can put something together as a PR?
If you have a new question, please ask it by clicking the Ask Question button. Include a link to this question if it helps provide context. - From Review
– Jai
Jan 28 at 19:10
Upon some research; trying to add/remove attributes via declarative is short of crossing boundaries between the db schema and data patch demarcations. so technically; add/remove attributes should be done via installdata / data patches. Which @Ramanathan recommends.
– billandr
Jan 29 at 20:31
add a comment |
Please use the following code to create Customer's Phone number attribute that will be used in the Registration form too:
<?php
namespace VendorModuleSetupPatchData;
use MagentoCustomerModelCustomer;
use MagentoCustomerSetupCustomerSetupFactory;
use MagentoFrameworkSetupModuleDataSetupInterface;
use MagentoFrameworkSetupPatchDataPatchInterface;
use MagentoEavModelEntityAttributeSetFactory as AttributeSetFactory;
/**
* Class AddCustomerPhoneNumberAttribute
* @package VendorModuleSetupPatchData
*/
class AddCustomerPhoneNumberAttribute implements DataPatchInterface
/**
* @var ModuleDataSetupInterface
*/
protected $moduleDataSetup;
/**
* @var CustomerSetupFactory
*/
protected $customerSetupFactory;
/**
* @var AttributeSetFactory
*/
protected $attributeSetFactory;
/**
* AddCustomerPhoneNumberAttribute constructor.
* @param ModuleDataSetupInterface $moduleDataSetup
* @param CustomerSetupFactory $customerSetupFactory
* @param AttributeSetFactory $attributeSetFactory
*/
public function __construct(
ModuleDataSetupInterface $moduleDataSetup,
CustomerSetupFactory $customerSetupFactory,
AttributeSetFactory $attributeSetFactory
)
$this->moduleDataSetup = $moduleDataSetup;
$this->customerSetupFactory = $customerSetupFactory;
$this->attributeSetFactory = $attributeSetFactory;
/**
* @inheritdoc
*/
public function apply()
$customerSetup = $this->customerSetupFactory->create(['setup' => $this->moduleDataSetup]);
$customerEntity = $customerSetup->getEavConfig()->getEntityType(Customer::ENTITY);
$attributeSetId = $customerEntity->getDefaultAttributeSetId();
$attributeSet = $this->attributeSetFactory->create();
$attributeGroupId = $attributeSet->getDefaultGroupId($attributeSetId);
$customerSetup->addAttribute(
Customer::ENTITY,
'phone_number',
[
'type' => 'varchar',
'label' => 'Phone Number',
'input' => 'text',
'validate_rules' => '"max_text_length":255,"min_text_length":1',
'required' => false,
'sort_order' => 120,
'position' => 120,
'visible' => true,
'user_defined' => true,
'unique' => false,
'system' => false,
]
);
$attribute = $customerSetup->getEavConfig()->getAttribute(
Customer::ENTITY,
'phone_number'
);
$attribute->addData(
[
'attribute_set_id' => $attributeSetId,
'attribute_group_id' => $attributeGroupId,
'used_in_forms' => ['adminhtml_customer', 'customer_account_create', 'customer_account_edit'],
]
);
$attribute->save();
/**
* @inheritdoc
*/
public static function getDependencies()
return [];
/**
* @inheritdoc
*/
public function getAliases()
return [];
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "479"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f255460%2fhow-to-add-a-customer-attribute-in-a-custom-module-using-declarative-schema-in-m%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
I have added one customer attribute using Declarative Schema in a custom module.
<?php
namespace vendor_namemodule_nameSetupPatchData;
use MagentoFrameworkSetupPatchDataPatchInterface;
use MagentoFrameworkSetupPatchPatchVersionInterface;
use MagentoFrameworkSetupModuleDataSetupInterface;
use MagentoCustomerModelCustomer;
use MagentoCustomerSetupCustomerSetupFactory;
use MagentoEavModelEntityAttributeSetFactory as AttributeSetFactory;
use MagentoFrameworkDBDdlTable;
class AddTestAttribute implements DataPatchInterface
protected $_moduleDataSetup;
protected $_customerSetupFactory;
protected $_attributeSetFactory;
public function __construct(
ModuleDataSetupInterface $moduleDataSetup,
CustomerSetupFactory $customerSetupFactory,
AttributeSetFactory $attributeSetFactory
)
$this->_moduleDataSetup = $moduleDataSetup;
$this->_customerSetupFactory = $customerSetupFactory;
$this->_attributeSetFactory = $attributeSetFactory;
public function apply()
$customerSetup = $this->_customerSetupFactory->create(['setup' => $this->_moduleDataSetup]);
$customerEntity = $customerSetup->getEavConfig()->getEntityType(Customer::ENTITY);
$attributeSetId = $customerEntity->getDefaultAttributeSetId();
$attributeSet = $this->_attributeSetFactory->create();
$attributeSet->getDefaultGroupId($attributeSetId);
$customerSetup->removeAttribute(Customer::ENTITY, 'test');
$customerSetup->addAttribute(Customer::ENTITY, 'test', array(
'type' => Table::TYPE_DECIMAL,
'label' => 'Test',
'input' => 'text',
'required' => 0,
'default' => 0,
'visible' => 0,
'system' => 0
));
public function getAliases()
return [];
public static function getDependencies()
return [
];
its not displayed on form
– Adarsh Shukla
Mar 1 at 5:37
how can we make it visible on form
– Adarsh Shukla
Mar 1 at 6:01
i have changed visible 0 to 1 still its not visible on admin form
– Adarsh Shukla
Mar 1 at 6:02
add a comment |
I have added one customer attribute using Declarative Schema in a custom module.
<?php
namespace vendor_namemodule_nameSetupPatchData;
use MagentoFrameworkSetupPatchDataPatchInterface;
use MagentoFrameworkSetupPatchPatchVersionInterface;
use MagentoFrameworkSetupModuleDataSetupInterface;
use MagentoCustomerModelCustomer;
use MagentoCustomerSetupCustomerSetupFactory;
use MagentoEavModelEntityAttributeSetFactory as AttributeSetFactory;
use MagentoFrameworkDBDdlTable;
class AddTestAttribute implements DataPatchInterface
protected $_moduleDataSetup;
protected $_customerSetupFactory;
protected $_attributeSetFactory;
public function __construct(
ModuleDataSetupInterface $moduleDataSetup,
CustomerSetupFactory $customerSetupFactory,
AttributeSetFactory $attributeSetFactory
)
$this->_moduleDataSetup = $moduleDataSetup;
$this->_customerSetupFactory = $customerSetupFactory;
$this->_attributeSetFactory = $attributeSetFactory;
public function apply()
$customerSetup = $this->_customerSetupFactory->create(['setup' => $this->_moduleDataSetup]);
$customerEntity = $customerSetup->getEavConfig()->getEntityType(Customer::ENTITY);
$attributeSetId = $customerEntity->getDefaultAttributeSetId();
$attributeSet = $this->_attributeSetFactory->create();
$attributeSet->getDefaultGroupId($attributeSetId);
$customerSetup->removeAttribute(Customer::ENTITY, 'test');
$customerSetup->addAttribute(Customer::ENTITY, 'test', array(
'type' => Table::TYPE_DECIMAL,
'label' => 'Test',
'input' => 'text',
'required' => 0,
'default' => 0,
'visible' => 0,
'system' => 0
));
public function getAliases()
return [];
public static function getDependencies()
return [
];
its not displayed on form
– Adarsh Shukla
Mar 1 at 5:37
how can we make it visible on form
– Adarsh Shukla
Mar 1 at 6:01
i have changed visible 0 to 1 still its not visible on admin form
– Adarsh Shukla
Mar 1 at 6:02
add a comment |
I have added one customer attribute using Declarative Schema in a custom module.
<?php
namespace vendor_namemodule_nameSetupPatchData;
use MagentoFrameworkSetupPatchDataPatchInterface;
use MagentoFrameworkSetupPatchPatchVersionInterface;
use MagentoFrameworkSetupModuleDataSetupInterface;
use MagentoCustomerModelCustomer;
use MagentoCustomerSetupCustomerSetupFactory;
use MagentoEavModelEntityAttributeSetFactory as AttributeSetFactory;
use MagentoFrameworkDBDdlTable;
class AddTestAttribute implements DataPatchInterface
protected $_moduleDataSetup;
protected $_customerSetupFactory;
protected $_attributeSetFactory;
public function __construct(
ModuleDataSetupInterface $moduleDataSetup,
CustomerSetupFactory $customerSetupFactory,
AttributeSetFactory $attributeSetFactory
)
$this->_moduleDataSetup = $moduleDataSetup;
$this->_customerSetupFactory = $customerSetupFactory;
$this->_attributeSetFactory = $attributeSetFactory;
public function apply()
$customerSetup = $this->_customerSetupFactory->create(['setup' => $this->_moduleDataSetup]);
$customerEntity = $customerSetup->getEavConfig()->getEntityType(Customer::ENTITY);
$attributeSetId = $customerEntity->getDefaultAttributeSetId();
$attributeSet = $this->_attributeSetFactory->create();
$attributeSet->getDefaultGroupId($attributeSetId);
$customerSetup->removeAttribute(Customer::ENTITY, 'test');
$customerSetup->addAttribute(Customer::ENTITY, 'test', array(
'type' => Table::TYPE_DECIMAL,
'label' => 'Test',
'input' => 'text',
'required' => 0,
'default' => 0,
'visible' => 0,
'system' => 0
));
public function getAliases()
return [];
public static function getDependencies()
return [
];
I have added one customer attribute using Declarative Schema in a custom module.
<?php
namespace vendor_namemodule_nameSetupPatchData;
use MagentoFrameworkSetupPatchDataPatchInterface;
use MagentoFrameworkSetupPatchPatchVersionInterface;
use MagentoFrameworkSetupModuleDataSetupInterface;
use MagentoCustomerModelCustomer;
use MagentoCustomerSetupCustomerSetupFactory;
use MagentoEavModelEntityAttributeSetFactory as AttributeSetFactory;
use MagentoFrameworkDBDdlTable;
class AddTestAttribute implements DataPatchInterface
protected $_moduleDataSetup;
protected $_customerSetupFactory;
protected $_attributeSetFactory;
public function __construct(
ModuleDataSetupInterface $moduleDataSetup,
CustomerSetupFactory $customerSetupFactory,
AttributeSetFactory $attributeSetFactory
)
$this->_moduleDataSetup = $moduleDataSetup;
$this->_customerSetupFactory = $customerSetupFactory;
$this->_attributeSetFactory = $attributeSetFactory;
public function apply()
$customerSetup = $this->_customerSetupFactory->create(['setup' => $this->_moduleDataSetup]);
$customerEntity = $customerSetup->getEavConfig()->getEntityType(Customer::ENTITY);
$attributeSetId = $customerEntity->getDefaultAttributeSetId();
$attributeSet = $this->_attributeSetFactory->create();
$attributeSet->getDefaultGroupId($attributeSetId);
$customerSetup->removeAttribute(Customer::ENTITY, 'test');
$customerSetup->addAttribute(Customer::ENTITY, 'test', array(
'type' => Table::TYPE_DECIMAL,
'label' => 'Test',
'input' => 'text',
'required' => 0,
'default' => 0,
'visible' => 0,
'system' => 0
));
public function getAliases()
return [];
public static function getDependencies()
return [
];
answered Jan 21 at 10:26
community wiki
Ramanathan
its not displayed on form
– Adarsh Shukla
Mar 1 at 5:37
how can we make it visible on form
– Adarsh Shukla
Mar 1 at 6:01
i have changed visible 0 to 1 still its not visible on admin form
– Adarsh Shukla
Mar 1 at 6:02
add a comment |
its not displayed on form
– Adarsh Shukla
Mar 1 at 5:37
how can we make it visible on form
– Adarsh Shukla
Mar 1 at 6:01
i have changed visible 0 to 1 still its not visible on admin form
– Adarsh Shukla
Mar 1 at 6:02
its not displayed on form
– Adarsh Shukla
Mar 1 at 5:37
its not displayed on form
– Adarsh Shukla
Mar 1 at 5:37
how can we make it visible on form
– Adarsh Shukla
Mar 1 at 6:01
how can we make it visible on form
– Adarsh Shukla
Mar 1 at 6:01
i have changed visible 0 to 1 still its not visible on admin form
– Adarsh Shukla
Mar 1 at 6:02
i have changed visible 0 to 1 still its not visible on admin form
– Adarsh Shukla
Mar 1 at 6:02
add a comment |
After reviewing the schema.xsd; I don't see any support for it; but - you can add support for it by updating the schema in your own module and then pointing your file to it while adding support for the additional functionality. (which is alot of work unless you are building several modules and you are doing this within your "core")
Currently this is easily done the previous way via the InstallData.php; I'm not sure if anyone wants this added to declarative at this time; if so; I can put something together as a PR?
If you have a new question, please ask it by clicking the Ask Question button. Include a link to this question if it helps provide context. - From Review
– Jai
Jan 28 at 19:10
Upon some research; trying to add/remove attributes via declarative is short of crossing boundaries between the db schema and data patch demarcations. so technically; add/remove attributes should be done via installdata / data patches. Which @Ramanathan recommends.
– billandr
Jan 29 at 20:31
add a comment |
After reviewing the schema.xsd; I don't see any support for it; but - you can add support for it by updating the schema in your own module and then pointing your file to it while adding support for the additional functionality. (which is alot of work unless you are building several modules and you are doing this within your "core")
Currently this is easily done the previous way via the InstallData.php; I'm not sure if anyone wants this added to declarative at this time; if so; I can put something together as a PR?
If you have a new question, please ask it by clicking the Ask Question button. Include a link to this question if it helps provide context. - From Review
– Jai
Jan 28 at 19:10
Upon some research; trying to add/remove attributes via declarative is short of crossing boundaries between the db schema and data patch demarcations. so technically; add/remove attributes should be done via installdata / data patches. Which @Ramanathan recommends.
– billandr
Jan 29 at 20:31
add a comment |
After reviewing the schema.xsd; I don't see any support for it; but - you can add support for it by updating the schema in your own module and then pointing your file to it while adding support for the additional functionality. (which is alot of work unless you are building several modules and you are doing this within your "core")
Currently this is easily done the previous way via the InstallData.php; I'm not sure if anyone wants this added to declarative at this time; if so; I can put something together as a PR?
After reviewing the schema.xsd; I don't see any support for it; but - you can add support for it by updating the schema in your own module and then pointing your file to it while adding support for the additional functionality. (which is alot of work unless you are building several modules and you are doing this within your "core")
Currently this is easily done the previous way via the InstallData.php; I'm not sure if anyone wants this added to declarative at this time; if so; I can put something together as a PR?
answered Jan 28 at 18:29
billandrbillandr
1
1
If you have a new question, please ask it by clicking the Ask Question button. Include a link to this question if it helps provide context. - From Review
– Jai
Jan 28 at 19:10
Upon some research; trying to add/remove attributes via declarative is short of crossing boundaries between the db schema and data patch demarcations. so technically; add/remove attributes should be done via installdata / data patches. Which @Ramanathan recommends.
– billandr
Jan 29 at 20:31
add a comment |
If you have a new question, please ask it by clicking the Ask Question button. Include a link to this question if it helps provide context. - From Review
– Jai
Jan 28 at 19:10
Upon some research; trying to add/remove attributes via declarative is short of crossing boundaries between the db schema and data patch demarcations. so technically; add/remove attributes should be done via installdata / data patches. Which @Ramanathan recommends.
– billandr
Jan 29 at 20:31
If you have a new question, please ask it by clicking the Ask Question button. Include a link to this question if it helps provide context. - From Review
– Jai
Jan 28 at 19:10
If you have a new question, please ask it by clicking the Ask Question button. Include a link to this question if it helps provide context. - From Review
– Jai
Jan 28 at 19:10
Upon some research; trying to add/remove attributes via declarative is short of crossing boundaries between the db schema and data patch demarcations. so technically; add/remove attributes should be done via installdata / data patches. Which @Ramanathan recommends.
– billandr
Jan 29 at 20:31
Upon some research; trying to add/remove attributes via declarative is short of crossing boundaries between the db schema and data patch demarcations. so technically; add/remove attributes should be done via installdata / data patches. Which @Ramanathan recommends.
– billandr
Jan 29 at 20:31
add a comment |
Please use the following code to create Customer's Phone number attribute that will be used in the Registration form too:
<?php
namespace VendorModuleSetupPatchData;
use MagentoCustomerModelCustomer;
use MagentoCustomerSetupCustomerSetupFactory;
use MagentoFrameworkSetupModuleDataSetupInterface;
use MagentoFrameworkSetupPatchDataPatchInterface;
use MagentoEavModelEntityAttributeSetFactory as AttributeSetFactory;
/**
* Class AddCustomerPhoneNumberAttribute
* @package VendorModuleSetupPatchData
*/
class AddCustomerPhoneNumberAttribute implements DataPatchInterface
/**
* @var ModuleDataSetupInterface
*/
protected $moduleDataSetup;
/**
* @var CustomerSetupFactory
*/
protected $customerSetupFactory;
/**
* @var AttributeSetFactory
*/
protected $attributeSetFactory;
/**
* AddCustomerPhoneNumberAttribute constructor.
* @param ModuleDataSetupInterface $moduleDataSetup
* @param CustomerSetupFactory $customerSetupFactory
* @param AttributeSetFactory $attributeSetFactory
*/
public function __construct(
ModuleDataSetupInterface $moduleDataSetup,
CustomerSetupFactory $customerSetupFactory,
AttributeSetFactory $attributeSetFactory
)
$this->moduleDataSetup = $moduleDataSetup;
$this->customerSetupFactory = $customerSetupFactory;
$this->attributeSetFactory = $attributeSetFactory;
/**
* @inheritdoc
*/
public function apply()
$customerSetup = $this->customerSetupFactory->create(['setup' => $this->moduleDataSetup]);
$customerEntity = $customerSetup->getEavConfig()->getEntityType(Customer::ENTITY);
$attributeSetId = $customerEntity->getDefaultAttributeSetId();
$attributeSet = $this->attributeSetFactory->create();
$attributeGroupId = $attributeSet->getDefaultGroupId($attributeSetId);
$customerSetup->addAttribute(
Customer::ENTITY,
'phone_number',
[
'type' => 'varchar',
'label' => 'Phone Number',
'input' => 'text',
'validate_rules' => '"max_text_length":255,"min_text_length":1',
'required' => false,
'sort_order' => 120,
'position' => 120,
'visible' => true,
'user_defined' => true,
'unique' => false,
'system' => false,
]
);
$attribute = $customerSetup->getEavConfig()->getAttribute(
Customer::ENTITY,
'phone_number'
);
$attribute->addData(
[
'attribute_set_id' => $attributeSetId,
'attribute_group_id' => $attributeGroupId,
'used_in_forms' => ['adminhtml_customer', 'customer_account_create', 'customer_account_edit'],
]
);
$attribute->save();
/**
* @inheritdoc
*/
public static function getDependencies()
return [];
/**
* @inheritdoc
*/
public function getAliases()
return [];
add a comment |
Please use the following code to create Customer's Phone number attribute that will be used in the Registration form too:
<?php
namespace VendorModuleSetupPatchData;
use MagentoCustomerModelCustomer;
use MagentoCustomerSetupCustomerSetupFactory;
use MagentoFrameworkSetupModuleDataSetupInterface;
use MagentoFrameworkSetupPatchDataPatchInterface;
use MagentoEavModelEntityAttributeSetFactory as AttributeSetFactory;
/**
* Class AddCustomerPhoneNumberAttribute
* @package VendorModuleSetupPatchData
*/
class AddCustomerPhoneNumberAttribute implements DataPatchInterface
/**
* @var ModuleDataSetupInterface
*/
protected $moduleDataSetup;
/**
* @var CustomerSetupFactory
*/
protected $customerSetupFactory;
/**
* @var AttributeSetFactory
*/
protected $attributeSetFactory;
/**
* AddCustomerPhoneNumberAttribute constructor.
* @param ModuleDataSetupInterface $moduleDataSetup
* @param CustomerSetupFactory $customerSetupFactory
* @param AttributeSetFactory $attributeSetFactory
*/
public function __construct(
ModuleDataSetupInterface $moduleDataSetup,
CustomerSetupFactory $customerSetupFactory,
AttributeSetFactory $attributeSetFactory
)
$this->moduleDataSetup = $moduleDataSetup;
$this->customerSetupFactory = $customerSetupFactory;
$this->attributeSetFactory = $attributeSetFactory;
/**
* @inheritdoc
*/
public function apply()
$customerSetup = $this->customerSetupFactory->create(['setup' => $this->moduleDataSetup]);
$customerEntity = $customerSetup->getEavConfig()->getEntityType(Customer::ENTITY);
$attributeSetId = $customerEntity->getDefaultAttributeSetId();
$attributeSet = $this->attributeSetFactory->create();
$attributeGroupId = $attributeSet->getDefaultGroupId($attributeSetId);
$customerSetup->addAttribute(
Customer::ENTITY,
'phone_number',
[
'type' => 'varchar',
'label' => 'Phone Number',
'input' => 'text',
'validate_rules' => '"max_text_length":255,"min_text_length":1',
'required' => false,
'sort_order' => 120,
'position' => 120,
'visible' => true,
'user_defined' => true,
'unique' => false,
'system' => false,
]
);
$attribute = $customerSetup->getEavConfig()->getAttribute(
Customer::ENTITY,
'phone_number'
);
$attribute->addData(
[
'attribute_set_id' => $attributeSetId,
'attribute_group_id' => $attributeGroupId,
'used_in_forms' => ['adminhtml_customer', 'customer_account_create', 'customer_account_edit'],
]
);
$attribute->save();
/**
* @inheritdoc
*/
public static function getDependencies()
return [];
/**
* @inheritdoc
*/
public function getAliases()
return [];
add a comment |
Please use the following code to create Customer's Phone number attribute that will be used in the Registration form too:
<?php
namespace VendorModuleSetupPatchData;
use MagentoCustomerModelCustomer;
use MagentoCustomerSetupCustomerSetupFactory;
use MagentoFrameworkSetupModuleDataSetupInterface;
use MagentoFrameworkSetupPatchDataPatchInterface;
use MagentoEavModelEntityAttributeSetFactory as AttributeSetFactory;
/**
* Class AddCustomerPhoneNumberAttribute
* @package VendorModuleSetupPatchData
*/
class AddCustomerPhoneNumberAttribute implements DataPatchInterface
/**
* @var ModuleDataSetupInterface
*/
protected $moduleDataSetup;
/**
* @var CustomerSetupFactory
*/
protected $customerSetupFactory;
/**
* @var AttributeSetFactory
*/
protected $attributeSetFactory;
/**
* AddCustomerPhoneNumberAttribute constructor.
* @param ModuleDataSetupInterface $moduleDataSetup
* @param CustomerSetupFactory $customerSetupFactory
* @param AttributeSetFactory $attributeSetFactory
*/
public function __construct(
ModuleDataSetupInterface $moduleDataSetup,
CustomerSetupFactory $customerSetupFactory,
AttributeSetFactory $attributeSetFactory
)
$this->moduleDataSetup = $moduleDataSetup;
$this->customerSetupFactory = $customerSetupFactory;
$this->attributeSetFactory = $attributeSetFactory;
/**
* @inheritdoc
*/
public function apply()
$customerSetup = $this->customerSetupFactory->create(['setup' => $this->moduleDataSetup]);
$customerEntity = $customerSetup->getEavConfig()->getEntityType(Customer::ENTITY);
$attributeSetId = $customerEntity->getDefaultAttributeSetId();
$attributeSet = $this->attributeSetFactory->create();
$attributeGroupId = $attributeSet->getDefaultGroupId($attributeSetId);
$customerSetup->addAttribute(
Customer::ENTITY,
'phone_number',
[
'type' => 'varchar',
'label' => 'Phone Number',
'input' => 'text',
'validate_rules' => '"max_text_length":255,"min_text_length":1',
'required' => false,
'sort_order' => 120,
'position' => 120,
'visible' => true,
'user_defined' => true,
'unique' => false,
'system' => false,
]
);
$attribute = $customerSetup->getEavConfig()->getAttribute(
Customer::ENTITY,
'phone_number'
);
$attribute->addData(
[
'attribute_set_id' => $attributeSetId,
'attribute_group_id' => $attributeGroupId,
'used_in_forms' => ['adminhtml_customer', 'customer_account_create', 'customer_account_edit'],
]
);
$attribute->save();
/**
* @inheritdoc
*/
public static function getDependencies()
return [];
/**
* @inheritdoc
*/
public function getAliases()
return [];
Please use the following code to create Customer's Phone number attribute that will be used in the Registration form too:
<?php
namespace VendorModuleSetupPatchData;
use MagentoCustomerModelCustomer;
use MagentoCustomerSetupCustomerSetupFactory;
use MagentoFrameworkSetupModuleDataSetupInterface;
use MagentoFrameworkSetupPatchDataPatchInterface;
use MagentoEavModelEntityAttributeSetFactory as AttributeSetFactory;
/**
* Class AddCustomerPhoneNumberAttribute
* @package VendorModuleSetupPatchData
*/
class AddCustomerPhoneNumberAttribute implements DataPatchInterface
/**
* @var ModuleDataSetupInterface
*/
protected $moduleDataSetup;
/**
* @var CustomerSetupFactory
*/
protected $customerSetupFactory;
/**
* @var AttributeSetFactory
*/
protected $attributeSetFactory;
/**
* AddCustomerPhoneNumberAttribute constructor.
* @param ModuleDataSetupInterface $moduleDataSetup
* @param CustomerSetupFactory $customerSetupFactory
* @param AttributeSetFactory $attributeSetFactory
*/
public function __construct(
ModuleDataSetupInterface $moduleDataSetup,
CustomerSetupFactory $customerSetupFactory,
AttributeSetFactory $attributeSetFactory
)
$this->moduleDataSetup = $moduleDataSetup;
$this->customerSetupFactory = $customerSetupFactory;
$this->attributeSetFactory = $attributeSetFactory;
/**
* @inheritdoc
*/
public function apply()
$customerSetup = $this->customerSetupFactory->create(['setup' => $this->moduleDataSetup]);
$customerEntity = $customerSetup->getEavConfig()->getEntityType(Customer::ENTITY);
$attributeSetId = $customerEntity->getDefaultAttributeSetId();
$attributeSet = $this->attributeSetFactory->create();
$attributeGroupId = $attributeSet->getDefaultGroupId($attributeSetId);
$customerSetup->addAttribute(
Customer::ENTITY,
'phone_number',
[
'type' => 'varchar',
'label' => 'Phone Number',
'input' => 'text',
'validate_rules' => '"max_text_length":255,"min_text_length":1',
'required' => false,
'sort_order' => 120,
'position' => 120,
'visible' => true,
'user_defined' => true,
'unique' => false,
'system' => false,
]
);
$attribute = $customerSetup->getEavConfig()->getAttribute(
Customer::ENTITY,
'phone_number'
);
$attribute->addData(
[
'attribute_set_id' => $attributeSetId,
'attribute_group_id' => $attributeGroupId,
'used_in_forms' => ['adminhtml_customer', 'customer_account_create', 'customer_account_edit'],
]
);
$attribute->save();
/**
* @inheritdoc
*/
public static function getDependencies()
return [];
/**
* @inheritdoc
*/
public function getAliases()
return [];
answered 5 hours ago
Sumit VermaSumit Verma
717418
717418
add a comment |
add a comment |
Thanks for contributing an answer to Magento Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f255460%2fhow-to-add-a-customer-attribute-in-a-custom-module-using-declarative-schema-in-m%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
You can create custom attribute in normal way also in 2.3. Did you try it?
– Rohan Hapani
Dec 21 '18 at 8:43
Yes i know. but i am asking how to create in declarative approach?
– Varsha
Dec 22 '18 at 4:31