Puncte:1

Formatatorul de câmp personalizat eșuează în create()

drapel cn

PHPStorm, PHP 7.4 IDE evidențiază $container->get('date.formatter'), cu

„Parametru așteptat de tip „\Drupal\Core\Datetime\DateFormatterInterface”, „obiect” furnizat”

Această funcție este o copie exactă a elementului de bază TimestampFormatter (care arată și eroarea)

/**
 * {@inheritdoc}
 */
funcția publică statică create(ContainerInterface $container, matrice $configurație, $plugin_id, $plugin_definition) {
  returnează static nou (
    $plugin_id,
    $plugin_definition,
    $configuration['field_definition'],
    $configuration['settings'],
    $configuration['eticheta'],
    $configuration['view_mode'],
    $configuration['third_party_settings'],
    $container->get('data.formatter'),
    $container->get('entity_type.manager')->getStorage('date_format')
  );
}

__construct-ul caută o DateFormatterInterface (vezi mai jos) și nu sunt sigur cum funcționează aceasta în nucleu, dar „viewElements”-ul meu nu se declanșează niciodată de când a început această eroare.

funcția publică __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, **DateFormatterInterface $date_formatter**, EntityStorageInterface $date_format_storage) {

Care este containerul adecvat -> să utilizați pentru a returna un format de date adecvat și nu un obiect care face ca crearea să eșueze fără erori înregistrate pe care le pot vedea?

Puncte:1
drapel cn

Codul dvs. este în regulă, dar puteți elimina avertismentele instalând Plugin PHPStorm Symfony.

Acesta învață IDE-ul cum să rezolve clasa corectă de la numele serviciului pe care îl furnizați $container->get().

drapel cn
Mulțumesc @Clive, deoarece te-am văzut răspunzând la mii de întrebări de-a lungul multor ani. Apreciere. Lucru ciudat este că am câmpul meu setat să formateze pe baza acestui plugin, dar nu mai este numit atunci când este vizualizat nodul. Funcționa acum ceva timp, dar nu acum. Am puncte de întrerupere setate în constructor și viewElements, dar nu se declanșează niciodată.
drapel cn
IDE ajustat și avertismentul au dispărut. Bănuiesc că înțeleg greșit cum funcționează formatatorul pentru un câmp atunci când editez un nod. Formatul câmpului meu dateTime trebuie să se schimbe în funcție de o condiție. Formatatorul nu interacționează cu widget-ul care afișează data? Ar trebui să pun asta ca o întrebare separată?

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.