Am următorul câmp personalizat:
/**
* Implementarea pluginului pentru tipul de câmp „price_table”.
*
* @FieldType(
* id = „tabel_preț”,
* default_widget = "price_table_widget",
* default_formatter = "price_table_formatter",
* )
*/
clasa PriceTable extinde FieldItemBase {
funcție publică statică mainPropertyName(): șir {
valoare returnată';
}
schema funcției statice publice (FieldStorageDefinitionInterface $field_definition): matrice {
întoarcere [
'coloane' => [
„valoare” => [
'type' => 'blob',
'size' => 'mare',
'serialize' => TRUE,
],
],
];
}
funcția publică statică propertyDefinitions(FieldStorageDefinitionInterface $field_definition): matrice {
$properties['value'] = MapDataDefinition::create()
->setLabel(t('Date tabel'));
returnează $proprietăți;
}
funcția publică setValue($valori, $notify = TRUE) {
if (isset($values) && !empty($values['tabel'])) {
$values['value'] = $values['table'];
unset($valori['tabel']);
parent::setValue($valori, $notify);
}
}
funcția publică este goală(): bool {
încerca {
$valoare = $this->get('valoare')->getValue();
dpm($valoare); //<<<
returnează !is_array($valoare) || gol ($valoare);
} catch (MissingDataException | InvalidArgumentException $e) {
returnează FALSE;
}
}
}
cu widget-ul corespunzător (folosind un element de formular de tabel) și formatator prezent. Editarea merge bine, datele serializate sunt stocate în înregistrarea bazei de date a entității mele. Cu toate acestea, când vine vorba de formatator, nu afișează nimic pentru că este gol()
de mai sus primește întotdeauna o valoare goală și revine FALS
. Blobul este bine stocat (mulțumită lui setValue()
mai sus) dar nu este preluat de câmp.
Ce îmi lipsește aici?