Bài viết này sẽ hướng dẫn bạn từng bước cách tạo một thuộc tính trường văn bản (text field) tùy chỉnh cho thực thể Customer (Khách hàng) trong Magento 2 sử dụng Data Patch. Việc này cho phép bạn thêm thông tin bổ sung vào hồ sơ khách hàng, hiển thị nó trong Customer Grid và Customer Form trong khu vực Admin. Hãy cùng tìm hiểu tại sao việc này lại quan trọng và cách thực hiện nó một cách chính xác.
Trong nhiều trường hợp, thông tin mặc định của Magento 2 không đủ để đáp ứng nhu cầu kinh doanh cụ thể. Ví dụ, bạn có thể muốn lưu trữ ID khách hàng từ một hệ thống bên ngoài, thông tin về chương trình khách hàng thân thiết, hoặc bất kỳ dữ liệu tùy chỉnh nào khác. Việc thêm thuộc tính tùy chỉnh cho phép bạn:
Data Patch là một cơ chế trong Magento 2 cho phép bạn thực hiện các thay đổi dữ liệu một cách tự động và có kiểm soát. Nó đặc biệt hữu ích khi bạn cần thêm, sửa đổi hoặc xóa dữ liệu một lần duy nhất, chẳng hạn như khi cài đặt một module mới hoặc nâng cấp phiên bản. Việc sử dụng Data Patch để thêm thuộc tính khách hàng có một số ưu điểm:
Đầu tiên, bạn cần tạo một class Data Patch trong namespace `\ExampleCorp\Customer\Setup\Patch\Data`. Class này phải implements interface `\Magento\Framework\Setup\Patch\DataPatchInterface`. File `ExternalId.php` sẽ có nội dung như sau:
<?php
namespace ExampleCorp\Customer\Setup\Patch\Data;
use \Magento\Framework\Setup\Patch\DataPatchInterface;
class ExternalId implements DataPatchInterface
{
public function apply()
{
// Sẽ được triển khai ở các bước tiếp theo.
}
public function getAliases()
{
// Sẽ được triển khai ở các bước tiếp theo.
}
public function getDependencies()
{
// Sẽ được triển khai ở các bước tiếp theo.
}
}
Để Data Patch hoạt động, bạn cần inject các dependencies cần thiết thông qua constructor DI. Các dependencies này bao gồm:
/**
* Constructor
*
* @param ModuleDataSetupInterface $moduleDataSetup
* @param CustomerSetupFactory $customerSetupFactory
* @param AttributeResource $attributeResource
* @param LoggerInterface $logger
*/
public function __construct(
ModuleDataSetupInterface $moduleDataSetup,
CustomerSetupFactory $customerSetupFactory,
AttributeResource $attributeResource,
LoggerInterface $logger
) {
$this->moduleDataSetup = $moduleDataSetup;
$this->customerSetup = $customerSetupFactory->create(['setup' => $moduleDataSetup]);
$this->attributeResource = $attributeResource;
$this->logger = $logger;
}
Phương thức `apply()` là nơi bạn thực hiện các thay đổi dữ liệu. Dưới đây là các bước cần thực hiện bên trong phương thức này:
public function apply()
{
$this->moduleDataSetup->getConnection()->startSetup();
try {
$this->customerSetup->addAttribute(
CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER,
'externalcorp_external_id',
[
'label' => 'External ID',
'required' => 0,
'position' => 100,
'system' => 0,
'user_defined' => 1,
'is_used_in_grid' => 1,
'is_visible_in_grid' => 1,
'is_filterable_in_grid' => 1,
'is_searchable_in_grid' => 1,
]
);
$this->customerSetup->addAttributeToSet(
CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER,
CustomerMetadataInterface::ATTRIBUTE_SET_ID_CUSTOMER,
null,
'externalcorp_external_id'
);
$attribute = $this->customerSetup->getEavConfig()
->getAttribute(CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER, 'externalcorp_external_id');
$attribute->setData('used_in_forms', [
'adminhtml_customer'
]);
$this->attributeResource->save($attribute);
} catch (Exception $e) {
$this->logger->err($e->getMessage());
}
$this->moduleDataSetup->getConnection()->endSetup();
}
Vì Data Patch này không có dependencies và không được đổi tên trước đó, cả hai phương thức `getDependencies()` và `getAliases()` có thể trả về một mảng trống.
public static function getDependencies(): array
{
return [];
}
public function getAliases(): array
{
return [];
}
Chạy lệnh `bin/magento setup:upgrade` từ thư mục gốc của dự án để thực thi Data Patch vừa tạo. Sau khi chạy lệnh, thuộc tính sẽ được tạo trong Customer Form dưới mục Account Information, và cũng sẽ hiển thị trong Customer Grid.
Việc tạo thuộc tính trường văn bản tùy chỉnh cho khách hàng trong Magento 2 bằng Data Patch là một phương pháp hiệu quả để mở rộng khả năng quản lý dữ liệu khách hàng của bạn. Bằng cách làm theo hướng dẫn này, bạn có thể dễ dàng thêm thông tin bổ sung, hiển thị nó trong giao diện quản trị và sử dụng nó cho nhiều mục đích khác nhau. Hãy nhớ rằng, việc quản lý và sử dụng dữ liệu khách hàng một cách thông minh là chìa khóa để thành công trong kinh doanh trực tuyến.
Bài viết liên quan