Pimple DI股票贬值。怎么办?

时间:2016-01-12 19:53:52

标签: php symfony silex pimple

在Pimple 1.0中,我曾经能够像这样共享类实例:

$app['some_service'] = $app->share(function () {
    return new Service();
});

现在似乎已弃用,我无法找到执行此操作的新方法。

3 个答案:

答案 0 :(得分:12)

在Pimple 1.0(Silex 1)中,你这样做:

$app['shared_service'] = $app->share(function () {
    return new Service();
});

$app['non_shared_service'] = function () {
    return new Service();
};

在Pimple 3.0(Silex 2)中你这样做(这是相反的!):

$app['shared_service'] = function () {
    return new Service();
};

$app['non_shared_service'] = $app->factory(function () {
    return new Service();
});

答案 1 :(得分:1)

默认情况下,pimple 3.0(Silex 2.0使用)总是返回相同的服务实例。如果你不想要这种行为,你需要明确它并使用工厂函数。

答案 2 :(得分:1)

取决于疙瘩版本!

On Pimple 1.0

$container['shared'] = $container->shared(function(){
    return new Class();
});
$container['non_shared'] = function() {
    return new Class();
};

On Pimple 3.0

$container['shared'] = function() {
    return new Class();
};
$container['non_shared'] = $container->factory(function() {
    return new Class();
});

记住,当您创建共享服务时,他们返回的内容不会更改。当您创建非共享服务时,每次使用时,Pimple都会为您提供一个新的服务实例。