2013-04-05 1 views
2

는 :정의에 메소드가 있는지 검사하고, 메소드 호출을 추가 (또는하지 않음) 하시겠습니까? 내 서비스 정의 <code>my.service</code> 내 번들 확장 내가 (구성에 따라 동적으로) 메서드 호출을 추가 해요에서

/** 
* {@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)); 
    } 
}