Ich habe ein benutzerdefiniertes Feld für meine Drupal 8 App erstellt. Der Feldname wird als Büroadresse bezeichnet und sollte eine vollständige Adresse enthalten (Adresszeile 1, Adresszeile 2, Ort, Statuscode, Postleitzahl, Ländercode). Es hat auch ein Konfigurationsformular, das es dem Administrator ermöglicht zu entscheiden, aus welchen Ländern er auswählen kann.Drupal 8 kann DefaultWidget für benutzerdefiniertes Feld nicht finden
Außerdem gibt es einen Dienstanbieter mit dem Namen CountryStateService, der eine Liste der Länder und ihrer jeweiligen Staaten enthält.
Die Verzeichnisstruktur ist wie folgt:
/modules
/office_address
/config
/install
office_address.settings.yml
/schema
office_address.settings.yml
/src
/Form
ConfigForm.php
/Plugin
/Field
/FieldFormatter
OfficeAddressDefaultFormatter.php
/FieldType
OfficeAddress.php
/FieldWidget
OfficeAddressDefaultWidget.php
CountryStateService.php
office_address.info.yml
office_address.links.menu.yml
office_address.permissions.yml
office_address.routing.yml
office_address.services.yml
Die Datei src/Plugin/Feld/FieldWidget/OfficeAddressDefaultWidget.php wie folgt aussieht:
<?php
namespace Drupal\office_address\Plugin\Field\FieldWidget;
use Drupal;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\WidgetBase;
use Drupal\Core\Form\FormStateInterface;
/**
* Plugin implementation of the 'OfficeAddressDefaultWidget' widget.
*
* @FieldWidget(
* id = "OfficeAddressDefaultWidget",
* label = @Translation("Office Address"),
* field_types = {
* "OfficeAddress"
* }
*)
*/
class OfficeAddressDefaultWidget extends WidgetBase {
/**
* {@inheritdoc}
*/
public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
// my custom code here
}
}
Die Datei src/Plugin/Feld/Fieldtype /OfficeAddress.php sieht so aus:
<?php
/**
* @file
* Contains \Drupal\office_address\Plugin\Field\FieldType\OfficeAddress
*/
namespace Drupal\office_address\Plugin\Field\FieldType;
use Drupal\Core\Field\FieldItemBase;
use Drupal\Core\TypedData\DataDefinition;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
/**
* Plugin implementation of the 'Office Address' field type.
*
* @FieldType(
* id = "OfficeAddress",
* label = @Translation("Office Address"),
* description = @Translation("Stores an address."),
* category = @Translation("Custom"),
* default_widget = "OfficeAddressDefaultWidget",
* default_formatter = "OfficeAddressDefaultFormatter"
*)
*/
class OfficeAddress extends FieldItemBase {
// some code here
}
Die Erweiterung installiert ohne Probleme und t Das Konfigurationsformular ist verwendbar, wobei die Werte korrekt gespeichert und abgerufen werden. Das Problem wird angezeigt, wenn Sie versuchen, das OfficeAddress-Feld zu einem vorhandenen Inhaltstyp hinzuzufügen.
Der folgende Fehler wird ausgegeben:
Es gab ein Problem zu schaffen Feld Büroadresse: Die „OfficeAddressDefaultWidget“ Plugin nicht existiert.
Ich glaube, ich habe die Rechtschreibung überall überprüft und auch Dateiablage sollte korrekt sein. Ich habe in der Vergangenheit ein ähnliches Modul erstellt, das mit der gleichen Datei-/Verzeichnisstruktur arbeitete (der Name war Ort statt Büroadresse und es gab weder ein Konfigurationsformular noch irgendwelche Dienstanbieter). Ich habe an dieser Stelle eine Wand getroffen ...