1

I have created a module for adding a custom field. I works fine locally. But when I move it to another server the custom field I created gets categorized under disabled fields. What could be the issue? Is that anything related to permissions? Since it works as per my requirement locally I hope the code is fine.

CertField.php as


namespace Drupal\certfield\Plugin\Field\FieldType;

use Drupal\Core\Field\FieldItemBase;
use Drupal\Core\TypedData\DataDefinition;
use Drupal\Core\Field\FieldStorageDefinitionInterface as StorageDefinition;

/**
 * Plugin implementation of the 'address' field type.
 *
 * @FieldType(
 *   id = "CertField",
 *   label = @Translation("CertField"),
 *   description = @Translation("certfields."),
 *   category = @Translation("Custom"),
 *   default_widget = "CertFieldWidget",
 *   default_formatter = "CertFieldFormatter"
 * )
 */
class CertField extends FieldItemBase {

  /**
   * Field type properties definition.
   * 
   * Inside this method we defines all the fields (properties) that our 
   * custom field type will have.
   * 
   * Here there is a list of allowed property types: https://goo.gl/sIBBgO
   */
  public static function propertyDefinitions(StorageDefinition $storage) {

    $properties['privatekey'] = DataDefinition::create('string')
      ->setLabel(t('Private Key'));

    $properties['csr'] = DataDefinition::create('string')
      ->setLabel(t('Cerificate Signing Request'));

    $properties['sercer'] = DataDefinition::create('string')
      ->setLabel(t('Server Cerificate'));
    return $properties;
  }

  /**
   * Field type schema definition.
   * 
   * Inside this method we defines the database schema used to store data for 
   * our field type.
   * 
   * Here there is a list of allowed column types: https://goo.gl/YY3G7s
   */
  public static function schema(StorageDefinition $storage) {

     $columns = [];
    $columns['privatekey'] = [
      'type' => 'char',
      'length' => 255,
    ];
    $columns['csr'] = [
      'type' => 'char',
      'length' => 255,
    ];
    $columns['sercer'] = [
      'type' => 'char',
      'length' => 255,
    ];

    return [
      'columns' => $columns,
      'indexes' => [],
    ];
  }

  /**
   * Define when the field type is empty. 
   * 
   * This method is important and used internally by Drupal. Take a moment
   * to define when the field fype must be considered empty.
   */
  public function isEmpty() {
$isEmpty = 
      empty($this->get('privatekey')->getValue()) &&
      empty($this->get('csr')->getValue()) && 
       empty($this->get('sercer')->getValue()) ;

    return $isEmpty;
  }

} // class

and my CertFieldWidget.php is as



namespace Drupal\certfield\Plugin\Field\FieldWidget;

use Drupal;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\WidgetBase;
use Drupal\Core\Form\FormStateInterface;

/**
 * Plugin implementation of the 'CertFieldWidget' widget.
 *
 * @FieldWidget(
 *   id = "CertFieldWidget",
 *   label = @Translation("CertField select"),
 *   field_types = {
 *     "CertField"
 *   }
 * )
 */
class CertFieldWidget extends WidgetBase {

  /**
   * Define the form for the field type.
   * 
   * Inside this method we can define the form used to edit the field type.
   * 
   * Here there is a list of allowed element types: https://goo.gl/XVd4tA
   */
  public function formElement(
    FieldItemListInterface $items,
    $delta, 
    Array $element, 
    Array &$form, 
    FormStateInterface $formState
  ) {

    $element['privatekey'] = [
      '#type' => 'textfield',
      '#title' => t('Private Key'),
      '#placeholder' => t('Private Key'),
    ];

    // City

    $element['csr'] = [
      '#type' => 'textfield',
      '#title' => t('Certificate Signing Request'),
      '#placeholder' => t('Certificate Signing Request'),
    ];
    $element['sercer'] = [
      '#type' => 'textfield',
      '#title' => t('Server Certificate'),
      '#placeholder' => t('Server Certificate'),
    ];

    return $element;
  }

} // class

My CertFieldFormatter.php is as follows


namespace Drupal\certfield\Plugin\Field\FieldFormatter;

use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\FormatterBase;
use Drupal;

/**
 * Plugin implementation of the 'CertFieldFormatter' formatter.
 *
 * @FieldFormatter(
 *   id = "CertFieldFormatter",
 *   label = @Translation("CertField"),
 *   field_types = {
 *     "CertField"
 *   }
 * )
 */
class CertFieldFormatter extends FormatterBase {

  /**
   * Define how the field type is showed.
   * 
   * Inside this method we can customize how the field is displayed inside 
   * pages.
   */
  public function viewElements(FieldItemListInterface $items, $langcode) {


    $elements = [];
    foreach ($items as $delta => $item) {
      $elements[$delta] = [
        '#type' => 'markup',
        '#markup' => $item->privatekey . ', ' . $item->csr
      ];
    }

    return $elements;
  }

} // class
5
  • Is this a duplicate of the same question you asked 2 days ago? drupal.stackexchange.com/questions/210801/…
    – mradcliffe
    Aug 10, 2016 at 12:17
  • I have corrected that code issues but this is something related to Permission I think. Aug 10, 2016 at 12:19
  • Okay, just checking. It looked remarkably similar.
    – mradcliffe
    Aug 10, 2016 at 12:20
  • Can you share the code for the module?
    – Amy
    Aug 10, 2016 at 17:59
  • When I checked my error log I found one error that 'Class name must be a valid object or a string in Drupal\core\modules\field\src\FieldStorageConfigStorage.php on line 155' Aug 11, 2016 at 5:53

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Browse other questions tagged or ask your own question.