【问题标题】:Autowiring services in Symfony 4 (Too few arguments)Symfony 4 中的自动装配服务(参数太少)
【发布时间】:2018-11-23 18:30:23
【问题描述】:

我确实有一个简单的命令,构造函数需要 LoggerInterface 作为依赖项。

<?php

namespace App\Command;

// use (...)

class ProcessReportCommand extends Command
{
    /** @var LoggerInterface */
    private $logger;

    public function __construct(LoggerInterface $logger)
    {
        parent::__construct();
        $this->logger = $logger;
    }
    // (...)
}

我在services.yml 中的配置看起来很默认:

parameters:

services:
    _defaults:
        autowire: true      
        autoconfigure: true 
        public: false      

    App\:
        resource: '../src/*'
        exclude: '../src/{Entity,Migrations,Exception,Tests,Kernel.php}'

    App\Controller\:
        resource: '../src/Controller'
        tags: ['controller.service_arguments']

不幸的是,我收到 PHP 错误,说没有注入依赖项。

PHP 致命错误:未捕获 Symfony\Component\Debug\Exception\FatalThrowableError:类型错误:太 函数的几个参数 App\Command\ProcessReportCommand::__construct(), 0 传入 /home/tomasz/project/bin/console 位于第 40 行,预计 1 /home/tomasz/project/src/Command/ProcessReportCommand.php:17

即使我将此依赖项切换到我在App\ 下拥有的任何其他类,它的行为总是如此。 我真的不知道我应该做些什么才能让它发挥作用,即使是在services.yml 中明确包含服务的所有方式都不适合我。有什么线索吗?

【问题讨论】:

  • 您是如何访问服务的?
  • 在 app/AppKernel.php 中,是否使用“new Symfony\Bundle\MonologBu​​ndle\MonologBu​​ndle()”在“registerBundles”函数中注册了“MonologBu​​ndle”?
  • 在 symfony 3 上我遇到了这个错误并帮助删除了子服务定义。子服务没有自动装配,并且有 2 个参数。我没有使用子服务,但也许 symfony 仍然试图自动装配它。

标签: php symfony autowired


【解决方案1】:

你清除了chache吗? php bin/console cache:clear.

如果这不起作用,php bin/console debug:container Process 的输出是什么?

【讨论】:

  • 好吧,我什至不能使用bin/console,因为它像上面一样把我扔到Fatal Error,即使我手动删除var/cache/*
  • 我可以查看您的composer.json 以确保您使用的是正确的依赖项吗?
  • 当然"require": { "php": "^7.1.3", "ext-iconv": "*", "doctrine/dbal": "^2.7", "guzzlehttp/guzzle": "^6.3", "netresearch/jsonmapper": "^1.4", "symfony/console": "^4.0", "symfony/dependency-injection": "^4.0", "symfony/flex": "^1.0", "symfony/framework-bundle": "^4.0", "symfony/lts": "^4@dev", "symfony/monolog-bundle": "^3.2", "symfony/phpunit-bridge": "^4.0", "symfony/yaml": "^4.0" },
  • 看来我不得不在某个地方犯了一个错误,我只使用命令快速设置了新项目,它运行起来就像使用 autowire 一样。我将尝试调查导致该问题的原因,如果我能找到任何东西,我会告诉你。到目前为止,感谢您的帮助!
  • 目前还没有,这是一个非常简单的应用程序,因此我被卡住了,无论如何我会在我向前迈出一些步伐后进行调查:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 1970-01-01
  • 2019-07-01
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多