Score: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 flag
เมื่อคุณพูดว่า "น้ำหนักถูกแก้ไขด้วยตนเอง" - สิ่งนั้นเกิดขึ้นได้อย่างไร? การลากและวางเป็นเพียงเลเยอร์ JS เหนือการเลือกน้ำหนัก ซึ่งจะอัปเดตการเลือกแบบเดียวกันนั้นสำหรับการส่งแบบฟอร์ม และเนื่องจากรายการฟิลด์ไม่ได้เก็บ "น้ำหนัก" นอกเหนือจากเดลต้า ฉันจึงถือว่าน้ำหนักและเดลต้านั้น สิ่งเดียวกัน (ในแง่ของการเรียงลำดับ) ในทุกบริบท มีกลไกอื่นที่คุณสามารถใช้เพื่อส่ง/ตั้งค่าน้ำหนักของรายการฟิลด์หรือไม่
abelass avatar
nl flag
ด้วยคุณสมบัติการลากและวางที่ใช้งานใน Drupal คุณมีตัวเลือกในการเปลี่ยนไปใช้การจัดการด้วยตนเองของใบสั่งสินค้า โดยปรับน้ำหนักผ่านฟิลด์น้ำหนักตามที่คุณสันนิษฐานอย่างถูกต้อง น้ำหนักจะถูกใช้สำหรับการคำนวณเดลต้าใหม่และไม่ถูกเก็บไว้ เมื่อตรวจสอบความถูกต้องของแบบฟอร์ม ฉันต้องได้รับค่าน้ำหนักที่ส่งมาในสถานการณ์ที่ไม่ใช่การลากและวาง แต่ดูเหมือนจะไม่สามารถเข้าถึงได้
cn flag
ฉันสงสัยว่ามันจะใช้งานได้โดยไม่ต้องแฮ็กในขั้นตอนการตรวจสอบ ข้อจำกัดอาจต้องสามารถตรวจสอบได้โดยไม่มีอิทธิพลจากภายนอก เนื่องจากสามารถเรียกใช้ได้โดยไม่ต้องใช้แบบฟอร์ม แต่น้ำหนักนั้นให้ข้อมูลอะไรแก่คุณที่คุณไม่สามารถอนุมานได้จากเดลต้า การทำความเข้าใจสิ่งที่คุณกำลังพยายามทำอย่างน้อยอาจช่วยแนะนำทางเลือกอื่นได้ หากไม่มีคำตอบโดยตรงที่ง่ายสำหรับคำถาม
abelass avatar
nl flag
ขอบคุณ @Clive ฉันต้องทดสอบคำสั่งซื้อกับวันที่ของย่อหน้าเพื่อให้แน่ใจว่ารายการบนสุดเป็นรายการล่าสุดเสมอ นี่เป็นคุณลักษณะทางประวัติศาสตร์จากแอปพลิเคชันใน d7 แต่หลังจากไตร่ตรองเพิ่มเติมแล้ว ฉันควรจัดลำดับใหม่ตามวันที่หลังจากส่งจะดีกว่า วิธีนี้เป็นมิตรกับผู้ใช้มากกว่าอยู่ดี
Score:0
ธง nl

ในระหว่างนี้ฉันพบบทช่วยสอนนี้ https://philfrilling.com/blog/2018-09/custom-validation-multiple-dependent-entity-fields-drupal-8 ที่จะแก้ปัญหาของฉันได้ การจำกัดเอนทิตีทั้งหมดแทนที่จะเป็นฟิลด์ทำให้เข้าถึงเฉพาะข้อมูลที่ฉันต้องการเท่านั้น

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา