2013-04-05 48 views
2

在我的捆绑扩展我添加方法调用(动态,基于配置),以我的服务定义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如果方法不存在中定义。有什么方法可以检查吗?

回答

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)); 
} 
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)); 
    } 
} 
相关问题