2

Bundle 拡張機能では、メソッド呼び出しを (構成に基づいて動的に) サービス定義に追加していますmy.service

/**
 * {@inheritdoc}
 */
public function load(array $configs, ContainerBuilder $container)
{
    // ...

    // Get the defintion
    $definition = $container->getDefinition('my.service');

    // Dynamically add method calls to the definition
    foreach($config['options'] as $name => $value) {
        $definition->addMethodCall('set'.ucfirst($name), array($value));
    }

    // ...
}

定義にメソッドが存在しない場合は呼び出さないaddMethodCallようにしたいです。これを確認する方法はありますか?

4

2 に答える 2

3

サービスクラスにメソッドの定義がある場合にのみ、サービスクラスにメソッド呼び出しを追加したいだけだと思います

$serviceMethods = get_class_methods($definition->getClass());
//loop on your added methods

$method = 'set'.ucfirst($name);
if(in_array($method, $serviceMethods))
{
    $definition->addMethodCall($method, array($value));
}
于 2013-04-05T15:28:58.150 に答える
2

を使用してクラスを取得できませんでした..

$class = $definition->getclass();

そして、追加する前にメソッドが存在するかどうかを確認してください..

foreach($config['options'] as $name => $value) {
    $method = 'set'.ucfirst($name);

    if (method_exists($class, $method)
    {
        $definition->addMethodCall('set'.ucfirst($name), array($value));
    }
}
于 2013-04-05T15:26:38.580 に答える