Tôi có một loại đoạn văn với 2 trường: năm và quý
Tôi có một loại nội dung với trường đoạn văn (trường_năm_và_quý
) CHỈ nhắm mục tiêu loại đoạn này
Tôi đang cố gắng tạo một ràng buộc để không cho phép mã hóa một bản sao (cùng năm/quý)
Tôi đã thử:
1-Một ràng buộc ở cấp độ nút đang lặp vào trường_năm_và_quý
với $node->get('field_year_and_ quarter')->referencedEntities()
để kiểm tra nếu có trùng lặp
=> Điều này không hoạt động vì nó không tính đến những gì được mã hóa trong tiện ích, chỉ kiểm tra phiên bản đã lưu cuối cùng
2-Một ràng buộc ở cấp độ đoạn văn đang khiến Phụ huynh của nó có thể lặp vào trường_năm_và_quý
với $node_parent->get('field_year_and_ quarter')->referencedEntities()
để kiểm tra xem có trùng lặp nào không [Tôi thay thế một mục bằng đoạn được cung cấp trong tham số]
Đây là mã:
xác thực hàm công khai($certificate_p, Constraint $constraint) {
/* @var \Drupal\paragraphs\Entity\Paragraph $certificate_p */
if ($certificate_p->bundle() == 'qoc') {
$prod_company = $certificate_p->getParentEntity();
$certificates = $prod_company->get('field_year_and_ quarter')
->tham chiếuEntities();
$all_certificates = [];
foreach ($chứng chỉ dưới dạng $certificate) {
// sử dụng đoạn được cung cấp trong tham số chức năng
$certif_to_check = ($certificate_p->id() == $certificate->id()) ? $certificate_p : $certificate;
$year = $certif_to_check->get('field_qoc_year')->giá trị;
$ quarter = $certif_to_check->get('field_qoc_ quarter')->giá trị;
// Năm/Quý đã được mã hóa
if (isset($all_certificates[$year][$quý])) {
$this->context->addViolation($constraint->duplicate_certif, [
'% quarter' => surround_by_nbsp($ quarter),
'%year' => surround_by_nbsp($year),
]);
nghỉ;
}
$all_certificates[$year][$quý] = TRUE;
}
}
=> Điều này không hoạt động vì lý do tương tự
3- Một ràng buộc ở cấp độ trường... đây là mã:
chức năng công khai xác thực($items, Constraint $constraint) {
$certificates = $items->referencedEntities();
$all_certificates = [];
foreach ($chứng chỉ dưới dạng $certificate) {
$year = $certificate->get('field_qoc_year')->value;
$ quarter = $certificate->get('field_qoc_ quarter')->value;
// Năm/Quý đã được mã hóa
if (isset($all_certificates[$year][$quý])) {
$this->context->addViolation($constraint->duplicate_certif, [
'% quarter' => surround_by_nbsp($ quarter),
'%year' => surround_by_nbsp($year),
]);
nghỉ;
}
$all_certificates[$year][$quý] = TRUE;
}
}
=> Không hoạt động vì lý do tương tự
Tôi nên làm gì? (Tôi cũng đã thử xác thực trong biểu mẫu mà không gặp may)