symfony - Symfony 4 自动装配无法正常工作
问题描述
这是上下文:
使用 composer “composer require leezy/pheanstalk-bundle”安装 beanstalk 包
我正在尝试在命令中使用,但出现此错误
无法自动装配服务“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
Pheanstalk\Contract\PheanstalkInterface:
alias: 'leezy.pheanstalk.proxy.default'
但是在这种情况下,虽然这样做会让您通过接口错误,但会产生一个新的“构造函数参数太少”错误。
查看捆绑包的文档表明您需要进行一些配置才能实际生成 pheanstalk 实例。composer require 命令足够聪明,可以将包添加到您的 bundles.php 文件中,但不会创建配置文件。因此,根据文档添加配置文件:
# config/packages/leezy_pheanstalk.yaml
leezy_pheanstalk:
pheanstalks:
primary:
server: beanstalkd.domain.tld
default: true
并且很快。错误消失。作为奖励,不再需要 config/services.yaml 中的别名,如果您添加它,则应将其删除。
推荐阅读
- python - 尝试在远程服务器上启动 Selenium Firefox webdriver 时如何缓解此 urllib3 错误?
- c++ - 用 emplace_back 与 std::transform 填充向量
- python-3.x - 在具有多个表的页面上使用 BeautifulSoup 抓取单个 Wiki 表
- python - Matplotlib 绘制一个常数 y 轴
- angular - 如何禁用子组件(子表单组)?
- html - 桌面窗口大小调整上的浏览器行为与移动设备上的浏览行为之间的差异
- .net - Pine Script stdev() 函数的问题
- python - 过滤时的连续色阶调整
- python - 根据另一个数据框查找重新排序对象内的字符串
- django - 如何在两个不同的页面中加载相同的模型部分