2012-04-17 2 views
0

리튬 PHP를 멋지게 확장하려고합니다. 리튬 헬퍼에 대한 액세스를 허용하는 내 스마트 플러그인을 제외한 모든 기능이 작동합니다.call_user_func_array의 올바른 사용

나의 현명한 기능은 리튬 도우미에게 "잡동사니"를 의미합니다. 내가 고민하는 부분은 콜백에 도우미 매개 변수를 동적으로 추가하는 것입니다.

간체 코드

$params = array('Google', 'http://www.google.com'); 

$helper = function($args){ 
    return $this->html->link($args); 
}; 

return call_user_func_array($helper, $params); 

이 일부 추가 검사 위는 이상한 콜백에 $의 PARAMS 배열 ...의 첫 번째 항목을 통과 것으로 나타났다 <a href="/Google">Google</a>

으로 발생합니다. 그래서 나는 그것을 자체 배열로 감쌌다. 가져 가라. 설명 할 수없는 일!

return call_user_func_array($helper, array($params)); 

이 그러나 도우미 개별 매개 변수로 배열에서 배열이 아닌 번역 인수를 전달되는 것 같습니다, 나는 습관에 들어갈 리튬 오류가 발생합니다.

오류 코드 '(0 => 'Google', 1 => 'http://www.google.com', 'controller' => 'pages', 'action' => 'index')에 매개 변수 일치 항목을 찾을 수 없습니다.

그래서 나는 call_user_func_array 메소드를 사용하고 있지 않다는 것을 모았습니다.

내 최종 목표를 달성하는 유일한 해결책이 아니라면 언제든지 여러 가지 인수를 동적으로 전달하는 더 좋은 방법을 생각해 보면 좋을 것입니다.

참고 : $ this->html ->link 내 문제를 설명하는 간단한 방법이다, 그 객체의 htmllink 부분이 실제로 동적으로 변경됩니다, 완전히 동적 함수 인수에 따라서 요구 사항.

답변

2

$helper은 단 하나의 인수로 선언되며 하나만 $this->html->link으로 전송됩니다.

call_user_func_array(array($this->html, 'link'), array($params));을 직접 사용하지 않으시겠습니까?

+0

완벽하게 작동했습니다! 내 영웅! – joseym

0

왜 당신은 내 의견으로는 call_user_func_array()에 대한

return $helper($params); 

필요 없음을하지 않습니다.
아니면 나를 원하기 때문에 왜 이것을 원하는지 명확히하십시오.

+0

문제는 $ this-> html-> link가 $ this-> html-> link ('Google', 'http://www.google.com')와 같이 전달되어야하며 $ this-> html-> link (array ('Google', 'http://www.google.com')), $ params를 전달하면 충분하지 않습니다. – joseym

+0

이제 알았어 :) 그럼 내 대답은 쓸모 없어졌습니다. –

+0

어쨌든 고마워, @ kirlloid의 대답은 나에게 내가 어디 갈 필요가있어 – joseym