1

Symfony 2.0.16 のインストールで深刻な問題が発生しました。シンプルなサービス用に生成されたキャッシュ ファイルが間違っています。

1 つのサービスreplacer.factory、一種の工場の 1 つ。簡略化されたバージョンのみを示します。

/**
 * @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 に答える