Puncte:0

Custom validation constraints multi value paragraphs : how to get weight value

drapel nl

I am validating a multi value paragraph field using constraints.

/**
 * Implements hook_entity_bundle_field_info_alter().
 */
function cnfpt_internet_entity_bundle_field_info_alter(&$fields, \Drupal\Core\Entity\EntityTypeInterface $entity_type, $bundle) {
  if ($bundle === 'manifestation') {
    if (isset($fields['field_occurence'])) {
      // Add a validation.
      $fields['field_occurence']->addConstraint('Occurrence', []);
    }
  }
}
/**
 * Checks the mandatory fields of an occurence and ordere of the occurrences.
 *
 * @Constraint(
 *   id = "Occurrence",
 *   label = @Translation("Champ obligatoire par type d'occurence", context = "Validation"),
 *   type = "item"
 * )
 */
class OccurrenceConstraint extends Constraint {

  // Modalité requise pour occurrence distante.
  public $modaliteRequise = 'Le champ Modalité est requis';

  // Ville requise pour occurrence presentiel.
  public $villeRequise = 'Le champ Ville est requis';

  // Order of occurence
  public $ordreOccurrence = 'Les occurrences doivent être placées dans l\'ordre chronologique';

  // First occurence needs a contact.
  public $premiereOccurrenceContact = 'Un contact est obligatoire pour la première occurence';
}

field_occurence ist the paragraph field

My validate method starts like

 * Validates the Occurrence constraint.
 */
class OccurrenceConstraintValidator extends ConstraintValidator {
  /**
   * {@inheritdoc}
   */
  public function validate($items, Constraint $constraint) {

I have to make a validation taking into account the order of the paragraphs. If the paragraph is ordered with drag&drop there is no issue, I can take the delta value of items.

But if the weight is modified manually, I don't see how to get the modified weight value.

Any idea how to get the manually modified weight value?

Thanks Rainer

drapel cn
Când spui "greutatea este modificată manual" - cum se întâmplă asta exact? Trageți și plasați este doar un strat JS peste selecțiile de greutate, actualizează aceleași selecții pentru trimiterea formularului și, deoarece elementele de câmp nu stochează o „greutate” alta decât delta, aș fi presupus că greutatea și delta sunt unul și același lucru (în termeni de ordine de sortare) în toate contextele. Există un alt mecanism pe care îl puteți folosi pentru a trece/seta greutatea unui articol de câmp?
abelass avatar
drapel nl
Cu caracteristica drag&drop implementată nativ în Drupal. Aveți întotdeauna opțiunea de a trece la o gestionare manuală a comenzii de articole adaptând greutatea prin câmpul de greutate.După cum presupuneți corect, greutatea este apoi utilizată pentru recalcularea deltei și nu este stocată. Când validez formularul, trebuie să obțin valorile de greutate transmise într-un scenariu fără drag&drop, dar acestea nu par accesibile.
drapel cn
Mă îndoiesc că va fi disponibil fără piratare la procesul de validare, probabil că constrângerile trebuie să se poată valida fără influență externă, deoarece pot fi invocate fără a fi implicat un formular. Dar ce informații vă oferă această greutate pe care oricum nu le puteți deduce din deltă? Înțelegerea a ceea ce încercați să faceți ar putea ajuta cel puțin să sugerați o alternativă dacă nu există un răspuns direct ușor la întrebare.
abelass avatar
drapel nl
Mulțumesc @Clive, trebuia să testez comanda față de data articolului din paragraf pentru a fi sigur că articolul de sus este întotdeauna cel mai recent. Aceasta este o caracteristică istorică din aplicația din d7. Dar după mai multă reflecție, ar fi bine să reordonez după data de după trimitere, oricum acesta este mai ușor de utilizat.
Puncte:0
drapel nl

Intre timp am gasit acest tutorial https://philfrilling.com/blog/2018-09/custom-validation-multiple-dependent-entity-fields-drupal-8 asta mi-ar fi rezolvat problema. Efectuarea unei restricții asupra întregii entități în loc de câmp oferă acces doar la informațiile de care aveam nevoie.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.