1

我在安装 Symfony 2.0.16 时遇到了严重问题。为简单服务生成的缓存文件是错误的。

一种服务replacer.factory,一种工厂。我将只展示一个简化版本:

/**
 * @DI\Service("replacer.factory")
 */
class ReplacerFactory
{

    /**
     * @DI\InjectParams({"container" = @DI\Inject("service_container")})
     */
    public function __construct(ContainerInterface $container)
    {
        $this->container = $container;
    }

    public function getReplacer($object)
    {
        $replacer = new NewsletterReplacer($this->container);

        // Return the instance of NewsletterReplacer class
        return $replacer->setInstance($object);
    }

}

这是返回的实例,再次简化了一点:

class NewsletterReplacer
{

    private $container;

    private $instance;

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

    public function setInstance(Newsletter $newsletter)
    {
        $this->instance = $newsletter;
    }
}

由于某种原因,生成的缓存文件是完全错误的。

事实上,这是appDevProjectContainer.php文件的一部分,在命令之后php app/console cache:clear --env=dev --no-debug

protected function getReplacer_FactoryService()
{
    return $this->services['replacer.factory']
        = new \Acme\HelloBundle\Service\Replacer\NewsletterReplacer();
}

它应该是:

protected function getReplacer_FactoryService()
{
    return $this->services['replacer.factory']
        = new \Acme\HelloBundle\Service\Replacer\ReplacerFactory($this);
}

那么,出了什么问题,我该如何解决?

4

1 回答 1

0

这是一个带有注释的 PHP 错误以及 JMSDiExtraBundle,请参阅此问题。解决了更新 PHP 5.3.3-7 的问题。

于 2012-09-10T09:33:08.683 回答