Разобрать массив в аргументы (оболочка AJAX в CodeIgniter) - PullRequest
0 голосов
/ 10 ноября 2011

Я пытаюсь создать оболочку AJAX в CodeIgniter

function admin_ajax () {

    $model = $this->input->post('model');
    $method = $this->input->post('method');

    if ( empty($model) || empty($method) )
        die('Missing Class or Method');

    if ( !method_exists($model, $method) )
        die('Class or Method does not exist');

    $args = $this->input->post('args');     
    $data = $this->$model->$method( $args );

    echo json_encode( $data );
    exit();     
}

Вы, вероятно, можете сказать, что я пытаюсь сделать.Поместите модель и метод в эту функцию вместе с некоторыми аргументами, затем эта функция вызывает функцию и передает аргументы ($args это массив между прочим).

Предположим, у меня есть такая функция:

get_site_list ($page_index = 0, $page_size = 10) {

Требуется два аргумента, но моя вызывающая функция ajax способна передать только один аргумент.Мне пришлось вернуться к выполнению

function ajax_get_site_list ( $args ) {
    return $this->get_site_list( $args[0], $args[1] );
}

, но это скучно.Есть ли способ, которым я могу взять свой массив аргументов $args и передать их функции, которая принимает несколько аргументов?

1 Ответ

3 голосов
/ 10 ноября 2011

Я думаю, что вы ищете call_user_func_array:

function ajax_get_site_list ( $args ) {
    return call_user_func_array(array($this, 'get_site_list'), $args);
}

Вы также можете по-настоящему полюбить ReflectionClass;)

$class_name = get_class($this);
$method = new ReflectionMethod($class, 'get_site_list');
$method->invoke($args);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...