Puncte:0

Cum să stocați o valoare sigură a unui câmp în plus față de original?

drapel kz

Am un tip de câmp personalizat pe care îl creez cu un modul personalizat. Este un câmp de text simplu în care utilizatorul introduce un șir. Doresc să păstrez două copii ale acestui câmp:

  1. Valoarea exactă a șirului așa cum a fost introdusă de utilizator.
  2. O valoare sigură a aceluiași șir.

Iată cum creez câmpul:

clasa MyItem extinde FieldItemBase {

  /**
   * {@inheritdoc}
   */
  schema funcției statice publice (FieldStorageDefinitionInterface $field_definition) {
    întoarcere [
      'coloane' => [
        „valoare” => [
          'type' => 'text',
          'dimensiune' => 'minuscul',
          „nu nul” => FALSE,
        ],
        'safevalue' => [
          'type' => 'text',
          'dimensiune' => 'minuscul',
          „nu nul” => FALSE,
        ],
      ],
    ];
  }
â¦

}

Presupun că ar trebui să generez un valoare de siguranță de sfoară în hook_node_presave() și să intri cumva în entitate de acolo (dar corectările la aceste presupuneri sunt binevenite).

Nu am nicio problemă să obțin valoarea șirului așa cum a fost introdusă de utilizator și să calculez o valoare sigură:

$valoare = $entity->field_myfield->getString();
$safevalue = makeSafe($valoare);

Dar nu știu cum să obțin $safevalue stocate în baza de date.

Editați | ×

Văd că aceasta are două răspunsuri aproape identice. Ambele funcționează bine dacă cardinalitatea câmpului este una, așa că le-am votat pozitiv pe ambele. Deoarece nu le pot accepta pe amândouă, l-am acceptat pe cel de la apaderno pentru detalii suplimentare despre propertyDefinitions().

Încă nu reușesc să fac acest lucru să funcționeze cu un câmp cu mai multe valori, dar cred că probabil că trebuie să fie o întrebare separată.

Puncte:2
drapel us

Dacă safeValue a fost definit ca proprietate de câmp în propertyDefinitions(), poate fi accesat ca $entity->field_myfield->safeValue, fie pentru a-l citi, fie pentru a-l scrie.

În nucleul Drupal, un exemplu de câmp care stochează o copie procesată a valorii câmpului este TextItem clasa, a cărei propertyDefinitions() metoda conține următorul cod.

$properties['value'] = DataDefinition::create('șir')
  ->setLabel(t('Text'))
  ->setRequired(TRUE);
$properties['format'] = DataDefinition::create('filter_format')->setLabel(t('Text format'));
$properties['processed'] = DataDefinition::create('șir')
  ->setLabel(t('Text procesat'))
  ->setDescription(t('Textul cu formatul textului aplicat.'))
  ->setComputed(TRUE)
  ->setClass('\Drupal\text\TextProcessed')
  ->setSetting('sursa text', 'valoare')
  ->setInternal(FALSE);

Această clasă definește proprietatea ca fiind calculată. De aceea este schemă() metoda nu include acea proprietate.

Puncte:2
drapel cn

Pentru salvare:

$valoare = $entity->field_myfield->getString();
$entity->field_myfield->safevalue = makeSafe($value);

Pentru incarcare:

$safe_value = $entity->field_myfield->safevalue;

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.