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)