Class 尝试进行依赖注入时未找到自定义插件块

Class not found for custom plugin block when trying to do dependency injection

我正在尝试在 Drupal 中创建自定义插件块。当尝试实际访问我注册的服务时,我继续收到以下异常:

NOTICE: PHP message: Error: Class 'Drupal\MyNamespace\MyRegisteredService' not found in /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php on line 259 #0 /var/www/html/web/core/lib/Drupal/Component/DependencyInjection/Container.php(173): Drupal\Component\DependencyInjection\Container->createService(Array, 'foo....')

我已经正确注册了服务,并正确设置了依赖注入(我相信)它只是访问了不起作用的服务。

我的文件结构目前看起来像:

- web
  - modules
    - custom
      - foo
        - foo.services.yml
        - src
          - MyService.php
          - Plugin
            - Block
              - FooBlock.php

foo.services.yml 看起来像:

services:
  foo.my_service:
    class: Drupal\MyNamespace\MyRegisteredService
    autowire: true

FooBlock.php 看起来像(仅用于依赖注入):

namespace Drupal\foo\Plugin\Block;

use Drupal\MyNamespace\MyRegisteredService
use Drupal\Console\Bootstrap\Drupal;
use Drupal\Core\Block\BlockBase;
use GuzzleHttp\Client;
use Http\Client\Exception;
use phpDocumentor\Reflection\Types\Array_;
use stdClass;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;


class FooBlock extends BlockBase implements ContainerFactoryPluginInterface {

  private $my_service;

  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static(
      $configuration,
      $plugin_id,
      $plugin_definition,
      $container->get('foo.my_service'),
    );
  }

  function __construct(
    array $configuration,
    $plugin_id,
    $plugin_definition,
    Drupal\MyNamespace\MyRegisteredService $my_registered_service,
  ) {
    $this->my_registered_service = $my_registered_service;
  }

MyService.php 看起来像:

<?php

namespace Drupal\MyNamespace;

class MyService
{
  static function say_hello()
  {
    return 'hello world';
  }
}

我不确定我尝试设置它的方式是否不正确,或者我是否没有正确设置依赖注入。我尝试过但没有成功的一些事情是更改名称空间并从中删除 Drupal\ 但这变化不大。

我也试过按照几个指南(例如 this)设置服务,但运气不佳。

如有任何帮助,我们将不胜感激。

我不确定您的服务或命名空间路径的实际名称,但我可以看到您的占位符引用中存在一些不一致之处:

  • 请将 Drupal\MyNamespace\MyRegisteredService 的所有引用更改为 Drupal\foo\MyRegisteredService,其中 foo 是您的模块的名称。这应该是小写的。

  • 其次,Drupal\MyNamespace\MyRegisteredService 引用了一个 class 名称 MyRegisteredService,而您给出的示例 class 名称是 MyService。这些应该是相等的,所以要么选择一个,要么选择另一个。