我在我的Symfony2應用程序中調整了圖像大小的圖像服務。我希望能夠以這種方式配置此服務,以便可以採用許多指示有效圖像大小的參數。例如。這是我目前的服務定義:使用自定義標籤定義Symfony2服務
my.service.image:
class: My\Service\ImageService
arguments: ["@service_container"]
不知何故,我想指出一個有效數量的圖像大小。我研究過使用標籤,但我不確定它們是否適合在這種情況下使用。在一個理想的世界,我可能想的東西,看起來像這樣結束了:
my.service.image:
class: My\Service\ImageService
arguments: ["@service_container"]
sizes:
- { name: small, width: 100, height: 100 }
- { name: medium, width: 100, height: 100 }
- { name: large, width: 100, height: 100 }
什麼是實現這一點,如何讓我的服務感知的各種「規格」的最佳方式?
UPDATE:
我已經取得了一些進展,但我仍然停留在這個問題上。這是迄今爲止我所取得的成就。
我用標籤來實現不同尺寸:
my.service.image:
class: My\Service\ImageService
arguments: ["@service_container"]
tags:
- { name: my.service.image.size, alias: small, width: 100, height: 100 }
- { name: my.service.image.size, alias: medium, width: 200, height: 200 }
- { name: my.service.image.size, alias: large, width: 300, height: 300 }
試圖按照食譜文檔[1],我結束了我的包創建* CompilerPass類:
namespace My\Bundle\MyImageBundle\DependencyInjection\Compiler;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\Reference;
class ImageServiceSizeCompilerPass implements CompilerPassInterface {
public function process(ContainerBuilder $container)
{
$definition = $container->get(
'my.service.image'
);
$taggedServices = $container->findTaggedServiceIds(
'my.service.image.size'
);
foreach($taggedServices as $defintion => $attributes)
{
foreach($attributes as $attribute)
{
$definition->addSize($attribute['alias'], $attribute['width'], $attribute['height']);
}
}
}
}
以上實際上是調用服務上的addSize
方法。我不確定上述內容是否正確,但似乎可行。
我現在遇到的問題是,當我在應用程序代碼中從容器中請求my.service.image
時,它似乎再次實例化它,而不是返回它第一次創建的實例。
任何有識之士將不勝感激。
[1] http://symfony.com/doc/current/components/dependency_injection/tags.html