Tiêm phụ thuộc vào widget trường tùy chỉnh


9

Tôi đang cố gắng đưa dịch vụ truy vấn thực thể vào một tiện ích trường tùy chỉnh. Đây là mã có liên quan:

/**
 * Plugin implementation of the 'address_options' widget.
 *
 * @FieldWidget(
 *   id = "address_options",
 *   label = @Translation("Addresses"),
 *   field_types = {
 *     "entity_reference"
 *   }
 * )
 */
class MyCustomWidget extends WidgetBase {

  /**
   * The entity query factory service.
   *
   * @var \Drupal\Core\Entity\Query\QueryFactory
   */
  protected $entityQuery;

  public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, array $third_party_settings, QueryFactory $entity_query) {
    parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $third_party_settings);
    $this->entityQuery = $entity_query;
  }

  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static(
      $plugin_id,
      $plugin_definition,
      $configuration['field_definition'],
      $configuration['settings'],
      $configuration['third_party_settings'],
      $container->get('entity.query')
    );
  }

Các kết quả lỗi sau:

Lỗi nghiêm trọng có thể phục hồi: Đối số 6 được chuyển cho Drupal \ custom_module \ Plugin \ Field \ FieldWidget \ addressWidget :: __ construc () phải là một phiên bản của Drupal \ Core \ Entity \ Query \ QueryFactory, không được cung cấp, được gọi trong / homedir /Drupal/Core/Field/WidgetPluginManager.php trên dòng 130.

Có phải là không thể sử dụng tiêm phụ thuộc trong trường hợp này hoặc tôi đang thiếu một cái gì đó?

Câu trả lời:


17

Những gì bạn đang thiếu là triển khai \ Drupal \ Core \ Plugin \ ContainerFactoryPluginInterface, định nghĩa phương thức create ().

Xem \ Drupal \ file \ Plugin \ Field \ FieldWidget \ FileWidget để biết ví dụ.


Tuyệt vời! Chỉ cần làm cho ngày của tôi. :)
Beau
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.