ด้วยความช่วยเหลือของMatthéo Geoffray
นี่คือสิ่งที่ฉันทำเพื่อใช้การตรวจสอบส่วนหน้าสำหรับแอตทริบิวต์ที่กำหนดเอง
[
'type' => 'int',
'backend' => '',
'frontend' => '',
'label' => 'XXXX',
'input' => 'text',
'frontend_class' => 'validate-greater-than-zero',
'source' => '',
'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL,
'visible' => true,
'required' => true,
'user_defined' => false,
'default' => 0,
'searchable' => false,
'filterable' => true,
'comparable' => false,
'visible_on_front' => false,
'used_in_product_listing' => true,
'unique' => false
]
นี่คือแอตทริบิวต์ที่กำหนดเองในสคริปต์การติดตั้ง
ฉันเพิ่มปลั๊กอินใน di.xml
<type name="Magento\Catalog\Ui\DataProvider\CatalogEavValidationRules">
<plugin name="namespace_custom_validation_for_product_attribute" type="Namespace\Module\Model\Plugin\Product\ValidationRules"/>
</type>
นี่คือรหัสปลั๊กอิน
<?php
namespace Namespace\Module\Model\Plugin\Product;
use Closure;
class ValidationRules
{
/**
* @param \Magento\Catalog\Ui\DataProvider\CatalogEavValidationRules $rulesObject
* @param callable $proceed
* @param \Magento\Catalog\Api\Data\ProductAttributeInterface $attribute,
* @param array $data
* @return array
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function aroundBuild(
\Magento\Catalog\Ui\DataProvider\CatalogEavValidationRules $rulesObject,
Closure $proceed,
\Magento\Catalog\Api\Data\ProductAttributeInterface $attribute,
array $data
){
$rules = $proceed($attribute,$data);
if($attribute->getAttributeCode() == 'xyz'){ //custom filter
$validationClasses = explode(' ', $attribute->getFrontendClass());
foreach ($validationClasses as $class) {
$rules[$class] = true;
}
}
return $rules;
}
}
โดยทั่วไป\Magento\Catalog\Ui\DataProvider\CatalogEavValidationRules
แล้ววิธีการที่เรียกว่าmapRules
จะตรงกับคลาสส่วนหน้ากับกฎการตรวจสอบจำนวน จำกัด เท่านั้น หากต้องการใช้กฎการตรวจสอบเพิ่มเติมเราต้องผนวกกฎโดยใช้ปลั๊กอิน
สำหรับการตรวจสอบด้านเซิร์ฟเวอร์โปรดดูMatthéo Geoffray
คำตอบ