错误:
网站遇到了一个意外的错误。请稍后再试。TypeError:传递给Drupal{模块名}\主题{类名}::__construct()的参数必须实现接口Drupal\path_alias\AliasManagerInterface,Drupal\Core\Path\AliasManager的实例
在构造方法中出现错误时,请提出纠正错误的解决方案。
尝试将"AliasManagerInterface“修改为"use \Core\Path\AliasManagerInterface”,我们现在使用的是"use Drupal\path_alias\AliasManagerInterface“,但实际上在构造方法中会出现错误,如下所述。
代码:
use Drupal\path_alias\AliasManagerInterface;
/**
* Protected pathAlias variable.
*
* @var Drupal\path_alias\AliasManagerInterface
*/
protected $pathAlias;
public function __construct(AliasManagerInterface $pathAlias) {
$this->pathAlias = $pathAlias;
}发布于 2022-11-26 07:12:46
您必须使用Drupal8.8或Drupal8.9。
Drupal8,直到8.7,声明了引用Drupal\Core\Path\AliasManager的path.alias_manager服务。在Drupal 8.8中,该服务被取消,将在Drupal 9.x中删除。作为替代,引入了一个新的服务,path_alias.manager服务,它引用了Drupal\path_alias\AliasManager。
原始问题中的依赖注入是期望一个实现接口Drupal\path_alias\AliasManagerInterface的对象,而path_alias.manager服务确实实现了这个接口。但是,错误说明依赖注入没有接收实现Drupal\path_alias\AliasManagerInterface的对象,而是错误地接收了Drupal\Core\Path\AliasManager类型的对象,从而给出了错误。
最初的问题没有显示依赖关系是如何生成的,但是在Drupal中,最常见的两个方法是在模块的*.services.yml文件中创建服务和声明依赖项,或者在类的create()方法中声明依赖项。无论使用哪种方法,都仍然使用旧的path.alias_manager服务,因此将Drupal\Core\Path\AliasManager传递给类而不是Drupal\path_alias\AliasManager。解决方案是将被注入的服务从path.alias_manager更改为path_alias.manager。
https://drupal.stackexchange.com/questions/313853
复制相似问题