<?php
/*
* This file is part of EC-CUBE
*
* Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
*
* http://www.ec-cube.co.jp/
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Eccube\DependencyInjection\Compiler;
use Doctrine\Common\EventSubscriber;
use Symfony\Component\DependencyInjection\ChildDefinition;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
/**
* サービスタグの自動設定を行う
*
* 以下のタグは自動設定が行われないため, 自動設定対象になるように処理する
*
* - doctrine.event_subscriber
*
* PluginPassで無効なプラグインのタグは解除されるため, PluginPassより先行して実行する必要がある
*/
class AutoConfigurationTagPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container)
{
foreach ($container->getDefinitions() as $id => $definition) {
$this->configureDoctrineEventSubscriberTag($definition);
$this->configureRateLimiterTag($id, $definition);
}
}
protected function configureDoctrineEventSubscriberTag(Definition $definition)
{
$class = $definition->getClass();
if (!is_subclass_of($class, EventSubscriber::class)) {
return;
}
if ($definition->hasTag('doctrine.event_subscriber')) {
return;
}
$definition->addTag('doctrine.event_subscriber');
}
protected function configureRateLimiterTag($id, Definition $definition)
{
if (\str_starts_with($id, 'limiter')
&& $definition instanceof ChildDefinition
&& $definition->getParent() === 'limiter'
&& !$definition->hasTag('eccube_rate_limiter')) {
$definition->addTag('eccube_rate_limiter');
}
}
}