Рейтинг:0

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

флаг 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

флаг cn
Когда вы говорите "вес изменяется вручную" - как именно это происходит? Перетаскивание — это просто слой JS над выбором веса, он обновляет те же самые выборы для отправки формы, и поскольку элементы поля не хранят «вес», кроме дельты, я бы предположил, что вес и дельта одно и то же (с точки зрения порядка сортировки) во всех контекстах. Есть ли другой механизм, который вы можете использовать для передачи/установки веса элемента поля?
abelass avatar
флаг nl
С функцией перетаскивания, изначально реализованной в Drupal. У вас всегда есть возможность переключиться на ручное управление порядком товаров, адаптируя вес через поле веса.Как вы правильно полагаете, вес потом используется для пересчета дельты и не сохраняется. При проверке формы мне нужно получить отправленные значения веса в сценарии без перетаскивания, но они не кажутся доступными.
флаг cn
Я сомневаюсь, что это будет доступно без взлома процесса проверки, ограничения, вероятно, должны иметь возможность проверки без внешнего воздействия, поскольку они могут быть вызваны без задействования формы. Но какую информацию дает вам этот вес, который вы все равно не можете вывести из дельты? Понимание того, что вы пытаетесь сделать, может помочь, по крайней мере, предложить альтернативу, если нет простого прямого ответа на вопрос.
abelass avatar
флаг nl
Спасибо @Clive, мне нужно было проверить порядок по дате элемента абзаца, чтобы убедиться, что верхний элемент всегда самый последний. Это историческая особенность приложения в d7. Но после некоторого размышления я бы лучше переупорядочил по дате после отправки, в любом случае это более удобно для пользователя.
Рейтинг:0
флаг nl

Тем временем я нашел этот учебник https://philfrilling.com/blog/2018-09/custom-validation-multiple-dependent-entity-fields-drupal-8 это решило бы мою проблему. Создание ограничения на всю сущность вместо поля дает доступ только к нужной мне информации.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.