Din anumite motive, abonații la evenimentele mele de feed-uri tocmai au încetat să mai funcționeze.
Codul meu arată așa, dpm-ul pentru depanare nu se declanșează niciodată, așa că cred că funcția nu este rulată.
Nu pot să-mi dau seama ce s-a schimbat.
spațiu de nume Drupal\partshub_feeds_modifications\EventSubscriber;
utilizați Drupal\feeds\Event\EntityEvent;
utilizați Drupal\feeds\Event\FeedsEvents;
utilizați Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Reacționează la evenimentele fluxurilor pentru a modifica proprietățile feedului.
*/
clasa FeedsSubscriber implementează EventSubscriberInterface {
/**
* {@inheritdoc}
*/
funcție publică statică getSubscribedEvents() {
$evenimente = [];
$events[FeedsEvents::PROCESS_ENTITY_PRESAVE][] = 'presalvare';
$events[FeedsEvents::PROCESS_ENTITY_POSTSAVE][] = 'postsalvare';
returnează $evenimente;
}
/**
* Acționează pentru a preveni o entitate.
*
* @param Drupal\feeds\Event\EntityEvent $event
* Evenimentul de alimentare.
*/
funcția publică presave(EntityEvent $event) {
dpm($eveniment);
// Obține obiectul feed.
$feed = $event->getFeed();
// Obține entitatea pe care se operează.
if ($feed->tip->entity->id() === „părți”) {
$entity = $event->getEntity();
// Obține entitatea neschimbată.
$unchanged_entity = \Drupal::entityTypeManager()
->getStorage('nodul')
->loadUnchanged($entity->id());
// Verificați dacă entitatea este nouă.
dacă (!$entity->isNew()) {
// Numai dacă partea nu este nouă, verificați valorile.
if ($feed->tip->entity->label() === „Piese”) {
if ($entity->get('titlu')->value === 'gol') {
$entity->get('title')->value = $unchanged_entity->get('title')->value;
}
// Montarea piesei/face câmpul.
if ($entity->get('field_make')->isEmpty()) {
$makes = $unchanged_entity->get('field_make')->referencedEntities();
foreach ($makes as $index => $term) {
$tid = $term->id();
dacă ($index == 0) {
$entity->set('field_make', $tid);
}
else {
$entity->get('field_make')->appendItem([
'target_id' => $tid,
]);
}
}
}
// Cod grup de piese.
if ($entity->get('field_group_code')->isEmpty()) {
$coduri = $unchanged_entity->get('field_group_code')
->referencedEntities();
foreach ($coduri ca $index => $cod) {
$cod_id = $cod->id();
dacă ($index == 0) {
$entity->set('field_group_code', $code_id);
}
else {
$entity->get('field_group_code')->appendItem([
'target_id' => $code_id,
]);
}
}
}
// Referințe încrucișate.
if ($entity->get('field_cross_references')->isEmpty()) {
$referințe = $unchanged_entity->get('field_cross_references')
->referencedEntities();
foreach ($referințe ca $index => $referință) {
$reference_id = $reference->id();
dacă ($index == 0) {
$entity->set('field_cross_references', $reference_id);
}
else {
$entity->get('field_cross_references')->appendItem([
'target_id' => $reference_id,
]);
}
}
}
}
elseif ($feed->tip->entity->label() === 'Atribute fizice') {
if ($entity->get('titlu')->value === 'gol') {
$entity->get('title')->value = $unchanged_entity->get('title')->value;
}
// Greutate parțială.
if ($entity->get('field_weight')->isEmpty()) {
$entity->get('field_weight')->value = $unchanged_entity->get('field_weight')->value;
}
// Înălțimea părții.
if ($entity->get('field_height')->isEmpty()) {
$entity->get('field_height')->value = $unchanged_entity->get('field_height')->value;
}
// Lățimea părții.
if ($entity->get('field_width')->isEmpty()) {
$entity->get('field_width')->value = $unchanged_entity->get('field_width')->value;
}
// Adâncimea părții.
if ($entity->get('field_depth')->isEmpty()) {
$entity->get('field_depth')->value = $unchanged_entity->get('field_depth')->value;
}
}
}
}
}
/**
* Acționează pentru a preveni o entitate.
*
* @param Drupal\feeds\Event\EntityEvent $event
* Evenimentul de alimentare.
*/
funcția publică postsave(EntityEvent $event) {
$feed = $event->getFeed();
$feeds = ['oe_references', 'sub_components', 'dimensions'];
$id = $feed->tip->entity->id();
if (in_array($id, $feeds)) {
$entity = $event->getEntity();
$nume_câmp_părinte = $entitate->nume_câmp_părinte->valoare;
$parent_id = $entity->parent_id->valoare;
$vid = \Drupal::entityTypeManager()->getStorage('node')->getLatestRevisionId($parent_id);
$part = \Drupal::entityTypeManager()->getStorage('node')->loadRevision($vid);
$paragraph_references = $part->get($parent_field_name)->referencedEntities();
$paragraph_references_id = [];
dacă ($paragraph_references) {
foreach ($paragraph_references ca $paragraph_reference) {
$paragraph_references_id[] = $paragraph_reference->id();
}
}
if (!in_array($entity->id(), $paragraph_references_id)) {
$câmpuri = [
„field_oe_references”, „field_sub_components_”, „field_dimensions”
];
if (în_array($nume_câmp_părinte, $câmpuri)) {
dacă ($parte) {
$part->{$parent_field_name}[] = $entity;
$part->salvare();
}
}
}
}
}
}
Am și o definiție a serviciului după cum urmează.
Servicii:
# Numele acestui serviciu.
parthsub_feeds_modifications_events_subscriber:
# Clasa de abonați la eveniment care va asculta evenimentele.
clasa: Drupal\partshub_feeds_modifications\EventSubscriber\FeedsSubscriber
# Etichetat ca event_subscriber pentru a înregistra acest abonat cu serviciul event_dispatch.
Etichete:
- { nume: event_subscriber }