[ 'type' => 'int', 'backend' => '', 'frontend' => '', 'label' => 'XXXX', 'input' => 'teks', 'frontend_class' => 'validasi-lebih besar dari nol', 'sumber' => '', 'global' => \ Magento \ Eav \ Model \ Entity \ Attribute \ ScopedAttributeInterface :: SCOPE_GLOBAL, 'terlihat' => benar, 'wajib' => benar, 'user_defined' => false, 'default' => 0, 'dicari' => salah, 'filterable' => true, 'sebanding' => salah, 'visible_on_front' => false, 'used_in_product_listing' => true, 'unik' => salah ]
Saya menambahkan atribut produk khusus yang berfungsi dengan baik, tetapi tidak dapat menambahkan validate-greater-than-zero
validasi.
Jika kita melihat properti atribut apa pun di Input Validation for Store Owner
sana ada sejumlah validasi dalam opsi tertentu.
validate-number
, validate-digits
, validate-email
, validate-url
, validate-alpha
,validate-alphanum
Ini adalah satu-satunya validasi yang diterapkan di bagian atribut Produk.
magento2
javascript
jquery
form-validation
knockoutjs
Amit Singh
sumber
sumber
Jawaban:
Salah satu solusinya adalah menambahkan
backend model
ke atribut Anda yang digunakan untuk memformat / memvalidasi nilai atribut Anda sebelum menyimpan dan / atau setelah memuat.Tambahkan kelas backend:
Ini adalah contoh kelas khusus Anda
\Foo\Bar\Model\Attribute\Backend\YourAttribute
Jika Anda menginginkan contoh sederhana dari kelas semacam itu, Anda dapat memeriksanya
\Magento\Customer\Model\Customer\Attribute\Backend\Website
\Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend
backend_model
kolom dalameav_attribute
tabelEDIT
Jika Anda ingin kelas yang melakukan hal yang hampir sama seperti yang Anda inginkan, Anda dapat melihat
SKU
validasi atribut.\Magento\Catalog\Model\Product\Attribute\Backend\Sku
Saya juga menambahkan metode di kelas contoh
EDIT
Solusi lain (mungkin bukan yang terbaik) adalah membuat plugin pada fungsi
\Magento\Eav\Helper\Data::getFrontendClasses
dan menambahkan kelas frontend Anda di sini yang dapat divalidasi di depan.sumber
eav_attribute
tabel di kolomfrontend_class
apakah Anda nilainyavalidate-greater-than-zero
?validate-number
,validate-digits
,validate-email
,validate-url
,validate-alpha
,validate-alphanum
.Dengan bantuan
Matthéo Geoffray
, inilah yang saya lakukan untuk menerapkan validasi frontend untuk atribut khusus.Ini adalah atribut khusus dalam skrip instalasi.
Saya menambahkan plugin di di.xml
Ini adalah kode plugin.
Pada dasarnya
\Magento\Catalog\Ui\DataProvider\CatalogEavValidationRules
, metode yang dipanggilmapRules
hanya cocok dengan kelas frontend terhadap sejumlah aturan validasi yang terbatas. Untuk menerapkan lebih banyak aturan validasi, kita perlu menambahkan aturan menggunakan plugin.Untuk validasi sisi server, Silakan merujuk ke
Matthéo Geoffray
jawaban.sumber
Saya tidak yakin itu bisa dilakukan dari skrip instalasi. Tapi saya yakin itu mungkin jika Anda akan membuat "sebelum plugin pendengar" dengan fungsi
beforeSave()
dan memeriksa nilai di sana.sumber