2016-07-11 4 views
1

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 ...

Antwort

0

Es war tatsächlich ein Tippfehler meinerseits in der Verzeichnisstruktur. Das hat mich einen ganzen Tag gekostet.

Wichtiger Hinweis für alle, die mit scheinbar unsinnigen Fehlern von Drupal 8 zu kämpfen scheinen: Vervierfachen Sie Ihre Rechtschreibung, soweit es um Verzeichnisse/Dateien und Namespaces geht!

Verwandte Themen