3

我搜索并阅读了很多相同的问题,但我得到了同样的错误:/

我创建一个服务:

parameters:
    tbackend.report.class: T\BackendBundle\Entity\Report
services:
    tbackend.entity.report:
        class:  %tbackend.report.class%
        arguments: ["%kernel.root_dir%"]

我在 T\BackendBundle\Entity\Report 中有这个:

public function __construct($rootDir){
    $this->rootDir = $rootDir;
}

当我尝试创建新的 Report(); 我收到这个消息:

警告:缺少 T\BackendBundle\Entity\Report::__construct() 的参数 1,在第 62 行的 /var/www/test/t_study/src/T/BackendBundle/Entity/ReportRepository.php 中调用并定义

注意事项:我知道调用了 services.yml,我在这个文件中有更多服务并且一切正常(Loginhandlers 等),我只添加了一个(tbackend.entity.report)

那有什么问题?:( 我不知道是否需要更多了解这个问题。我遵循 symfony2 服务容器指南 http://symfony.com/doc/master/book/service_container.html

基本上我在移动文件时尽量不在实体中使用DIR

4

1 回答 1

3

当实例化一个类时,你使用普通的 PHP。Symfony 并不是什么魔术,它可以连接到 PHP 的实例化过程中以自动在构造函数中注入东西。

如果你想获得一个服务,你要么必须在你需要的类中注入服务,要么你在类中拥有容器(例如,在控制器中)并从容器中检索服务。

$report = $this->container->get('tbackend.entity.report');

或:(在除控制器之外的所有情况下,这都是更好的做法)

class WhereINeedTheReport
{
    private $report;

    public function __construct(Report $report)
    {
        $this->report = $report;
    }
}
services:
    # ...
    where_i_need_the_report:
        class: ...
        arguments: ["@tbackend.entity.report"]
于 2015-07-01T11:41:53.240 回答