Am un tip de câmp personalizat, persoana_org
, cu o completare automată configurată pentru a căuta punctul nostru final de „oameni”. Salvează ceva de genul John Smith (12345)
la proprietatea valorii ($properties['valoare']
).
Punctul final arată cam așa:
[{id, nume, titlu, ...}, {id, nume, titlu, ...},...]
Scopul meu este, la salvarea entității (și cron), să îmi interoghez punctul final și să salvez cele peste 30 de proprietăți în baza de date.
Trebuie să pot filtra și sorta aceste valori în vizualizări, motiv pentru care calcularea acestor date în timp real nu este inclusă în tabel.
După cum am înțeles, trebuie să setez clasa proprietății pe care să o folosesc pentru generarea valorii proprietății. Ceva asemănător cu:
$properties['name'] = DataDefinition::create('any')
->setLabel(nou TranslatableMarkup('Nume'))
->setComputed(TRUE)
->setReadOnly(TRUE)
->setClass('\Drupal\my_module\TypedDataName');
Apoi în mine TypedDataName
Clasa, primesc valoarea ca:
funcția publică getValue() {
if ($this->processed !== NULL) {
returnează $this->processed;
}
$valori = $this->getParent()->getValue();
$submitted_value = $valori['valoare'];
$id = EntityAutocomplete::extractEntityIdFromAutocompleteInput($submitted_value);
// Rulează fetch aici pentru a obține proprietatea „nume”.
$răspuns = $this->_fetchName($id);
$valoare = $răspuns[0]["nume"];
$this->processed = $valoare;
returnează $this->processed;
}
Acest lucru funcționează, deși pare că rulează pe afișaj în loc să fie extras din baza de date.
De asemenea, dacă am adăugat o altă proprietate, cum ar fi titlu
(sau restul dintre ei), va rula această preluare fiecare proprietate.
Cum se poate face acest lucru cu o singură preluare pentru a popula cele peste 30 de proprietăți la salvare?