2012-07-26 3 views
0

PHP 클래스 ("자동로드")를 제어하고로드하는 데 사용하는 일반 클래스 로더를 작성했습니다. 코드의 일부는, 단순화 :PHP & AJAX : 알 수없는 인수 번호로 동적 메서드를 호출하는 방법

PHP 파일 :

namespace Ajax; 

require_once '../Loader.php'; 

class Loader extends \Loader{ 

static public function getAjaxResponse($Post){ 

    if (!\Checker::isClassName($Post['className']) || !\Checker::isMethodName($Post['method'])){ 
     return ''; 
    } 

    Loader::loadClass($Post['className']); 
    $class = '\\'.$Post['className']; 

    $handler = array($class, $Post['method']); 
    if (is_callable($handler)){ 
     $oClass = new $class(true); 
     return $oClass->$Post['method']($Post['params']); 
    }   
    } 
} 

new Loader; 
echo Loader::getAjaxResponse($_POST); 

JS 파일 :

var requestData = { 
    className : 'Menu', 
    method : 'assignItemToMenu', 
    params : { IdItem: $('input[name="IdItem"]').val(), IdParent:$('select[name="IdParent"]').val() } 
}; 

if ($('#itemsSortOrder').children().length == 0){ 
    $.extend(requestData.params, {addButtons : true}); 
} 

$.post('../classRepository/Ajax/Loader.php?open=' + $_GET['open'], requestData) 
    .success(function(data){ 
     document.write(data); 
     window.alert(data); 
    }) 
    .error(function(){ 
     window.alert('Retrieving data failed.'); 
    }); 

가 작동합니까를? AJAX 요청에서 하나의 매개 변수 만 보내면 JS 코드에 다음이 포함됩니다.

var requestData = { 
    className : 'Vocabulary', 
    method : 'getReport', 
    params : $('#report').val() 
}; 

작동하지 않는 경우? 1 param 이상 보내야 할 때. 내가 call_user_func_array()를 사용하려고했지만 $ this-> 내부 객체와 함께 작동하지 않습니다. 메서드는 정적이어야합니다. 리플렉션을 사용하려고했지만 성공하지 못했습니다.

나는 도대체 어떻게하는지, 어떻게하는지 알지 : eval(); 하지만 이것은 eval보다 악합니다 :)) 코드는 다음과 같이 보입니다.

$params = array(); 
foreach ($_POST['params'] as $param){ 
    if (is_string($param)){ 
     $params[] = '"'.$param.'"'; 
    } 
    else{ 
     $params[] = $param; 
    } 
} 
$params = implode(',',$params); 

$oClass = new $class; 
eval ('$oClass->$_POST["method"]('.$params.')'); 

아무도 당신을 어떻게 해결합니까?

+0

시도합니다. 문제의 원인이되는 코드 만 게시하십시오. PHP 또는 JS 디버거에서 가져온 출력 오류 메시지를 여기에 작성하십시오. "작동하지 않는다"는 말은 정보가 충분하지 않고 코드를 게시했음을 알고 있지만 많은 사람들이 자신이 수행하려고하는 것을 이해하지 못하는 것입니다. – Ozzy

답변

0

난 당신이 작동하지 않았다 시도 무엇인지 모르겠지만,이 성공적으로 eval() 교체해야합니다 : 귀하의 질문에 다시 현재의 문제가 아니라 전반적인 목표에 더 초점을

call_user_func_array(array($oClass, $_POST["method"]), $params); 
관련 문제