의 도움으로 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
답변을 참조하십시오 .