Câmpul de adresă este o colecție de alte câmpuri, unul dintre ele este cod_poștal.
Am scris o constrângere de validare personalizată. Se aplică și funcționează. dar mesajul de eroare se afișează pentru toate câmpurile câmpului Adresă, îl vreau doar pentru Cod_poștal, cum este posibil?
Aceasta este clasa mea ZipCodeValueValidator
<?php
spațiu de nume Drupal\zip_code_lookup\Plugin\Validation\Constraint;
utilizați Symfony\Component\Validator\Constraint;
utilizați Symfony\Component\Validator\ConstraintValidator;
/**
* Validează constrângerea codului poștal.
*/
clasa ZipCodeValueValidator extinde ConstraintValidator
{
/**
* {@inheritdoc}
*/
validare funcție publică($articole, Constrângere $constrângere)
{
foreach ($articole ca $item) {
if ($this->validateZip($item)) {
$errorMessage = "Acesta este noul mesaj de eroare pe care l-am scris.";
$this->context->buildViolation($errorMessage)
->atPath('field_billing.postal_code')
->addViolation();
}
}
}
funcția privată validateZip($value)
{
returnează TRUE;
}
}
Și aici am pus-o pe teren
<?php
utilizați Drupal\Core\Entity\EntityTypeInterface;
/**
* Implementează hook_entity_bundle_field_info_alter().
*/
funcția zip_code_lookup_entity_bundle_field_info_alter(&$fields, EntityTypeInterface $entity_type, $bundle)
{
if ($entity_type->id() === 'grup') {
dacă ($bundle == „abonat”) {
dacă (isset($fields['field_billing'])) {
$fields['field_billing']->addConstraint('ZipCode', []);
}
}
}
}
https://www.drupal.org/docs/drupal-apis/entity-api/entity-validation-api/providing-a-custom-validation-constraint