Symfony 4 自动布线无法正常工作



这是上下文:

安装带有作曲
  1. 家"作曲家需要leezy/pheanstalk-bundle"的豆茎捆绑包

  2. 我正在尝试在命令中使用,但收到此错误

无法自动连线服务 "App\Command\Worker\ProcessParserCommand":方法 "__construct((" 的参数 "$pheanstalk" 引用接口 "Pheanstalk\Contract\PheanstalkInterface",但
不存在此类服务。您可能应该将此接口别名为现有的"leezy.pheanstalk.proxy.default"服务。

class ProcessParserCommand extends Command
{
protected static $defaultName = 'app:worker:process-parser';
/** @var PheanstalkInterface $pheanstalk */
private $pheanstalk;
protected function configure()
{
$this
->setDescription("Parse something")
;
}

public function __construct(PheanstalkInterface $pheanstalk)
{
$this->pheanstalk=$pheanstalk;
parent::__construct();
}
}

事实证明,这是那些欺骗性的错误消息之一。

通常,当您收到"接口不存在,可能是别名SomeService"消息时,这意味着需要将接口显式定义为别名:

# config/services.yaml
PheanstalkContractPheanstalkInterface:
alias: 'leezy.pheanstalk.proxy.default'

但在这种情况下,当这样做可以克服接口错误时,会产生一个新的"构造函数参数太少"错误。

浏览一下捆绑包的文档就会发现,您需要一些配置才能实际生成 pheanstalk 实例。 作曲家 require 命令足够聪明,可以将捆绑包添加到您的捆绑包.php文件中,但不创建配置文件。 因此,请根据文档添加配置文件:

# config/packages/leezy_pheanstalk.yaml
leezy_pheanstalk:
pheanstalks:
primary:
server: beanstalkd.domain.tld
default: true

和普雷斯托。 错误消失了。 作为奖励,不再需要 config/services.yaml 中的别名,如果您添加了它,则应将其删除。

最新更新