Am un tip de paragraf cu 2 câmpuri: an și trimestru
Am un tip de conținut cu un câmp de paragraf (câmp_an_și_trimestru) care vizează NUMAI acest tip de paragraf
Încerc să creez o constrângere pentru a interzice codificarea unui duplicat (același an/trimestru)
Am încercat:
1-O constrângere la nivelul nodului în care se face buclă câmp_an_și_trimestru cu $node->get('field_year_and_quarter')->referencedEntities() pentru a verifica dacă există vreun duplicat
=> Acest lucru nu funcționează, deoarece nu ia în considerare ceea ce este codificat în widget, doar ultima versiune salvată este verificată
2-O constrângere la nivel de paragraf care face ca părintele său să poată intra în buclă câmp_an_și_trimestru cu $node_parent->get('field_year_and_quarter')->referencedEntities() pentru a verifica dacă există un duplicat [Înlocuiesc un articol cu paragraful prevăzut în parametru]
Iată codul:
  validare funcție publică($certificat_p, Constrângere $constrângere) {
    /* @var \Drupal\paragraphs\Entity\Paragraph $certificat_p */
    if ($certificat_p->bundle() == 'qoc') {
      $prod_company = $certificat_p->getParentEntity();
      $certificate = $prod_company->get('field_year_and_quarter')
        ->referencedEntities();
      $toate_certificatele = [];
      foreach ($certificate ca $certificat) {
        // folosiți paragraful furnizat în parametrul funcției
        $certificat_de_verificare = ($certificat_p->id() == $certificat->id()) ? $certificat_p : $certificat;
        $an = $cert_to_check->get('field_qoc_year')->value;
        $quarter = $certif_to_check->get('field_qoc_quarter')->value;
        // Anul/Tristrul sunt deja codificate
        dacă (isset($all_certificates[$an][$trimestru])) {
          $this->context->addViolation($constraint->duplicate_certif, [
            '%quarter' => surround_by_nbsp($quarter),
            '%an' => surround_by_nbsp($an),
          ]);
          pauză;
        }
        $all_certificates[$year][$quarter] = TRUE;
      }
    }
=> Acest lucru nu funcționează din același motiv
3- O constrângere la nivel de câmp... iată codul:
  validare funcție publică($articole, Constrângere $constrângere) {
    $certificates = $items->referencedEntities();
    $toate_certificatele = [];
    foreach ($certificate ca $certificat) {
      $an = $certificat->get('field_qoc_year')->valoare;
      $sfert = $certificat->get('field_qoc_quarter')->valoare;
      // Anul/Tristrul sunt deja codificate
      dacă (isset($all_certificates[$an][$trimestru])) {
        $this->context->addViolation($constraint->duplicate_certif, [
          '%quarter' => surround_by_nbsp($quarter),
          '%an' => surround_by_nbsp($an),
        ]);
        pauză;
      }
      $all_certificates[$year][$quarter] = TRUE;
    }
  }
=> Nu funcționează din același motiv
Ce ar trebuii să fac? (am incercat si eu sa validez in formular fara noroc)